修改Ops Manager或 MongoDB Kubernetes 资源容器
您可以在其中修改容器的Pod中Ops Manager运行MongoDB数据库资源,使用template
或podTemplate
设置,该设置适用于您的部署
MongoDB数据库
spec.podSpec.podTemplate
Ops Manager:
spec.statefulSet.spec.template
要查看您可以添加到template
或podTemplate
的字段,请参阅Kubernetes文档
当您使用template
或podTemplate
创建容器时,Kubernetes操作符根据您在containers
数组中为每个容器提供的name
来处理容器创建的方式不同
如果
name
字段匹配适用资源镜像的名称,则Kubernetes操作符更新Ops Manager或者MongoDB数据库容器在Pod中,该Pod应用了template
或podTemplate
Ops Manager:
mongodb-enterprise-ops-manager
备份守护进程服务:
mongodb-backup-daemon
MongoDB数据库:
mongodb-enterprise-database
应用数据库:
mongodb-enterprise-appdb
如果
name
字段不匹配适用资源的镜像名称,则Kubernetes操作符在适用template
或podTemplate
的每个Pod中创建一个新的容器。
为MongoDB Kubernetes资源定义卷挂载
容器中的磁盘文件在Pod中不会在容器崩溃或重启时存活。通过使用spec.podSpec.podTemplate
设置,您可以添加一个卷挂载来持久化存储在MongoDB数据库资源中,生命周期与Pod一致。
为MongoDB数据库资源创建卷挂载
更新MongoDB数据库资源定义,包括为创建的数据库Pod中的容器添加卷挂载Kubernetes操作符。
示例
使用
spec.podSpec.podTemplate
定义卷挂载podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database volumeMounts: - mountPath: </new/mount/path> name: survives-restart volumes: - name: survives-restart emptyDir: {} 应用更新后的资源定义
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
使用InitContainer调整MongoDB Kubernetes资源Docker镜像
MongoDB
资源Docker镜像在RHEL上运行并使用RHEL的默认系统配置。要在 MongoDB
资源容器中调整底层的RHEL系统配置,请添加一个具有特权的InitContainer init container 使用以下设置之一
spec.podSpec.podTemplate
:向MongoDB数据库资源容器添加一个具有特权的InitContainer。spec.statefulSet.spec.template
:向Ops Manager资源容器添加一个具有特权的InitContainer。
示例
MongoDB数据库资源Docker镜像使用RHEL默认的 keepalive
时间为 7200
。MongoDB建议数据库部署使用更短的 keepalive
时间为 120
。
如果您在客户端与数据库资源之间的通信中遇到网络超时或套接字错误,您可以在数据库资源Docker镜像中调整 keepalive
时间。
要调整MongoDB数据库资源容器的Docker镜像
更新MongoDB数据库资源定义,向数据库Pod添加具有特权的InitContainerKubernetes操作符。
示例
将
spec.podSpec.podTemplate
中的keepalive
值更改为建议的值120
spec: podSpec: podTemplate: spec: initContainers: - name: "adjust-tcp-keepalive" image: "busybox:latest" securityContext: privileged: true command: ["sysctl", "-w", "net.ipv4.tcp_keepalive_time=120"] 应用更新后的资源定义
kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>
Kubernetes为每个 Pod 添加一个特权的 InitContainer。Kubernetes操作符使用 MongoDB
资源定义创建。定义。
打开到您的数据库资源中运行的容器的一个 shell 会话 Pod 并验证您的更改。
示例
要遵循之前的 keepalive
示例,调用以下命令以获取当前的 keepalive
值
kubectl exec -n <metadata.namespace> -it <pod-name> -- cat /proc/sys/net/ipv4/tcp_keepalive_time 120
使用 Dockerfile 模板构建自定义镜像
您可以修改 MongoDB Dockerfile 模板以创建适合您用例的自定义Kubernetes操作符镜像。要构建自定义镜像,您需要
您修改自 MongoDB 模板的自定义 Dockerfile。
MongoDB 提供的模板上下文镜像。
MongoDB Dockerfile 模板
构建容器镜像所使用的 Dockerfile 公开可从 MongoDB Enterprise Kubernetes GitHub 仓库。
Dockerfile 目录按资源名称、版本和发行版组织
├── <resource name> │ └── <image version> │ └── <base distribution> │ └── Dockerfile template
将您想要使用的模板复制到您自己的 Dockerfile 中,并按需修改。
上下文镜像
要从任何 MongoDB Dockerfile 模板构建镜像,您必须提供其上下文镜像。
每个Dockerfile模板都关联一个上下文镜像,可以从同一个Quay注册库中检索到,作为原始镜像。上下文镜像总是以quay.io/mongodb/<资源名称>:<镜像版本>-context
的格式进行标记。
要为docker build
提供上下文镜像,请包含带有--build-arg
选项的imagebase
变量,并将其设置为Quay.io标记,其中<资源名称>
和<镜像版本>
与您的Dockerfile模板匹配。
示例
如果您要构建任何发行版的mongodb-enterprise-database
2.0.0版本镜像,请包括
--build-arg imagebase=quay.io/mongodb/mongodb-enterprise-database:2.0.0-context
docker build
示例
mongodb-enterprise-operator
版本1.9.1的Ubuntu发行版默认基于ubuntu:1604
。在这个例子中,该基础Dockerfile模板被修改为使用ubuntu:1804
并保存为myDockerfile
。
以下命令构建了自定义镜像,并为其添加了标签1.9.1-ubuntu-1804
cat myDockerfile | docker build --build-arg imagebase=quay.io/mongodb/mongodb-enterprise-operator:1.9.1-context \ --tag mongodb-enterprise-operator:1.9.1-ubuntu-1804 -
注意
在docker build
的末尾包含一个连字符(-
),以读取cat myDockerfile
的输出,而不是提供本地目录作为构建上下文。