安装Kubernetes Operator 时,它会从 Quay.io容器注册表中提取映像。Kubernetes Operator 映像基于 Red Hat UBI8 和9 操作系统。MongoDB每天都会为最新的操作系统和支持库更新重建Kubernetes Operator 映像。
注意
静态容器拉取的MongoDB 助手映像始终位于 Red Hat UBI 9 上。
官方镜像具有以下优点:
它们每天都会针对最新的上游漏洞修复进行重建。
MongoDB 会对它们进行测试、维护和支持。
要查看每个映像的所有可用版本,请参阅以下链接。
图像名称 | 说明 | 支持的架构 |
---|---|---|
MongoDB 助手映像基于 Red Hat UBI 9 构建,用于 静态容器、应用程序数据库和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 (s390x) 和 Power (ppc64le) 架构,映像仅在 Red Hat UBI 9 上运行,并且支持仅限于MongoDB 8.0.12+。 | x86-64, ARM64, s390x, ppc64le | |
| x86-64, ARM64, s390x, ppc64le | |
用于非静态容器的MongoDB数据库环境映像。 | x86-64, ARM64, s390x, ppc64le | |
| x86-64, ARM64, s390x, ppc64le | |
Ops Manager 映像。 | 仅限 x86-64 | |
| 仅限 x86-64 |
静态容器(公共预览版)
静态容器比非静态容器更简单、更安全。 静态容器在运行时是不可变的,这意味着它们不会从用于创建容器的映像中更改。 此外:
运行时,静态容器不会通过网络连接下载二进制文件或运行脚本或其他实用程序。 静态容器仅下载运行时配置文件。
运行时,静态容器不会修改除存储卷挂载之外的任何文件。
您可以对容器映像运行安全扫描,以确定实际运行的容器,并且运行的容器不会运行映像中定义以外的二进制文件。
静态容器不要求您在MongoDB MongoDB Ops Manager或其他 HTTPS 服务器上托管 二进制文件,如果您有气隙环境,这一点尤其有用。
您无法为静态容器运行大量
CMD
脚本。您无法使用
initContainer
在静态容器之间复制文件。
注意
作为静态容器部署时, Kubernetes Operator部署由两个容器组成 — 一个 mongodb-agent
容器和一个 mongodb-enterprise-server
容器。MongoDB 数据库自定义资源从 mongodb-agent
容器继承资源限制定义,该容器在静态容器部署中运行 mongod
进程。要修改MongoDB 数据库资源的资源限制,必须在 mongodb-agent
容器上指定所需的资源限制。
您可以使用静态容器的公共预览版来代替现有的非静态容器,该容器会在运行时从Cloud Manager或MongoDB Ops Manager或互联网下载MongoDB二进制文件。 您可以使用此页面上的程序为所有或单个MongoDB部署启用或禁用静态容器。
静态容器默认使用mongodb-enterprise-server Quay.io存储库中的映像,但如果您为Kubernetes节点配置了自己的注册表,则可以使用自己的注册表。
架构
静态和非静态容器的架构有很大不同,从一种容器迁移到另一种容器需要几个步骤。 要了解更多信息,请参阅迁移到静态容器和迁移到非静态容器。
非静态容器架构
默认的非静态容器架构假设您引导一个空壳容器,下载并启动MongoDB Agent ,然后从mongod
mongosh
Cloud Manager或 下载 和MongoDB Ops Manager 的二进制文件。
静态容器架构
静态容器架构使用Kubernetes的共享命名空间功能将MongoDB 助手作为单独的进程运行,因此它可以控制完整的mongod
生命周期并避免通过网络下载文件。
与本地或远程模式的兼容性
如果使用静态容器,则无需将MongoDB Ops Manager配置为在本地模式或远程模式 下运行,除非使用可查询备份。 在静态容器架构中,代理和 mongod
的二进制文件有自己的容器映像,并且这些容器映像不是从MongoDB Ops Manager下载的。
可查询备份是一个例外,因为在非静态容器架构中,默认,备份守护程序会下载并运行所有备份版本的MongoDB Server二进制文件。 这种默认的MongoDB行为破坏了用于运行备份守护程序的容器的完全静态特性。 如果使用可查询备份,则仍须使用本地或远程模式托管相关MongoDB Server二进制文件。 要学习;了解更多信息,请参阅配置MongoDB Ops Manager资源以使用本地模式或配置MongoDB Ops Manager资源以使用远程模式。
如果您以前使用过“远程”或“本地”模式并且不想使用可查询备份,请执行以下操作以确保可以将 mongodb-enterprise-server
映像 下载到 Pod 使用的 节点 上:
为Kubernetes节点配置内部容器注册表。
除非您使用本地容器注册表,否则节点将从 Quay.io下载映像。
下载并添加
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: 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环境变量并启用静态容器。 您还可以在安装或升级过程中启用静态容器。
删除初始化容器的 StatefulSet 覆盖项(如果有)。
静态容器架构不使用初始化容器。 如果存在针对初始化容器的覆盖项,则从非静态容器到静态容器的迁移将失败。
从MongoDB资源规范或MongoDB Ops Manager资源规范中删除初始化容器的任何 StatefulSet 覆盖项。示例,确保尚未为 initContainers
配置以下设置:
Ops Manager:
spec.statefulSet.spec
应用程序数据库:
spec.applicationDatabase.podSpec
Database: StatefulSet 设置
为MongoDB Agent映像设置环境变量。
在Kubernetes Operator配置文件中,定义MDB_AGENT_IMAGE_REPOSITORY环境变量,以指定Kubernetes Operator 从中下载静态容器的MongoDB Agent助手映像的存储库。
在Kubernetes Operator Helm 图表 中,定义 KubernetesMongoDB Agent注册表。 指定 代理 代理 从中下载静态容器的 映像的存储库。
保存并应用文件。
保存更改后,重新应用配置。
如果您在没有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 的滚动重启。
启用静态容器。
选择下方相应的标签页,一次性为所有MongoDB部署(包括现有部署)启用静态容器,或一次启用一个部署。
在Kubernetes Operator配置文件中,设立MDB_DEFAULT_ARCHITECTURE或操作符.mdbDefaultArchitecture 为static
。
在特定部署的MongoDB资源规范中,设立metadata.annotations.mongodb.com/v1.architecture
注释设置为static
。
保存并应用文件。
保存更改后,重新应用配置。
如果您在没有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 会替换现有映像,从而导致滚动重启。
迁移到非静态容器
要从静态容器迁移到非静态容器,请按照以下步骤禁用静态容器。 您还可以在安装或升级过程中禁用静态容器。
禁用静态容器。
选择下方相应的标签页,一次性为所有 MongoDB 部署(包括现有部署)禁用静态容器,或一次禁用一个部署。
在Kubernetes Operator配置文件中,设立MDB_DEFAULT_ARCHITECTURE或操作符.mdbDefaultArchitecture 为non-static
。
在特定部署的MongoDB资源规范中,设立metadata.annotations.mongodb.com/v1.architecture
注释设置为non-static
。
保存并应用文件。
保存更改后,重新应用配置。
如果您在没有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 启动滚动重启。