下图显示了部署在多个Kubernetes集群上的MongoDB Ops Manager应用程序、应用程序数据库、备份守护程序和相应的持久卷。
在此图中:
Member Cluster 0存储 kubeconfig 文件,其中描述成员集群、用户和上下文的Kubernetes 配置。当您使用kubectl mongodb插件为多集群部署配置Kubernetes Operator 时,它会创建以下资源:mongodb-enterprise-operator-multi-cluster-kubeconfig密钥,其中包含 Kubernetes 操作符 将要管理的所有 Kubernetes 集群的凭证。如果您计划将中央集群用作节点集群,则此密钥可能包含安装 Kubernetes 操作符 的同一集群的凭证。
当 Kubernetes Operator 在多集群模式下运行时,它会存储所需的资源,例如 ConfigMap 和有关要管理的集群的密钥。 这些资源与 Kubernetes Operator 属于同一命名空间。 KubernetesOperator 使用这些资源在多个MongoDB Ops Manager Kubernetes集群上部署 应用程序和应用程序数据库。
Kubernetes Operator 还为其管理的每个MongoDB Ops Manager应用程序和应用程序数据库部署创建并维护一些额外的多集群部署状态 ConfigMap。
Member Cluster 0存储此配置,其中包括以下 ConfigMap:<om_resource_name>-cluster-mappingConfigMap 包含spec.clusterSpecList中列出的成员集群名称到集群索引的映射,在本文档中称为cluster_index,例如Cluster 0或Cluster 1。 Kubernetes Operator 将这些索引分配给每个集群名称。<om_resource_name>-db-cluster-mappingConfigMap 包含spec.applicationDatabase.clusterSpecList中列出的成员集群名称到集群索引的映射。<om_resource_name>-db-member-specConfigMap 包含为每个成员集群配置的应用程序数据库副本数。 有了这些信息, Kubernetes Operator 就可以在灾难恢复中正确扩展或重新配置副本集,例如在丢失整个成员集群后。
MongoDBOpsManager资源的配置是您创建的一个文件,用于描述多集群MongoDB Ops Manager部署。 Kubernetes Operator 使用此文件来部署MongoDB Ops Manager组件。以下示例显示了导致Kubernetes Operator 部署此图中描述的MongoDB Ops Manager组件的配置。 此示例省略了一些与此图表不相关的设置,例如TLS配置。
apiVersion: mongodb.com/v1kind: MongoDBOpsManagermetadata: name: om namespace: om-nsspec: replicas: 1 # You can set this value and use it as a global or default # setting for all clusters. The spec.clusterSpecList.members # setting overrides this setting. topology: MultiCluster version: 8.0.0 adminCredentials: om-admin-secret clusterSpecList: - clusterName: "Member Cluster 1" # Ops Manager settings for "Member Cluster 1" members: 2 backup: # Backup settings for "Member Cluster 1" members: 2 # Overrides spec.backup.members - clusterName: "Member Cluster 2" # Ops Manager settings for "Member Cluster 2" members: 1 backup: # Backup settings for "Member Cluster 2" members: 2 # Overrides spec.backup.members applicationDatabase: # Global {+appdb+} settings topology: MultiCluster version: 8.0.0 members: 3 # In multi-cluster mode, the Operator ignores this field. # The Operator sets the number of members for the Application # Database in spec.applicationDatabase.clusterSpecList.members. clusterSpecList: - clusterName: "Member Cluster 1" members: 3 - clusterName: "Member Cluster 2" members: 2 backup: # Global settings for the Backup Daemon enabled: true members: 1 # Set this value and use it as a global or default setting. # To override this value, set the value for # spec.clusterSpecList.backup.members. # The Backup Daemon's configuration for each cluster isn't # stored here. Use the Ops Manager's spec.clusterSpecList.backup to # specify the Backup Daemon configuration for each member cluster.Kubernetes Operator 连接到引用以下任一项的MongoDB Ops Manager实例:
它为 MongoDB Ops Manager 资源创建的服务的默认 `FQDN`、
<om_resource_name>-svc.<namespace>.svc.cluster.local或您在
spec.opsManagerURL中指定的 URL。在某些部署中,例如当安装 Kubernetes 操作符的集群未附加到服务网格时,默认服务 FQDN 可能无法访问。在此情况下,Kubernetes 操作符将MongoDBOpsManager资源状态报告为Failed,表示连接错误。为了处理这类情况,请在spec.opsManagerURL中提供 Ops Manager 的 URL。该 URL 可能是外部暴露的 Ops Manager 实例的主机名。要了解更多信息,请参阅 网络概述。
两个成员集群托管MongoDB Ops Manager应用程序。 在每个集群中, Kubernetes Operator 部署一个名为
<om_resource_name>-<cluster_index>的 StatefulSet。StatefulSet 在
Member Cluster 1中部署MongoDB Ops Manager应用程序的两个实例,在Member Cluster 2中部署一个实例。您在
spec.clusterSpecList.members中定义实例的数量。 您可以设立实例数设置为零,以便此集群不部署任何MongoDB Ops Manager应用程序实例。 示例,如果您想使用此集群仅托管备份守护程序实例,这非常有用。如果从
spec.clusterSpecList删除一个集群,则相当于在spec.clusterSpecList.members和spec.clusterSpecList[*].backup.members中指定零个成员。对于每个集群中的每个 StatefulSet, Kubernetes Operator 都会配置一个服务,名为
<om_resource_name>-svc的类型为ClusterIP,其中包含集群端点列表上的所有 Pod。此服务的 FQDN<om_resource_name>-svc.<namespace>.svc.cluster.local是默认主机名, Kubernetes Operator 使用它来访问权限MongoDB Ops Manager应用程序的已部署端点。如果指定
spec.externalConnectivity, Kubernetes Operator 还会为每个集群创建一个名为<om_resource_name>-svc-ext的外部KubernetesLoadBalancer类型服务。 在每个集群中,您可以使用spec.clusterSpecList.externalConnectivity为此外部服务指定自己的配置。 示例,您可以更改服务类型或定义注解。
应用程序数据库。 Kubernetes Operator 在两个集群上部署应用程序数据库。
您可以使用
spec.applicationDatabase设置定义应用程序数据库配置。 在每个成员集群上, Kubernetes Operator 创建一个名为<om_resource_name>-db-<cluster_index>的 StatefulSet,其数量在spec.applicationDatabase.clusterSpecList.members中定义。 在多集群模式, Kubernetes Operator 会忽略您为spec.applicationDatabase.members字段设立的值。 Kubernetes Operator 配置一个副本集由部署在所有成员集群上的mongod进程组成。对于
<statefulset_name>-<pod_index><om_resource_name>-db-<cluster_index>-<pod_index>ClusterIPmongod<om_resource_name>-db-<cluster_index>-<pod_index>-svc中托管名为 的 MongoDB 进程的每个 Pod,Kubernetes 操作符会创建 Kubernetes 类型服务,以通过其 FQDN 访问单个 进程。副本集中的每个mongod进程必须可以被唯一地寻址。副本集配置中的进程必须将其进程主机名配置为该 Pod 服务的 FQDN:
<om_resource_name>-db-<cluster_index>-<pod_index>-svc.<namespace>.svc.cluster.local。要从所有
mongod进程形成副本集,每个进程都必须连接到其他进程以进行复制。 为此,请将部署应用程序数据库的所有成员集群纳入同一服务网格配置中。服务网格处理跨集群 DNS 查询,并相应地路由流量。服务网格可帮助解析每个 Pod 服务的 `FQDN
<om_resource_name>-db-<cluster_index>-<pod-index>-svc.<namespace>.svc.cluster.local` 跨所有集群,并允许在暴露的 `mongod` 端口上连接(默认为 27017)。例如,当
mongodom-db-1-0中 Pod 中运行的Member Cluster 1进程连接到mongod中om-db-2-1Pod 中运行的Member Cluster 2,第一个mongod进程使用自动化配置om-db-2-1-svc.om-ns.svc.cluster.local:27017和服务网格将此请求路由到Member Cluster 2到om-db-2-1-svc服务。如果没有服务网格,KubernetesMember Cluster 1就没有有关部署在Member Cluster 2中的om-db-2-1-svc服务的信息,并且om-db-2-1-svc.om-ns.svc.cluster.local的 DNS 解析将失败。当应用程序数据库和MongoDB Ops Manager应用程序实例处于
Running状态时, Kubernetes Operator 会向应用程序数据库 StatefulSets 添加一个额外的监控容器。 这会导致所有集群中的所有应用程序数据库 Pod滚动重启。 Kubernetes Operator 按顺序更新所有集群的 StatefulSet,以便在滚动重启进程,每个集群中只有一个副本集的成员暂时不可用。监控代理使用 MongoDB Ops Manager 服务的 FQDN、
<om_resource_name>-svc.<namespace>.svc.cluster.local或spec.opsManagerURL中的值(如果已指定)连接到 MongoDB Ops Manager 应用程序实例。MongoDB Ops Manager应用程序和备份守护程序始终使用包含所有副本集成员的应用程序数据库的连接string 。 连接string始终使用 pod 服务 FQDN 构建。
如果您将
spec.backup.enabled设置为true,Kubernetes Operator 会部署备份守护程序 StatefulSet。在
spec.clusterSpecList中列出的每个成员集群上,Kubernetes Operator 都会创建一个备份守护程序 StatefulSet,名为<om_resource_name>-backup-daemon-<cluster_index>,并将备份守护程序实例的数量设置为spec.backup.members。或者,您可以在
spec.clusterSpecList[*].backup.members中配置每个集群的备份守护程序实例的数量。备份守护程序实例仅使用与 应用程序实例相同的连接string MongoDB Ops Manager连接到应用程序数据库副本集。
此外,在此图中,您可以观察服务网格和组件之间的网络连接:
该图周围的虚线显示了单个服务网格,其中包括所有集群的网络配置。
跨成员集群的MongoDB Ops Manager应用程序周围的虚线表示这些实例是无状态的,并且流量可以平均分布式给所有实例,示例使用循环负载负载均衡器。
跨成员集群的应用程序数据库周围的虚线表示这些实例相互通信并形成单个 MongoDB 副本集。