对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDB数据库资源架构

MongoDB自定义资源定义Kubernetes Operator 管理的数据库部署。您的自定义资源规范定义了这些资源, Kubernetes Operator 监控这些资源。更新资源规范时, Kubernetes Operator 会将更改推送到Ops Manager,从而修改MongoDB部署的配置。

MongoDB CRD 支持三种部署类型。下图说明了每个组件的组成:

显示MongoDB Controllers for Kubernetes Operator 中MongoDB资源的高级架构的图表
点击放大

警告

Kubernetes Operator 不支持仲裁节点。

尽管您可以部署Standalone资源,但我们建议您部署具有一名成员的 ReplicaSet资源,因为副本集允许您将来添加成员。在Kubernetes中,Standalone资源相当于只有一个成员的 ReplicaSet资源。

对于 Standalone资源, Kubernetes Operator 将具有单个成员的副本集部署为 StatefulSet。 Kubernetes Operator 创建包含 Pod 规范的 StatefulSet,并依赖Kubernetes StatefulSet 控制器为此单个 mongod实例创建 Pod。

对于ReplicaSet 资源, Kubernetes Operator 将副本集部署为 StatefulSet,其成员数量等于 的值。 Kubernetes Operator 依赖Kubernetes StatefulSet Controller 为每个成员创建一个 Pod。每个 Podspec.members 运行一个MongoDBmongod 助手实例,用于管理该 Pod 上的 进程。

ShardedCluster资源由配置服务器、mongos 实例和分片成员组成。 Kubernetes Operator 部署:

  • 适用于所有配置服务器的一个 StatefulSet

  • 所有 mongos 实例使用一个 StatefulSet

  • 每个分片一个 StatefulSet

Kubernetes Operator 依赖Kubernetes StatefulSet Controller 在每个 StatefulSet 中创建一个 Pod。对于具有 2 个分片的分片集群,这意味着 4 个 StatefulSet 总数(配置服务器的 1 + mongos 的 1 + 分片的 2)。

部署类型
StatefulSet
StatefulSet 大小

独立运行的实例

1

1Pod

副本集(Replica Set)

1

1每个成员 Pod

分片集群

<numberOfShards> + 2

每个 mongos、分片节点或配置服务器节点的 1 Pod

应用MongoDB自定义资源规范时, Kubernetes Operator 会将每个资源部署为 StatefulSet。然后, Kubernetes Operator 进入连续协调循环:

  1. 从 中指定的 ConfigMapspec.opsManager.configMapRef.name 中读取项目配置。

  2. 连接到Ops Manager并执行以下操作:

    • 从 ConfigMap 中的 orgId 读取组织结构。

    • 读取或创建 projectName 中指定的项目。

    • 验证 <project-id>-group-secret 是否存在,或使用Ops Manager API密钥创建它。

    • 将Kubernetes Operator 注册为 ConfigMap 和凭证密钥的观察者。

  3. 验证 TLS 和 X.509 证书(如果已启用):

    • 对于副本集:在 <prefix>-<resource-name>-cert 中查找证书。

    • 对于分片的集群:在 <prefix>-<resource-name>-x-cert(每个分片)、<prefix>-<resource-name>-config-cert(配置服务器)和 <prefix>-<resource-name>-mongos-certmongos 实例)中查找证书。

  4. 创建或更新 StatefulSet。该数量取决于部署类型。点,每个 Pod 都运行一个MongoDB 助手,但尚未包含mongod 实例。

    • 每个MongoDB 助手都会轮询Ops Manager以获取自动化配置。

    • 在非静态容器上, MongoDB 助手会下载 spec.version 中指定版本的MongoDB二进制文件。

    • 收到配置后, MongoDB 助手会启动 mongod

    • Kubernetes Operator 会为每个 Pod(mongos Pod 除外)生成 PersistentVolumeClaims,除非 spec.persistentfalse

  5. 将自动化配置更新推送到Ops Manager。每个MongoDB 助手都会轮询并应用更新的配置。如果更改任何字段, Kubernetes Operator 会对 StatefulSet 执行滚动更新。

  6. 创建或更新Kubernetes服务:

    • 对于 ReplicaSetStandalone:名为 <resource-name>-svc 的无头 ClusterIP 服务。

    • 对于ShardedCluster

      • mongos:使用 spec.service<resource-name>-svc 中的名称。

      • Config servers: <resource-name>-cs.

      • 每个分片:<resource-name>-sh

下图说明了副本集的协调流程:

显示副本集协调流程的图表
点击放大

下图说明了分片的片集群的协调流程:

显示分片集群协调流程的图表
点击放大

如果用户身份验证方法是SCRAM,则MongoDBUser 资源依赖于存储用户凭证的密钥。 Kubernetes Operator 会监视密钥的更改并进行协调,如下所示:

  1. spec.MongoDBResourceRef.name 确定MongoDB用户的资源。

  2. 连接到Ops Manager,读取组织和项目,并验证代理密钥。

  3. 在Ops Manager中更新用户的凭证,如果不存在,则创建新用户。如果用户名已更改, Kubernetes Operator 会删除旧名称并添加新名称。

下图说明了 MongoDBUser 调节流程:

显示 MongoDBUser 协调流程的图表
点击放大