容器镜像
当你安装Kubernetes 操作符时,它会从 Quay.io 容器注册库中拉取镜像。这些镜像基于Kubernetes 操作符这些Red Hat UBI 8 操作系统。MongoDB 每天都会重建Kubernetes 操作符镜像,以支持最新的操作系统和库更新。
官方镜像具有以下优势
它们每天都会重建,以修复最新的上游漏洞。
MongoDB 测试、维护并支持它们。
要查看每个镜像的所有可用版本,请参阅以下链接。
镜像名称 | 描述 |
---|---|
MongoDB 代理镜像。 | |
用于静态容器和应用数据库的 Enterprise MongoDB 镜像。 | |
| |
用于非静态容器的 MongoDB 数据库环境镜像。有关静态和非静态容器的信息,请参阅静态容器(公共预览)。 | |
| |
Ops Manager镜像。 | |
|
静态容器(公共预览)
静态容器比非静态容器更简单、更安全。静态容器在运行时是不可变的,这意味着它们不会从创建容器的镜像中改变。此外
在运行时,静态容器不会通过网络连接下载二进制文件或运行脚本或其他实用程序。静态容器只下载运行时配置文件。
在运行时,静态容器不会修改任何文件,除了存储卷挂载。
您可以在容器镜像上运行安全扫描,以确定实际运行的实时容器,以及运行的容器不会运行除镜像中定义之外的其他二进制文件。
静态容器不需要您在以下任一服务器上托管MongoDB二进制文件:Ops Manager或另一个HTTPS 服务器,这在您拥有隔离环境时特别有用。
您不能为静态容器运行广泛的
CMD
脚本。您不能使用
initContainer
在静态容器之间复制文件。
注意
当作为静态容器部署时,一个Kubernetes 操作符部署由两个容器组成 - 一个 mongodb-agent
容器和 一个 mongodb-enterprise-server
容器。MongoDB 数据库自定义资源从 mongodb-agent
容器继承资源限制定义,该容器在静态容器部署中运行 mongod
进程。为了修改 MongoDB 数据库资源的资源限制,您必须在 mongodb-agent
容器上指定您希望的资源限制。
从MongoDB 企业级 Kubernetes 操作符1.25 版本开始,您可以使用静态容器的公共预览,而不是现有的非静态容器,该容器在运行时从Cloud Manager 或 Ops Manager或互联网下载 MongoDB 二进制文件。您可以使用本页面上的程序启用或禁用所有或单个 MongoDB 部署的静态容器。
静态容器默认使用来自 mongodb-enterprise-server Quay.io 仓库的镜像,但您可以为您的 Kubernetes 节点 配置自己的仓库。
架构
静态容器和非静态容器的架构有显著差异,从一种迁移到另一种需要几个步骤。欲了解更多信息,请参阅迁移到静态容器和迁移到非静态容器。
非静态容器架构
默认的非静态容器架构假设您启动一个空壳容器,下载并启动 MongoDB Agent,然后从mongod
和mongosh
下载二进制文件Cloud Manager 或 Ops Manager.
静态容器架构
静态容器架构使用 Kubernetes 的共享命名空间功能来运行 MongoDB Agent 作为独立进程,以便它可以控制完整的mongod
生命周期,并避免通过网络下载文件。
与本地或远程模式兼容
如果您使用静态容器,则不需要配置Ops Manager以本地模式或远程模式运行本地模式或远程模式,除非您使用可查询的备份。在静态容器架构中,代理和mongod
的二进制文件有自己的容器镜像,并且这些镜像不是从Ops Manager.
可查询的备份是例外,因为在非静态容器架构中,默认情况下,备份守护进程会下载和运行所有已备份版本的MongoDB服务器二进制文件。这种默认的MongoDB行为破坏了运行备份守护进程的容器完全静态的本质。如果您使用可查询的备份,您仍然必须使用本地或远程模式托管相关的MongoDB服务器二进制文件。有关更多信息,请参阅配置Ops Manager资源以使用本地模式或配置Ops Manager资源以使用远程模式。
如果您之前使用过远程或本地模式,并且不想使用可查询的备份,请按照以下步骤操作以确保可以从 mongodb-enterprise-server
镜像 下载,并且这些镜像可以在由 pods 使用的 节点 上下载。
限制条件
如果您启用了静态容器
您必须禁用可查询备份,这样备份守护进程服务就不会尝试从Ops Manager下载MongoDB二进制文件,这会破坏静态容器的不可变性质。
使用Ops Manager,仅兼容6.0.24、7.0.5或更高版本。Kubernetes Operator会根据您选择的版本自动使用正确的MongoDB Agent容器来管理特定的部署。Ops Manager版本
使用MongoDB Cloud Manager,由于Kubernetes Operator无法调用MongoDB Cloud Manager中的
agentVersion
端点,您的MongoDB Agent版本可能会落后于MongoDB Cloud Manager的最新版本MongoDB Cloud Manager,您可以执行以下操作之一在MongoDB资源规范中指定一个兼容的MongoDB Agent版本,通过覆盖StatefulSet容器镜像的MongoDB Agent。例如
podSpec: podTemplate: spec: containers: - name: mongodb-agent-ubi Image: 12.0.29.7785-1_1.24.0 升级Kubernetes Operator到最新版本,这将自动更新MongoDB Agent。
升级 MongoDB 版本 会触发所有 Pods 的滚动重启,顺序是从最后到第一个,可能会导致更多 选举,最多达到 Pods 的数量。任何触发滚动重启的更新都适用。
您无法从 MongoDB 代理的状态 中确定是否发生了 MongoDB 数据库的升级。Kubernetes在升级后轮换 Pods,MongoDB 代理会替换健康状态文件,因此您无法从健康状态中得知版本是否发生变化,只能看到当前的健康状态。
常见问题
静态容器支持本地模式还是远程模式?
不是的,如果您使用静态容器,除非您使用可查询的备份,否则不需要配置Ops Manager以在 本地模式 或 远程模式 中运行。有关更多信息,请参阅 本地和远程模式。
静态容器有哪些变化?
静态容器在运行时不会下载MongoDB二进制文件。相反,它使用来自mongodb-enterprise-server Quay.io 仓库的镜像。要了解变化详情,请参阅步骤6。
我如何验证我的部署是否在静态模式下运行?
有许多方法可以确定您的部署是否使用静态容器。要了解更多,请参阅步骤7。
迁移到静态容器
要从非静态迁移到静态容器,请按照以下步骤设置 MongoDB Agent 环境变量并启用静态容器。您还可以在安装或升级过程中启用静态容器。
查看限制。
如果存在,请删除 StatefulSet 对初始化容器的覆盖,如果有的话。
静态容器架构不使用初始化容器。如果存在初始化容器的覆盖,则从非静态到静态容器的迁移将失败。
从您的 MongoDB 资源规范 或 Ops Manager 资源规范 中删除任何 StatefulSet 对初始化容器的覆盖。例如,确保以下设置没有为 initContainers
配置
Ops Manager:
spec.statefulSet.spec
数据库: StatefulSet 设置
为 MongoDB Agent 镜像设置环境变量。
在你的Kubernetes 操作符 配置文件中,定义 MDB_AGENT_IMAGE_REPOSITORY 环境变量以指定下载 MongoDB Agent 镜像的仓库。Kubernetes 操作符对于静态容器,定义 MongoDB Agent 镜像的下载仓库。
在你的Kubernetes 操作符 Helm 图表,定义 registry.agent 和 agent.name 以指定 MongoDB Agent 镜像的下载仓库。Kubernetes 操作符对于静态容器,定义 MongoDB Agent 镜像的下载仓库。
启用静态容器。
选择下面的适当选项卡,一次性启用所有MongoDB部署的静态容器,包括现有部署,或一次启用一个部署。
在你的Kubernetes 操作符 配置文件,设置 MDB_DEFAULT_ARCHITECTURE 或 operator.mdbDefaultArchitecture 为 static
。
在特定部署的 MongoDB 资源规范 中,设置 metadata.annotations.mongodb.com/v1.architecture
注解为 static
。
保存并应用文件。
保存更改后,重新应用您的配置。
如果您使用Kubernetes没有 OpenShift,运行
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 操作符您的MongoDB部署的 StatefulSet 镜像,从之前管理MongoDB Agent和MongoDB数据库的单个容器,过渡到新的配置,其中包含两个独立的容器:一个用于MongoDB Agent,另一个用于MongoDB数据库。此更新将启动滚动重启。
当您迁移到静态容器时,以下更改生效
Kubernetes 节点 使用其配置的容器注册库进行下载。
监控代理和自动化代理版本保持一致。
Kubernetes 操作符,而不是代理,处理MongoDB升级。
Kubernetes 操作符替换现有的镜像,这将导致滚动重启。
迁移到非静态容器
要从静态迁移到非静态容器,请按照以下步骤禁用静态容器。您也可以在安装或升级过程中禁用静态容器。
禁用静态容器。
选择以下适当的选项卡,一次性禁用所有MongoDB部署的静态容器,包括现有部署,或逐个禁用部署。
在你的Kubernetes 操作符 配置文件中,将MDB_DEFAULT_ARCHITECTURE或operator.mdbDefaultArchitecture设置为non-static
。
在特定部署的MongoDB资源规范中,将metadata.annotations.mongodb.com/v1.architecture
注释设置为non-static
。
保存并应用文件。
保存更改后,重新应用您的配置。
如果您使用Kubernetes没有 OpenShift,运行
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 操作符替换你的MongoDB部署的StatefulSet镜像,并启动部署中所有Pod的滚动重启。