Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ /

容器镜像

在此页面上

  • 静态容器(公共预览版)
  • 架构
  • 与本地或远程模式的兼容性
  • 限制
  • 常见问题解答
  • 迁移到静态容器
  • 迁移到非静态容器

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

官方镜像具有以下优点:

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

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

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

图像名称
说明

MongoDB Agent 映像。

用于 静态容器和应用程序数据库的企业版MongoDB映像。

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

用于非静态容器的MongoDB数据库环境映像。要学习;了解静态和非静态容器,请参阅静态容器(公共预览版)。

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

Ops Manager 映像。

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

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

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

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

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

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

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

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

注意

作为静态容器部署时, Kubernetes Operator部署由两个容器组成 — 一个 mongodb-agent容器和一个 mongodb-enterprise-server容器。MongoDB 数据库自定义资源从 mongodb-agent容器继承资源限制定义,该容器在静态容器部署中运行 mongod进程。要修改MongoDB 数据库资源的资源限制,必须在 mongodb-agent容器上指定所需的资源限制。

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

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

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

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

显示 MongoDB 部署的高级架构的图表,其中包含使用 MongoDB Enterprise Kubernetes Operator 配置的非静态容器。
点击放大

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

显示MongoDB 部署的高级架构的图表,其中包含使用MongoDB Enterprise Kubernetes Operator 配置的静态容器。
点击放大

如果使用静态容器,则无需将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下载并添加 映像。

如果启用静态容器:

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

  • 对于MongoDB Ops Manager ,仅版本 6.0.24、 7.0.5或更高版本兼容。 KubernetesOperator 会根据您选择用来管理特定部署的 版本,自动使用正确版本的MongoDB Agent MongoDB Ops Manager助手容器。

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

    • 通过覆盖 StatefulSetMongoDB 资源规范 中指定 兼容MongoDB Agent 的 版本 的容器映像。MongoDB Agent示例:

      podSpec:
      podTemplate:
      spec:
      containers:
      - name: mongodb-agent-ubi
      Image: 12.0.29.7785-1_1.24.0
    • 将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环境变量并启用静态容器。 您还可以在安装升级过程中启用静态容器。

1
2

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

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

3

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

从MongoDB资源规范或MongoDBMongoDB OpsMongoDB Ops Manager 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-enterprise.yaml

如果将Kubernetes与OpenShift结合使用:

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

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

6

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

在Kubernetes Operator配置文件中,设立MDB_DEFAULT_ARCHITECTURE操作符.mdbDefaultArchitecturestatic

在特定部署的MongoDB资源规范中,设立metadata.annotations.mongodb.com/v1.architecture注释设置为static

7

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

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

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

如果将Kubernetes与OpenShift结合使用:

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

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

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

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

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

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

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

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

    MDB_DEFAULT_ARCHITECTURE

    所有部署的变量。

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

    每次部署变量。

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

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

1

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

在Kubernetes Operator配置文件中,设立MDB_DEFAULT_ARCHITECTURE操作符.mdbDefaultArchitecturenon-static

在特定部署的MongoDB资源规范中,设立metadata.annotations.mongodb.com/v1.architecture注释设置为non-static

2

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

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

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

如果将Kubernetes与OpenShift结合使用:

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

Kubernetes Operator 取代了 StatefulSet MongoDB 部署的映像,并对部署中的所有 Pod 启动滚动重启。

后退

兼容性