您可以使用适用于您的部署的template
或 设置来修改运行MongoDB Ops Manager和MongoDB 数据库资源的 PodpodTemplate
中的容器:
MongoDB database:
spec.podSpec.podTemplate
Ops Manager:
spec.statefulSet.spec.template
要查看哪些字段可以添加到template
或podTemplate
中,请参阅 Kubernetes 文档。
当您使用template
或podTemplate
创建container时,Kubernetes 操作符会根据您为containers
数组中每个container提供的name
以不同方式处理container创建:
如果
name
字段与适用资源映像的名称 匹配 ,Kubernetes Operator 会更新MongoDB Ops Manager MongoDB databasePod 中的 或 容器。template
或podTemplate
适用的对象:Ops Manager:
mongodb-enterprise-ops-manager
备份守护程序服务:
mongodb-backup-daemon
MongoDB database:
mongodb-enterprise-database
应用程序数据库:
mongodb-enterprise-appdb
如果
name
字段与适用资源映像的名称 不匹配 ,Kubernetes Operator 会在每个 Pod 中创建一个新容器template
或podTemplate
适用的对象。
为 MongoDB Kubernetes 资源定义卷挂载
Pod 中容器中的磁盘文件 在容器崩溃或重启时无法幸免。使用spec.podSpec.podTemplate
设置,您可以添加 卷挂载 在 Pod 的生命周期内将数据持久保存在MongoDB 数据库资源中 。
要为 MongoDB database 资源创建卷挂载,请执行以下操作:
更新 MongoDB database 资源定义,以包含 Kubernetes Operator 创建的 database Pod 中的 container 的卷挂载。
例子
使用
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 初始化容器 使用以下设置之一:
spec.podSpec.podTemplate
:将特权 InitContainer 添加到 MongoDB 数据库资源容器。spec.statefulSet.spec.template
:将特权 InitContainer 添加到 Ops Manager 资源容器。
例子
MongoDB database 资源 Docker 映像使用 RHEL 默认keepalive
时间7200
。对于数据库部署,MongoDB 建议缩短keepalive
的120
时间。
如果在客户端与数据库资源之间的通信中遇到网络超时或套接字错误,您可以调整数据库资源 Docker 映像中的keepalive
时间。
提示
TCP keepalive 时间会影响 MongoDB 部署吗?在 MongoDB 手册中
要为 MongoDB database container 调整 Docker 映像,请执行以下操作:
更新 MongoDB database 资源定义,将特权 InitContainer 附加到 Kubernetes Operator 创建的数据库 pods。
例子
将
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 Operator 使用MongoDB
资源定义创建。
打开与数据库资源shell Pod 中正在运行的容器的 会话 并验证您的更改。
例子
要遵循前面的keepalive
示例,请调用以下命令以获取当前的keepalive
值:
kubectl exec -n <metadata.namespace> -it <pod-name> -- cat /proc/sys/net/ipv4/tcp_keepalive_time 120
提示
MongoDB 手册中的操作系统配置。
使用 Dockerfile 模板构建自定义映像
您可以修改 MongoDB Dockerfile 模板,以创建适合您的使用案例的自定义 Kubernetes 操作符映像。要构建自定义映像,您需要:
从 MongoDB 模板修改而来的自定义 Dockerfile。
MongoDB 为模板提供的上下文映像。
MongoDB Dockerfile 模板
用于构建容器映像的 Dockerfile 可从MongoDB EnterpriseKubernetesGithub 存储库公开获取。
Dockerfile 目录按资源名称、版本和分布进行组织:
├── <resource name> │ └── <image version> │ └── <base distribution> │ └── Dockerfile template
将要使用的模板复制到自己的 Dockerfile 中,并根据需要进行修改。
上下文图像
要从任何 MongoDB Dockerfile 模板构建映像,您必须提供其上下文映像。
每个 Dockerfile 模板都有一个关联的上下文映像,可从同一 Quay 注册表作为原始图像。上下文图像始终以quay.io/mongodb/<resource-name>:<image-version>-context
格式标记。
要向docker build
提供上下文图像,请包含--build-arg
选项,并将imagebase
变量设置为 Quay.io 标签,其中<resource-name>
和<image-version>
与您的 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
的输出,而不是提供本地目录作为构建上下文。
提示
要了解有关docker build
的更多信息,请参阅 Docker 文档。