容器镜像
安装 Kubernetes Operator 时,它会从 Quay.io 容器注册表中提取映像。 Kubernetes Operator 映像基于 Red Hat UBI8 操作系统。MongoDB 每天都会为最新的操作系统和支持库更新重建 Kubernetes Operator 映像。
官方镜像具有以下优点:
它们每天都会针对最新的上游漏洞修复进行重建。
MongoDB 会对它们进行测试、维护和支持。
要查看每个映像的所有可用版本,请参阅以下链接。
图像名称 | 说明 |
---|---|
MongoDB Agent 映像。 | |
用于静态容器和应用程序数据库的企业版 MongoDB 映像。 | |
initContainer 包含应用程序数据库启动脚本和就绪探针的映像。 | |
用于非静态容器的MongoDB database环境映像。 要了解静态和非静态容器,请参阅静态容器(公共预览版)。 | |
initContainer 包含 MongoDB Agent 启动脚本和就绪探针的映像。 | |
Ops Manager 映像。 | |
initContainer 包含 Ops Manager 启动脚本和就绪探针的映像。 |
静态容器(公共预览版)
静态容器比非静态容器更简单、更安全。静态容器在运行时是不可变的,这意味着它们不会从用于创建容器的映像中更改。此外:
运行时,静态容器不会通过网络连接下载二进制文件或运行脚本或其他实用程序。静态容器仅下载运行时配置文件。
运行时,静态容器不会修改除存储卷挂载之外的任何文件。
您可以对容器映像运行安全扫描,以确定实际运行的容器,并且运行的容器不会运行映像中定义以外的二进制文件。
静态容器不要求您在 Ops Manager 或其他 HTTPS服务器上托管 MongoDB 二进制文件,如果您有气隙环境,这一点尤其有用。
您无法为静态容器运行大量
CMD
脚本。您无法使用
initContainer
在静态容器之间复制文件。
从 MongoDB Enterprise Kubernetes Operator 1开始。 25 ,您可以使用静态容器的公共预览版来代替现有的非静态容器,该容器会在运行时从 Cloud Manager 或 Ops Manager 或互联网下载 MongoDB 二进制文件。您可以使用此页面上的程序为所有或单个 MongoDB 部署启用或禁用静态容器。
静态容器使用 mongodb-enterprise-server 中的映像 默认使用 Quay.io 存储库,但如果您为 Kubernetes 节点 配置了自己的注册表,则可以使用自己的注册表 。
架构
静态和非静态容器的架构有很大不同,从一种容器迁移到另一种容器需要几个步骤。 要了解更多信息,请参阅迁移到静态容器和迁移到非静态容器。
非静态容器架构
默认的非静态容器架构假设您引导一个空壳容器,下载并启动MongoDB Agent ,然后从mongod
mongosh
Cloud Manager或 下载 和MongoDB Ops Manager 的二进制文件。
静态容器架构
静态容器架构使用 Kubernetes 的 共享命名空间功能 将 MongoDB 助手作为单独的进程运行,以便控制整个mongod
生命周期并避免通过网络下载文件。
与本地或远程模式的兼容性
如果使用静态容器,则无需将 Ops Manager 配置为在本地模式或远程模式下运行,除非使用可查询备份。在静态容器架构中,代理和mongod
的二进制文件有自己的容器映像,并且这些容器映像不是从 Ops Manager 下载的。
可查询备份是一个例外,因为在非静态容器架构中,默认情况下,备份守护程序会下载并运行所有备份版本的 MongoDB Server 二进制文件。这种默认的 MongoDB 行为破坏了用于运行备份守护程序的容器的完全静态特性。如果使用可查询备份,则仍须使用本地或远程模式托管相关 MongoDB Server 二进制文件。要了解更多信息,请参阅配置 Ops Manager 资源以使用本地模式或配置 Ops Manager 资源以使用远程模式。
如果您以前使用过远程或本地模式并且不想使用可查询备份,请执行以下操作以确保mongodb-enterprise-server
映像 可以在 节点 上下载 由 Pod 使用:
限制
如果启用静态容器:
您必须 MongoDB禁用可查询备份MongoDB Ops Manager ,这样 备份守护程序服务 就不会尝试从 下载 二进制文件,因为这会破坏静态容器的不可变特性。
对于 Ops Manager,仅限6版本。 0 。 24 、 7 。 0 。 5或更高版本兼容。 Kubernetes Operator 会根据您选择用来管理特定部署的 Ops Manager 版本,自动使用正确版本的 MongoDB 助手容器。
使用 MongoDB Cloud Manager 时,您的 MongoDB 助手版本可能无法兼容最新版本的 MongoDB Cloud Manager,因为 Kubernetes Operator 无法调用 MongoDB Cloud Manager 中的
agentVersion
端点。要使用 MongoDB Cloud Manager 确保您的 MongoDB 助手是最新的,您可以执行以下操作之一:通过覆盖 StatefulSet 在 MongoDB 资源规范 中指定 兼容 的 MongoDB 助手版本 MongoDB 助手的容器映像。例如:
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助手会替换健康状态文件,因此您无法从健康状态中看出发生了版本更改,只能从当前健康状态中看出。
常见问题解答
静态容器支持本地模式还是远程模式?
不需要,如果您使用静态容器,则无需将 Ops Manager 配置为在本地模式或远程模式下运行,除非您使用可查询备份。要了解更多信息,请参阅本地和远程模式。
静态容器有哪些变化?
静态容器不会在运行时下载 MongoDB 二进制文件。相反,它使用来自 mongodb-enterprise-server Quay.io 存储库。要了解有关更改的更多信息,请参阅 步骤6 。
如何验证部署是否以静态模式运行?
有多种方法可以确定您的部署是否正在使用静态容器。要了解详情,请参阅步骤7 。
迁移到静态容器
要从非静态迁移到静态容器,请按照以下步骤设置MongoDB Agent环境变量并启用静态容器。 您还可以在安装或升级过程中启用静态容器。
查看 限制 。
为 MongoDB 助手映像设置环境变量。
在 Kubernetes Operator配置文件中,定义MDB_AGENT_IMAGE_REPOSITORY环境变量,以指定 Kubernetes Operator 从中下载静态容器的 MongoDB 助手映像的存储库。
在 Kubernetes Operator Helm Chart中,定义registry.agent和agent.name ,以指定 Kubernetes Operator 从中下载静态容器的 MongoDB 助手映像的存储库。
保存并应用文件。
保存更改后,重新应用配置。
如果您在没有 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 的滚动重启。
启用静态容器。
选择下方相应的标签页,一次性为所有 MongoDB 部署(包括现有部署)启用静态容器,或一次启用一个部署。
在 Kubernetes Operator配置文件中,将MDB_DEFAULT_ARCHITECTURE或Operator.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 enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="static"
Kubernetes Operator 更新 StatefulSet MongoDB 部署的映像,从之前同时管理 MongoDB 助手和 MongoDB 数据库的单个容器过渡到具有两个独立容器的新配置:一个用于 MongoDB 助手,另一个用于 MongoDB 数据库。此更新会启动滚动重启。
迁移到静态容器时,会发生以下更改:
Kubernetes 节点 使用其配置的容器注册表来执行下载。
监控代理和自动化代理版本一致。
Kubernetes Operator 而不是代理来处理 MongoDB 升级。
Kubernetes Operator 会替换现有映像,从而导致滚动重启。
迁移到非静态容器
要从静态容器迁移到非静态容器,请按照以下步骤禁用静态容器。 您还可以在安装或升级过程中禁用静态容器。
禁用静态容器。
选择下方相应的标签页,一次性为所有 MongoDB 部署(包括现有部署)禁用静态容器,或一次禁用一个部署。
在 Kubernetes Operator配置文件中,将MDB_DEFAULT_ARCHITECTURE或Operator.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 enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="non-static"
Kubernetes Operator 取代了 StatefulSet MongoDB 部署的映像,并对部署中的所有 Pod 启动滚动重启。