对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

容器镜像

安装Kubernetes Operator 时,它会从 Quay.io容器注册表中提取映像。Kubernetes Operator 映像基于 Red Hat UBI 8 和 9 操作系统。MongoDB每天都会为最新的操作系统和支持库更新重建Kubernetes Operator 映像。

注意

静态容器拉取的MongoDB 助手映像始终位于 Red Hat UBI 9 上。

官方镜像具有以下优点:

  • 它们每天都会针对最新的上游漏洞修复进行重建。

  • MongoDB 会对它们进行测试、维护和支持。

要查看每个映像的所有可用版本,请参阅以下链接。

图像名称
说明
支持的架构

MongoDB 助手映像基于 Red Hat UBI9 构建,用于静态容器、应用程序数据库和MongoDB Community Edition部署。

支持 x86-64、ARM64、s390x 和 ppc64 文件。支持所有版本的MongoDB Controllers for Kubernetes Operator 的静态和非静态容器。

旧版MongoDB 助手映像。

支持 x86-64 和 ARM64。支持Kubernetes Operator 的所有版本的MongoDB控制器的非静态容器。仅支持Kubernetes Operator 1.2.0 及更早版本的MongoDB控制器的静态容器。

用于静态容器和应用程序数据库的企业版MongoDB映像。对于IBM ZSeries (s390 x) 和 Power (ppc64 le) 架构,映像仅在 Red Hat UBI9 上运行,并且支持仅限于MongoDB8.0.12 +。

x86-64, ARM64, s390x, ppc64le

initContainer 包含应用程序数据库启动脚本和就绪探针的映像。

x86-64, ARM64, s390x, ppc64le

用于非静态容器的MongoDB数据库环境映像。

x86-64, ARM64, s390x, ppc64le

initContainer 包含 MongoDB Agent 启动脚本和就绪探针的映像。

x86-64, ARM64, s390x, ppc64le

Ops Manager 映像。

仅限 x86-64

initContainer 包含 Ops Manager 启动脚本和就绪探针的映像。

仅限 x86-64

静态容器比非静态容器更简单、更安全。 静态容器在运行时是不可变的,这意味着它们不会从用于创建容器的映像中更改。 此外:

  • 运行时,静态容器不会通过网络连接下载二进制文件或运行脚本或其他实用程序。 静态容器仅下载运行时配置文件。

  • 运行时,静态容器不会修改除存储卷挂载之外的任何文件。

  • 您可以对容器映像运行安全扫描,以确定实际运行的容器,并且运行的容器不会运行映像中定义以外的二进制文件。

  • 静态容器不要求您在MongoDB MongoDB Ops Manager或其他 HTTPS 服务器上托管 二进制文件,如果您有气隙环境,这一点尤其有用。

  • 您无法为静态容器运行大量CMD脚本。

  • 您无法使用initContainer在静态容器之间复制文件。

注意

使用静态容器时, MongoDB数据库 CR 和应用程序数据库部署之间的容器布局和资源限制不同。

当部署为静态容器时, MongoDB数据库 CR 由两个具有不同角色的容器组成:

  • The mongodb-agent 容器运行 MongoDB Agent,然后 MongoDB Agent 运行 mongod进程。该容器处理实际的数据库工作负载。

  • mongodb-enterprise-server容器提供MongoDB二进制文件,但不运行任何活动进程。

要修改MongoDB 数据库资源的资源限制,请在 mongodb-agent容器上指定所需的资源限制。在 mongodb-enterprise-server容器上设立的资源限制对性能没有功能性影响,但仍计入节点资源分配。

对于静态架构中的应用程序数据库,mongod 直接在 mongod容器中运行,而不是在 mongodb-agent 中运行。要修改应用程序数据库的资源限制,请改为在 mongod容器上指定所需的资源限制。

您可以使用静态容器的公共预览版来代替现有的非静态容器,该容器会在运行时从Cloud Manager或MongoDB Ops Manager或互联网下载MongoDB二进制文件。 您可以使用此页面上的程序为所有或单个MongoDB部署启用或禁用静态容器。

静态容器默认使用mongodb-enterprise-server Quay.io存储库中的映像,但如果您为Kubernetes节点配置了自己的注册表,则可以使用自己的注册表。

静态和非静态容器的架构有很大不同,从一种容器迁移到另一种容器需要几个步骤。 要了解更多信息,请参阅迁移到静态容器迁移到非静态容器。

默认的非静态容器架构假设您引导一个空壳容器,下载并启动MongoDB 助手,然后从Cloud Manager或Ops Manager下载 和mongod 的二进制文件。

带有非静态容器的 MongoDB 部署架构
点击放大

静态容器架构使用Kubernetes的共享命名空间功能将MongoDB 助手作为单独的进程运行,因此它可以控制完整的mongod生命周期并避免通过网络下载文件。

带有静态容器的 MongoDB 部署架构
点击放大

如果使用静态容器,则无需将MongoDB Ops Manager配置为在本地模式远程模式 下运行,除非使用可查询备份。 在静态容器架构中,代理和 mongod 的二进制文件有自己的容器映像,并且这些容器映像不是从MongoDB Ops Manager下载的。

可查询备份是一个例外,因为在非静态容器架构中,默认,备份守护程序会下载并运行所有备份版本的MongoDB Server二进制文件。 这种默认的MongoDB行为破坏了用于运行备份守护程序的容器的完全静态特性。 如果使用可查询备份,则仍须使用本地或远程模式托管相关MongoDB Server二进制文件。 要学习;了解更多信息,请参阅配置MongoDB Ops Manager资源以使用本地模式配置MongoDB Ops Manager资源以使用远程模式。

如果您以前使用过“远程”或“本地”模式并且不想使用可查询备份,请执行以下操作以确保可以将 mongodb-enterprise-server 映像 下载到 Pod 使用的 节点 上:

  1. 为Kubernetes节点配置内部容器注册表。

    除非您使用本地容器注册表,否则节点将从 Quay.io下载映像。

  2. 下载并添加 mongodb-enterprise-server 映像。

如果启用静态容器:

  • IBM ZSeries (s390x) 或IBM POWER (ppc64le)硬件架构上的部署仅支持MongoDB 8.0.12 及更高版本的静态容器。

  • 您必须 MongoDB禁用可查询备份MongoDB Ops Manager ,这样 备份守护程序服务 就不会尝试从 下载 二进制文件,因为这会破坏静态容器的不可变特性。

  • 对于MongoDB Ops Manager,仅 6.0.27+、 7.0.12+ 和 8.0.0+ 兼容。Kubernetes Operator 会根据您选择用来管理特定部署的MongoDB Ops Manager版本,自动使用正确版本的MongoDB 助手容器。

  • 使用MongoDB Cloud Manager时,您的MongoDB Agent助手版本可能无法兼容最新版本的MongoDB Cloud Manager ,因为Kubernetes Operator 无法调用MongoDB Cloud Manager中的 agentVersion 端点。 要使用 确保您的MongoDB Agent MongoDB Cloud Manager是最新的,您可以执行以下操作之一:

    • 通过覆盖MongoDB 助手的 StatefulSet 容器映像,在 MongoDB资源规范 中指定 兼容的 MongoDB 助手版本。示例:

      podSpec:
      podTemplate:
      spec:
      containers:
      - name: mongodb-agent
      image: quay.io/mongodb/mongodb-agent:13.49.1.10399-1
    • 将Kubernetes Operator 升级到最新版本,这会自动更新MongoDB Agent助手。

  • 升级MongoDB版本Atlas Triggers所有 Pod 的滚动重启,并且可能导致更多选举,最多可达 Pod 的数量。 任何trigger滚动重启的更新都是如此。

  • 您无法从MongoDB database MongoDB Agent的状态 确定是否进行了 升级。当Kubernetes在升级后轮换 Pod 时, MongoDB Agent助手会替换健康状态文件,因此您无法从健康状态中看出发生了版本更改,只能从当前健康状态中看出。

不需要,如果您使用静态容器,则无需将MongoDB Ops Manager配置为在本地模式远程模式下运行,除非您使用可查询备份。 要学习;了解更多信息,请参阅本地和远程模式。

静态容器不会在运行时下载MongoDB二进制文件。相反,它使用来自 mongodb-enterprise-server Quay.io存储库的映像。要学习;了解有关更改的详情,请参阅步骤 6。

有多种方法可以确定您的部署是否正在使用静态容器。 要学习;了解详情,请参阅步骤7 。

要从非静态迁移到静态容器,请按照以下步骤设置MongoDB Agent环境变量并启用静态容器。 您还可以在安装升级过程中启用静态容器。

2

按照禁用可查询备份中的步骤进行操作。

如果要使用可查询备份,则必须将MongoDB Ops Manager资源配置为使用本地模式远程模式,以便可以从MongoDB Ops Manager中提取所有正在使用的版本的二进制文件。

3

静态容器架构不使用初始化容器。 如果存在针对初始化容器的覆盖项,则从非静态容器到静态容器的迁移将失败。

从MongoDB资源规范或MongoDB Ops Manager资源规范中删除初始化容器的任何 StatefulSet 覆盖项。示例,确保尚未为 initContainers 配置以下设置:

4

在Kubernetes Operator配置文件中,定义MDB_AGENT_IMAGE_REPOSITORY环境变量,以指定Kubernetes Operator 从中下载静态容器的MongoDB Agent助手映像的存储库。

在Kubernetes Operator Helm 图表 中,定义 KubernetesMongoDB Agent注册表。 指定 代理 代理 从中下载静态容器的 映像的存储库。

5

保存更改后,重新应用配置。

如果您在没有OpenShift的情况下使用Kubernetes ,请运行:

kubectl apply -f mongodb-kubernetes.yaml

如果将Kubernetes与OpenShift结合使用:

oc apply -f mongodb-kubernetes-openshift.yaml
helm upgrade mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set registry.pullPolicy='IfNotPresent'

这会启动部署中所有 Pod 的滚动重启。

6

选择下方相应的标签页,一次性为所有MongoDB部署(包括现有部署)启用静态容器,或一次启用一个部署。

7

保存更改后,重新应用配置。

如果您在没有OpenShift的情况下使用Kubernetes ,请运行:

kubectl apply -f <my-config-file>.yaml

如果将Kubernetes与OpenShift结合使用:

oc apply -f <my-config-file>.yaml
helm upgrade mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="static"

Kubernetes Operator 会更新MongoDB 部署的 StatefulSet 映像,从之前同时托管MongoDB 助手和MongoDB 数据库的单个容器过渡到具有两个独立容器的新配置:一个用于MongoDB 助手,另一个用于MongoDB 数据库。此更新会启动滚动重启。

迁移到静态容器时,会发生以下应用:

  • Kubernetes节点使用其配置的容器注册表来执行下载。

  • 监控代理和自动化代理版本一致。

  • Kubernetes Operator 而不是代理来处理MongoDB升级。

  • Kubernetes Operator 会替换现有映像,从而导致滚动重启。

8
  • 检查以下变量之一的值,您必须已将其设立为static

    MDB_DEFAULT_ARCHITECTURE

    所有部署的变量。

    metadata.annotations[mongodb.com/v1.architecture]

    每次部署变量。

  • 检查数据库部署,验证两个独立映像的使用情况,一个用于代理,另一个用于MongoDB,并确保未部署任何初始化容器。

要从静态容器迁移到非静态容器,请按照以下步骤禁用静态容器。 您还可以在安装升级过程中禁用静态容器。

1

选择下方相应的标签页,一次性为所有 MongoDB 部署(包括现有部署)禁用静态容器,或一次禁用一个部署。

2

保存更改后,重新应用配置。

如果您在没有OpenShift的情况下使用Kubernetes ,请运行:

kubectl apply -f <my-config-file>.yaml

如果将Kubernetes与OpenShift结合使用:

oc apply -f <my-config-file>.yaml
helm upgrade mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="non-static"

Kubernetes Operator 会替换MongoDB 部署的 StatefulSet 映像,并对部署中的所有 Pod 启动滚动重启。