O diagrama a seguir mostra o Aplicativo de Ops Manager, o Banco de Dados do Aplicativo, o Backup Daemon e os Volumes persistentes correspondentes distribuídos em vários clusters do Kubernetes.
Neste diagrama:
O
Member Cluster 0também é um "cluster de operadores" porque você instala o Operador Kubernetes nele. Ele também é um "cluster de membros" e pode hospedar qualquer recurso personalizado de vários clusters.The
Member Cluster 0stores the kubeconfig files, which describe the Kubernetes configuration for member clusters, users, and contexts. When you configure the Kubernetes Operator for multi-cluster deployments using thekubectl mongodbplugin, it creates the following resource:- O segredo
mongodb-enterprise-operator-multi-cluster-kubeconfig, que contém as credenciais de todos os clusters Kubernetes que o Operador Kubernetes vai gerenciar. Se você planeja usar o cluster do operador como um cluster de membros, esse segredo poderá conter as credenciais do mesmo cluster onde você instalará o Kubernetes Operator.
Quando o Operador Kubernetes é executado no modo de vários clusters, ele armazena os recursos necessários, como ConfigMaps e segredos sobre os clusters que ele vai gerenciar. Estes recursos pertencem ao mesmo namespace que o Operador Kubernetes. O Operador do Kubernetes usa esses recursos para implantar o Aplicativo de MongoDB Ops Manager e o Banco de Dados de Aplicativos em vários clusters do Kubernetes .
O Operador Kubernetes também cria e mantém alguns ConfigMaps adicionais de estado de implantação de vários clusters para cada aplicativo MongoDB Ops Manager e sistema de banco de dados de aplicativos que gerencia. O
Member Cluster 0armazena esta configuração, que inclui os seguintes ConfigMaps:O
<om_resource_name>-cluster-mappingConfigMap contém o mapeamento de nomes de cluster de membros listados emspec.clusterSpecListpara índices de cluster, referenciados nesta documentação comocluster_index, comoCluster 0ouCluster 1. O Operador Kubernetes atribui estes índices a cada nome de cluster.O
<om_resource_name>-db-cluster-mappingConfigMap contém o mapeamento dos nomes do cluster de membros listados emspec.applicationDatabase.clusterSpecListpara índices de cluster.O
<om_resource_name>-db-member-specConfigMap contém o número de réplicas do Banco de Dados de Aplicativo configurados para cada agrupamento de membro. Ter essas informações permite que o operador do Kubernetes dimensione ou reconfigure corretamente o conjunto de réplicas como parte da recuperação de desastres, como após a perda de todo o cluster de membros.
A configuração do recurso
MongoDBOpsManageré um arquivo que você cria e que descreve um sistema do MongoDB Ops Manager de vários clusters. O Operador Kubernetes usa este arquivo para implantar os componentes do MongoDB Ops Manager .O exemplo a seguir mostra a configuração que leva o Operador Kubernetes a implantar os componentes do MongoDB Ops Manager descritos neste diagrama. Este exemplo omite algumas configurações que não são relevantes para este diagrama, como a configuração TLS .
1 apiVersion: mongodb.com/v1 2 kind: MongoDBOpsManager 3 metadata: 4 name: om 5 namespace: om-ns 6 spec: 7 replicas: 1 # You can set this value and use it as a global or default 8 # setting for all clusters. The spec.clusterSpecList.members 9 # setting overrides this setting. 10 topology: MultiCluster 11 version: 8.0.0 12 adminCredentials: om-admin-secret 13 clusterSpecList: 14 - clusterName: "Member Cluster 1" # Ops Manager settings for "Member Cluster 1" 15 members: 2 16 backup: # Backup settings for "Member Cluster 1" 17 members: 2 # Overrides spec.backup.members 18 - clusterName: "Member Cluster 2" # Ops Manager settings for "Member Cluster 2" 19 members: 1 20 backup: # Backup settings for "Member Cluster 2" 21 members: 2 # Overrides spec.backup.members 22 applicationDatabase: # Global {+appdb+} settings 23 topology: MultiCluster 24 version: 8.0.0 25 members: 3 # In multi-cluster mode, the Operator ignores this field. 26 # The Operator sets the number of members for the Application 27 # Database in spec.applicationDatabase.clusterSpecList.members. 28 clusterSpecList: 29 - clusterName: "Member Cluster 1" 30 members: 3 31 - clusterName: "Member Cluster 2" 32 members: 2 33 backup: # Global settings for the Backup Daemon 34 enabled: true 35 members: 1 # Set this value and use it as a global or default setting. 36 # To override this value, set the value for 37 # spec.clusterSpecList.backup.members. 38 # The Backup Daemon's configuration for each cluster isn't 39 # stored here. Use the Ops Manager's spec.clusterSpecList.backup to 40 # specify the Backup Daemon configuration for each member cluster. O operador Kubernetes se conecta às instâncias do MongoDB Ops Manager fazendo referência a:
The default FQDN of the service it creates for the Ops Manager resource,
<om_resource_name>-svc.<namespace>.svc.cluster.local, orThe URL that you specify in
spec.opsManagerURL. In some deployments, such as when the cluster where you installed the Kubernetes Operator isn't attached to the service mesh, the default service FQDN might be unreachable. In this case, the Kubernetes Operator reports theMongoDBOpsManagerresource status asFailedindicating a connection error. To account for such cases, provide the URL to Ops Manager in thespec.opsManagerURL. This URL might be a hostname of an externally exposed Ops Manager instance. To learn more, see Networking Overview.
Two member clusters host the Ops Manager Application. In each cluster, the Kubernetes Operator deploys a StatefulSet named
<om_resource_name>-<cluster_index>.O StatefulSet implementa duas instâncias do Aplicativo MongoDB Ops Manager no
Member Cluster 1e uma instância noMember Cluster 2.Você define o número de instâncias no
spec.clusterSpecList.members. Você pode definir o número de instâncias como zero para que esse cluster não implante nenhuma instância do Aplicativo de MongoDB Ops Manager . Isso é útil se, por exemplo, você quiser usar esse cluster para hospedar apenas instâncias do Backup Daemon .Se você remover um cluster de
spec.clusterSpecList, isso será equivalente a especificar zero nós emspec.clusterSpecList.membersespec.clusterSpecList[*].backup.members.For each StatefulSet in each cluster, the Kubernetes Operator configures a service of type
ClusterIP, named<om_resource_name>-svc, that contains all Pods on the cluster's endpoints list. This service's FQDN,<om_resource_name>-svc.<namespace>.svc.cluster.local, is a default hostname that the Kubernetes Operator uses to access the deployed endpoint for the Ops Manager Application.Se você especificar
spec.externalConnectivity, o Operador Kubernetes também criará um serviço externo do tipo KubernetesLoadBalancer, chamado<om_resource_name>-svc-ext, para cada cluster. Em cada cluster, você pode especificar sua própria configuração para esse serviço externo usandospec.clusterSpecList.externalConnectivity. Por exemplo, você pode alterar o tipo do serviço ou definir anotações.
Banco de Dados de Aplicativos. O Operador Kubernetes implementa o Banco de Dados de Aplicativo em dois clusters.
You define the Application Database configuration using the
spec.applicationDatabasesettings. On each member cluster, the Kubernetes Operator creates a StatefulSet named<om_resource_name>-db-<cluster_index>with the number of member clusters defined inspec.applicationDatabase.clusterSpecList.members. In multi-cluster mode, the Kubernetes Operator ignores values that you set for thespec.applicationDatabase.membersfield. The Kubernetes Operator configures one replica set formed frommongodprocesses deployed across all member clusters.For each Pod in
<statefulset_name>-<pod_index>hosting a MongoDB process named<om_resource_name>-db-<cluster_index>-<pod_index>, the Kubernetes Operator creates a KubernetesClusterIP-type service for accessing the individualmongodprocesses by its FQDN,<om_resource_name>-db-<cluster_index>-<pod_index>-svc. Eachmongodprocess in the replica set must be uniquely addressable.The processes in the replica set configuration must have their process hostnames configured to that Pod service's FQDN:
<om_resource_name>-db-<cluster_index>-<pod_index>-svc.<namespace>.svc.cluster.local.Cada Pod tem seu volume persistente anexado por meio de uma Declaração de Volume Persistente que o Operador Kubernetes cria.
To form a replica set from all
mongodprocesses, each process must connect to each other process for replication purposes. To achieve this, include all member clusters on which you deploy the Application Database into the same service mesh configuration.A mesclagem de serviço lida com queries de DNS entre clusters e roteia o tráfego adequadamente. A malha de serviço ajuda a resolver o FQDN
<om_resource_name>-db-<cluster_index>-<pod-index>-svc.<namespace>.svc.cluster.localde cada serviço de Pod em todos os clusters e permite a conectividade na portamongodexposta (27017 por padrão).For example, when a
mongodprocess running in theom-db-1-0Pod inMember Cluster 1connects to amongodrunning in theom-db-2-1Pod inMember Cluster 2, the firstmongodprocess uses its hostname from the Automation Configuration,om-db-2-1-svc.om-ns.svc.cluster.local:27017, and the service mesh routes this request toMember Cluster 2to theom-db-2-1-svcservice. Without the service mesh, the KubernetesMember Cluster 1has no information about theom-db-2-1-svcservice deployed in theMember Cluster 2and the DNS resolution ofom-db-2-1-svc.om-ns.svc.cluster.localwould fail.Quando o Banco de Dados de Aplicativo e as instâncias do Aplicativo MongoDB Ops Manager estão em um estado
Running, o Operador Kubernetes adiciona um contêiner de monitoramento adicional ao Banco de Dados do Aplicativo StatefulSets. Isso resulta em uma reinicialização contínua de todos os Pods do Banco de Dados de Aplicativos em todos os clusters. O Operador Kubernetes atualiza os StatefulSets em todos os clusters sequencialmente, de modo que, durante o processo de reinicialização contínua , em cada cluster, apenas um membro do conjunto de réplicas fique temporariamente indisponível.The Monitoring Agent connects to the Ops Manager Application instances using the Ops Manager service's FQDN,
<om_resource_name>-svc.<namespace>.svc.cluster.local, or the value inspec.opsManagerURLif you specify it.O Aplicativo MongoDB Ops Manager e o Backup Daemon sempre usam a connection string para o Banco de Dados do Aplicativo que contém todos os membros do conjunto de réplicas. A string de conexão é sempre construída usando os FQDNs de serviço por pod.
O Operador Kubernetes implementa o Backup Daemon StatefulSets se você definir o
spec.backup.enabledcomotrue.Em cada cluster de membros listado em
spec.clusterSpecList, o Operador Kubernetes cria um Backup Daemon StatefulSet, chamado<om_resource_name>-backup-daemon-<cluster_index>com o número de instâncias do Backup Daemon definidos comospec.backup.members.Como alternativa, você pode configurar o número de instâncias do Backup Daemon para cada cluster em
spec.clusterSpecList[*].backup.members.As instâncias do Backup Daemon se conectam somente ao conjunto de réplicas do banco de dados do aplicativo usando a mesma connection string que as instâncias do aplicativo MongoDB Ops Manager .
Além disso, neste diagrama, é possível observar a malha de serviço e as conexões de rede entre os componentes:
As linhas pontilhadas ao redor do diagrama mostram a única malha de serviço que inclui a configuração de rede para todos os clusters.
As linhas pontilhadas ao redor do aplicativo MongoDB Ops Manager nos clusters de membros indicam que essas instâncias não têm estado e o tráfego pode ser distribuído uniformemente para todas as instâncias, por exemplo , usando um balanceador de carga round-robin .
As linhas pontilhadas ao redor do banco de dados de aplicativos em clusters de membros indicam que essas instâncias se comunicam entre si e formam um único conjunto de réplicas MongoDB.