MongoDB自定义资源定义Kubernetes Operator 管理的数据库部署。您的自定义资源规范定义了这些资源, Kubernetes Operator 监控这些资源。更新资源规范时, Kubernetes Operator 会将更改推送到Ops Manager,从而修改MongoDB部署的配置。
MongoDB CRD 支持三种部署类型。下图说明了每个组件的组成:
警告
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 | 每个 |
MongoDB资源协调
应用MongoDB自定义资源规范时, Kubernetes Operator 会将每个资源部署为 StatefulSet。然后, Kubernetes Operator 进入连续协调循环:
从 中指定的 ConfigMap
spec.opsManager.configMapRef.name中读取项目配置。从
spec.credentials中指定的密钥或密钥存储工具中读取API凭证。连接到Ops Manager并执行以下操作:
从 ConfigMap 中的
orgId读取组织结构。读取或创建
projectName中指定的项目。验证
<project-id>-group-secret是否存在,或使用Ops Manager API密钥创建它。将Kubernetes Operator 注册为 ConfigMap 和凭证密钥的观察者。
验证 TLS 和 X.509 证书(如果已启用):
对于副本集:在
<prefix>-<resource-name>-cert中查找证书。对于分片的集群:在
<prefix>-<resource-name>-x-cert(每个分片)、<prefix>-<resource-name>-config-cert(配置服务器)和<prefix>-<resource-name>-mongos-cert(mongos实例)中查找证书。
创建或更新 StatefulSet。该数量取决于部署类型。点,每个 Pod 都运行一个MongoDB 助手,但尚未包含
mongod实例。每个MongoDB 助手都会轮询Ops Manager以获取自动化配置。
在非静态容器上, MongoDB 助手会下载
spec.version中指定版本的MongoDB二进制文件。收到配置后, MongoDB 助手会启动
mongod。Kubernetes Operator 会为每个 Pod(
mongosPod 除外)生成 PersistentVolumeClaims,除非spec.persistent为false。
将自动化配置更新推送到Ops Manager。每个MongoDB 助手都会轮询并应用更新的配置。如果更改任何字段, Kubernetes Operator 会对 StatefulSet 执行滚动更新。
创建或更新Kubernetes服务:
对于
ReplicaSet或Standalone:名为<resource-name>-svc的无头ClusterIP服务。对于
ShardedCluster:mongos:使用spec.service或<resource-name>-svc中的名称。Config servers:
<resource-name>-cs.每个分片:
<resource-name>-sh。
下图说明了副本集的协调流程:
下图说明了分片的片集群的协调流程:
MongoDBUser 资源协调
如果用户身份验证方法是SCRAM,则MongoDBUser 资源依赖于存储用户凭证的密钥。 Kubernetes Operator 会监视密钥的更改并进行协调,如下所示:
从
spec.MongoDBResourceRef.name确定MongoDB用户的资源。连接到Ops Manager,读取组织和项目,并验证代理密钥。
在Ops Manager中更新用户的凭证,如果不存在,则创建新用户。如果用户名已更改, Kubernetes Operator 会删除旧名称并添加新名称。
下图说明了 MongoDBUser 调节流程: