容器镜像
安装 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
在静态容器之间复制文件。
从MongoDBEnterprise Kubernetes Operator1.25 开始,您可以使用静态容器的公共预览版来代替现有的非静态容器,该容器会在运行时从MongoDB Cloud Manager或MongoDB Ops Manager 或互联网下载 二进制文件。您可以使用此页面上的程序为所有或单个MongoDB部署启用或禁用静态容器。
静态容器使用 mongodb-enterprise-server 中的映像 默认使用 Quay.io存储库,但如果您为Kubernetes 节点 配置了自己的注册表,则可以使用自己的注册表 。
架构
静态和非静态容器的架构有很大不同,从一种容器迁移到另一种容器需要几个步骤。 要了解更多信息,请参阅迁移到静态容器和迁移到非静态容器。
非静态容器架构
默认的非静态容器架构假设您引导一个空壳容器,下载并启动MongoDB Agent ,然后从mongod
mongosh
Cloud Manager或 下载 和MongoDB Ops Manager 的二进制文件。
静态容器架构
静态容器架构使用 的Kubernetes 共享命名空间功能 MongoDB Agent将mongod
作为单独的进程运行,以便控制整个 生命周期并避免通过网络下载文件。
与本地或远程模式的兼容性
如果使用静态容器,则无需将MongoDB Ops Manager配置为在本地模式或远程模式下运行,除非您使用可查询备份。 在静态容器架构中,代理和 mongod
的二进制文件有自己的容器映像,并且这些容器映像不是从MongoDB Ops Manager下载的。
可查询备份是一个例外,因为在非静态容器架构中,默认,备份守护程序会下载并运行所有备份版本的MongoDB Server二进制文件。 这种默认的MongoDB行为破坏了用于运行备份守护程序的容器的完全静态特性。 如果使用可查询备份,则仍须使用本地或远程模式托管相关MongoDB Server二进制文件。 要学习;了解更多信息,请参阅配置MongoDB Ops Manager资源以使用本地模式或配置MongoDB Ops Manager资源以使用远程模式。
如果您以前使用过远程或本地模式并且不想使用可查询备份,请执行以下操作以确保mongodb-enterprise-server
映像 可以在 节点 上下载 由 Pod 使用:
限制
如果启用静态容器:
您必须 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 Ops Manager配置为在本地模式或远程模式下运行,除非您使用可查询备份。 要学习;了解更多信息,请参阅本地和远程模式。
静态容器有哪些变化?
静态容器不会在运行时下载MongoDB二进制文件。 相反,它使用来自 mongodb-enterprise-server Quay.io存储库。要学习;了解有关更改的更多信息,请参阅步骤6 。
如何验证部署是否以静态模式运行?
有多种方法可以确定您的部署是否正在使用静态容器。 要学习;了解详情,请参阅步骤7 。
迁移到静态容器
要从非静态迁移到静态容器,请按照以下步骤设置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 数据库。此更新会启动滚动重启。
迁移到静态容器时,会发生以下应用:
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 enterprise-operator mongodb/enterprise-operator \ --set <setting_1> --set <setting_2> --set operator.mdbDefaultArchitecture="non-static"
Kubernetes Operator 取代了 StatefulSet MongoDB 部署的映像,并对部署中的所有 Pod 启动滚动重启。