容器镜像
安装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 启动脚本和就绪探针的映像。 |
静态容器(公共预览版)
静态容器比非静态容器更安全、更简单。 静态容器在运行时是不可变的。 此外:
运行时,静态容器无法通过网络连接下载二进制文件或运行脚本或其他实用程序。 静态容器只能下载运行时配置文件。
运行时,静态容器无法修改除存储卷挂载之外的任何文件。
静态容器不要求扫描容器中的安全漏洞,而非静态容器则需要容器安全扫描。 如果使用静态容器,则只能对容器映像本身运行安全扫描,而不能对其容器运行安全扫描。
如果您有气隙环境,则静态容器不要求您在托管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 存储库。
架构
静态和非静态容器的架构有很大不同,从一种容器迁移到另一种容器需要几个步骤。 要了解更多信息,请参阅迁移到静态容器和迁移到非静态容器。
非静态容器架构
默认的非静态容器架构假设您引导一个空壳容器,下载并启动MongoDB Agent ,然后从mongod
mongosh
Cloud Manager或 下载 和MongoDB Ops Manager 的二进制文件。
静态容器架构
静态容器架构使用 的Kubernetes 共享命名空间功能 MongoDB Agent将mongod
作为单独的进程运行,以便控制整个 生命周期并避免通过网络下载文件。
静态容器比非静态容器更安全、更简单。 静态容器在运行时是不可变的。 此外:
运行时,静态容器无法通过网络连接下载二进制文件或运行脚本或其他实用程序。 静态容器只能下载运行时配置文件。
运行时,静态容器无法修改除存储卷挂载之外的任何文件。
静态容器不要求扫描容器中的安全漏洞,而非静态容器则需要容器安全扫描。 如果使用静态容器,则只能对容器映像本身运行安全扫描,而不能对其容器运行安全扫描。
如果您有气隙环境,则静态容器不要求您在托管MongoDB MongoDB Ops Manager的服务器或其他 HTTPS 服务器上托管 二进制文件。
您无法为静态容器运行大量
CMD
脚本。您无法使用
initContainer
在静态容器之间复制文件。
注意
作为静态容器部署时, Kubernetes Operator部署由两个容器组成 — 一个mongodb-agent
容器和一个mongodb-enterprise-server
容器。 MongoDB 数据库自定义资源从mongodb-agent
容器继承资源限制定义,该容器在静态容器部署中运行mongod
进程。要修改MongoDB 数据库资源的资源限制,必须在mongodb-agent
容器上指定所需的资源限制。
限制
如果启用静态容器:
您必须 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是最新的,您可以执行以下操作之一:通过覆盖 StatefulSet 在MongoDB 资源规范 中指定 兼容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 Agent环境变量并启用静态容器。 您还可以在安装或升级过程中启用静态容器。
查看 限制 。
为MongoDB Agent映像设置环境变量。
在Kubernetes Operator配置文件中,定义MDB_AGENT_IMAGE_REPOSITORY环境变量,以指定Kubernetes Operator 从中下载静态容器的MongoDB Agent助手映像的存储库。
在Kubernetes Operator Helm 图表 中,定义 KubernetesMongoDB Agent注册表。 指定 代理 代理 从中下载静态容器的 映像的存储库。
启用静态容器。
选择下方相应的标签页,一次性为所有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 enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="static"
KubernetesOperator 更新 StatefulSet 部署的映像,从以前同时托管MongoDB MongoDB Agent和MongoDB 数据库的单个容器过渡到具有两个独立容器的新配置:一个用于MongoDB Agent ,另一个用于MongoDB 数据库。此更新会启动滚动重启。
迁移到非静态容器
要从静态容器迁移到非静态容器,请按照以下步骤禁用静态容器。 您还可以在安装或升级过程中禁用静态容器。
禁用静态容器。
选择下方相应的标签页,一次性为所有 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 enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="non-static"
Kubernetes Operator 取代了 StatefulSet MongoDB 部署的映像,并对部署中的所有 Pod 启动滚动重启。