文档菜单
文档首页
/
MongoDB Enterprise Kubernetes Operator

修改Ops Manager或 MongoDB Kubernetes 资源容器

在本页

  • 定义MongoDB Kubernetes资源的卷挂载
  • 使用InitContainer调整MongoDB Kubernetes资源Docker镜像
  • 使用Dockerfile模板构建自定义镜像

您可以在其中修改容器的PodOps Manager运行MongoDB数据库资源,使用templatepodTemplate设置,该设置适用于您的部署

  • MongoDB数据库spec.podSpec.podTemplate

  • Ops Manager: spec.statefulSet.spec.template

  • 备份守护进程服务: spec.backup.statefulSet.spec.template

要查看您可以添加到templatepodTemplate的字段,请参阅Kubernetes文档

当您使用templatepodTemplate创建容器时,Kubernetes操作符根据您在containers数组中为每个容器提供的name来处理容器创建的方式不同

  • 如果name字段匹配适用资源镜像的名称,则Kubernetes操作符更新Ops Manager或者MongoDB数据库容器在Pod中,该Pod应用了templatepodTemplate

    • Ops Manager: mongodb-enterprise-ops-manager

    • 备份守护进程服务: mongodb-backup-daemon

    • MongoDB数据库: mongodb-enterprise-database

    • 应用数据库: mongodb-enterprise-appdb

  • 如果name字段不匹配适用资源的镜像名称,则Kubernetes操作符在适用templatepodTemplate的每个Pod中创建一个新的容器。

容器中的磁盘文件在Pod中不会在容器崩溃或重启时存活。通过使用spec.podSpec.podTemplate设置,您可以添加一个卷挂载来持久化存储在MongoDB数据库资源中,生命周期与Pod一致。

为MongoDB数据库资源创建卷挂载

  1. 更新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: {}
  2. 应用更新后的资源定义

    kubectl apply -f <database-resource-conf>.yaml -n <metadata.namespace>

MongoDB 资源Docker镜像在RHEL上运行并使用RHEL的默认系统配置。要在 MongoDB 资源容器中调整底层的RHEL系统配置,请添加一个具有特权的InitContainer init container 使用以下设置之一

示例

MongoDB数据库资源Docker镜像使用RHEL默认的 keepalive 时间为 7200。MongoDB建议数据库部署使用更短的 keepalive 时间为 120

如果您在客户端与数据库资源之间的通信中遇到网络超时或套接字错误,您可以在数据库资源Docker镜像中调整 keepalive 时间。

提示

另请参阅

要调整MongoDB数据库资源容器的Docker镜像

  1. 更新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"]
  2. 应用更新后的资源定义

    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

提示

另请参阅

操作系统配置 在 MongoDB 手册中。

您可以修改 MongoDB Dockerfile 模板以创建适合您用例的自定义Kubernetes操作符镜像。要构建自定义镜像,您需要

  • 您修改自 MongoDB 模板的自定义 Dockerfile。

  • MongoDB 提供的模板上下文镜像。

构建容器镜像所使用的 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

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 文档。

返回

故障排除