O recurso personalizado do MongoDB define os sistemas de banco de dados que o operador Kubernetes gerencia. Suas especificações de recursos personalizados definem esses recursos e o Kubernetes Operator os monitora. Quando você atualiza a especificação de um recurso, o Operador Kubernetes envia as alterações para o Ops Manager, que modifica a configuração da implantação do MongoDB .
O CRD do MongoDB suporta três tipos de sistema. O diagrama a seguir ilustra a composição de cada um:
Aviso
O Kubernetes Operator não oferece suporte a nós arbiter.
Recurso autônomo
Embora você possa distribuir um recurso Standalone, recomendamos que você implemente um recurso ReplicaSet com um membro, pois um conjunto de réplicas permite que você adicione membros no futuro. Em Kubernetes, um recurso do Standalone é equivalente a um recurso do ReplicaSet com somente um membro.
Para um recurso do Standalone, o Operador Kubernetes implementa um conjunto de réplicas com um único membro como StatefulSet. O Operador Kubernetes cria o StatefulSet, que contém a especificação Pod, e depende do Controlador StatefulSet Kubernetes para criar o Pod para esta instância única mongod.
Recurso de conjunto de réplicas
Para um ReplicaSet recurso, o Operador Kubernetes implementa um conjunto de réplicas como um StatefulSet, com vários membros iguais ao valor de. O Operador Kubernetes depende do Controlador StatefulSet do Kubernetes para criar um Pod por membro. Cada Pod executa uma instância de MongoDB Agent que gerencia spec.members o mongod processo do nesse Pod.
Recurso de cluster fragmentado
Um recurso do ShardedCluster consiste em servidores de configuração, instâncias do mongos e nós do shard. O operador Kubernetes implementa:
Um StatefulSet para todos os servidores de configuração
Um StatefulSet para todas as instâncias do
mongosUm StatefulSet para cada shard
O Operador Kubernetes depende do Controlador StatefulSet Kubernetes para criar um Pod em cada StatefulSet. Para um cluster fragmentado com 2 shards, isso significa 4 total do StatefulSets (1 para servidores de configuração + 1 para mongos + 2 para shards).
Tipo de implementação | StatefulSets | Tamanho do StatefulSet |
|---|---|---|
Autônomo | 1 | 1 Pod |
Conjunto de réplicas | 1 | 1 Pod por membro |
Cluster fragmentado | <numberOfShards> + 2 | 1 Pod por |
Reconciliação de recursos do MongoDB
Quando você aplica uma especificação de recurso personalizado do MongoDB , o Operador Kubernetes implementa cada recurso como um StatefulSet. O Operador Kubernetes então entra em um loop de reconciliação contínuo:
Lê a configuração do projeto a partir do ConfigMap especificado
spec.opsManager.configMapRef.nameno.Lê credenciais API a partir do segredo especificado no
spec.credentialsou de sua ferramenta de armazenamento secreto.Conecta-se ao Ops Manager e executa o seguinte:
Lê a organização do
orgIdno ConfigMap.Lê ou cria o projeto especificado em
projectName.Verifica se o
<project-id>-group-secretexiste ou cria com chaves API do Ops Manager .Registra o Operador Kubernetes como um observador do ConfigMap e segredos de credenciais.
Verifica os certificados TLS e X.,509 se habilitados:
Para conjuntos de réplica: procura certificados em
<prefix>-<resource-name>-cert.Para clusters fragmentados: procura certificados em
<prefix>-<resource-name>-x-cert(por shard),<prefix>-<resource-name>-config-cert(servidores de configuração) e<prefix>-<resource-name>-mongos-cert(instâncias demongos).
Cria ou atualiza StatefulSets. O número depende do tipo de sistema. Neste ponto, cada Pod executa um MongoDB Agent , mas ainda não contém
mongodinstâncias.Cada MongoDB Agent pesquisa o Ops Manager para a configuração de automação.
Em contêineres não estáticos, o MongoDB Agent baixa binários MongoDB com a versão especificada no
spec.version.Após receber a configuração, o MongoDB Agent inicia o
mongod.O Operador Kubernetes gera PersistentVolumeClaims para cada Pod (exceto
mongosPods), a menos quespec.persistentsejafalse.
Envia atualizações de configuração de automação para o Ops Manager. Cada MongoDB Agent pesquisa a configuração atualizada e a aplica. Se você alterar qualquer campo, o Operador Kubernetes executará uma atualização contínua do StatefulSets.
Cria ou atualiza Serviços Kubernetes:
Para
ReplicaSetouStandalone: um serviçoClusterIPheadless denominado<resource-name>-svc.Para
ShardedCluster:mongos: usa o nome emspec.serviceou<resource-name>-svc.Config servers:
<resource-name>-cs.Cada fragmento:
<resource-name>-sh.
O diagrama a seguir ilustra o fluxo de reconciliação para conjuntos de réplicas:
O diagrama a seguir ilustra o fluxo de reconciliação para clusters fragmentados:
Reconciliação de recursos do MongoDBUser
Se o método de autenticação do usuário for SCRAM, o MongoDBUser recurso dependerá de um segredo que armazena as credenciais do usuário. O Operador do Kubernetes observa o Segredo para mudanças e reconcilia da seguinte forma:
Determina o recurso do usuário MongoDB do
spec.MongoDBResourceRef.name.Conecta-se ao Ops Manager, lê a organização e o projeto e verifica o segredo do agente .
Atualiza as credenciais do usuário no Ops Manager ou cria um novo usuário se não existir. Se o nome de usuário tiver mudado, o Operador Kubernetes removerá o nome antigo e adicionará um novo.
O diagrama a seguir ilustra o fluxo de reconciliação do MongoDBUser: