Implante conjuntos de réplicas em um cluster multi-Kubernetes sem uma interface de serviço
Nesta página
Use esse procedimento para implantar um conjunto de réplicas em um sistema do MongoDB de vários clusters Kubernetes sem usar uma tela de serviço para estabelecer conectividade externa entre clusters Kubernetes membros.
Como alternativa ao uso desse procedimento, você pode usar o Início Rápido do Multi-Kubernetes-Cluster, que usa uma malha de serviço.
Antes de começar
Saiba mais sobre sistemas de clusters multi-Kubernetes.
Revise a lista de serviços e ferramentas de vários clusters Kubernetes.
Conclua os pré- requisitos, mas não configure uma tela de serviço. Em vez disso, decida se você precisa de uma tela de serviço. Se você optar por implantar sem uma tela de serviço, use domínios externos e configure o DNS para habilitar a conectividade externa.
Como parte do preenchimento dos pré-requisitos, gere certificados válidos para criptografiaTLS . Para saber mais, consulte Preparar-se para conexões criptografadas por TLS.
Implemente os recursos do MongoDB Ops Manager .
Instale o Operador Kubernetes em um sistema MongoDB de cluster multi-Kubernetes. Consulte Início Rápido do Multi-Kubernetes-Cluster.
Visão geral
Em um sistema do MongoDB de cluster multi-Kubernetes sem uma malha de serviço, use as seguintes configurações de recurso do MongoDBMultiCluster
:
Use o spec.clusterSpecList.externalAccess.externalService para que o Kubernetes Operator crie um serviço externo e, como parte da configuração padrão, configure um balancer de carga com as configurações padrão. Configure o balanceador de carga para servir como o proxy TCP com uma passagem TLS (sem terminação TLS no balanceador de carga).
Personalize serviços externos que o Kubernetes Operator cria para cada Pod no cluster do Kubernetes. Use a configuração global "all-clusters" no spec.externalAccess configurações e substituições específicas do cluster do Kubernetes no spec.clusterSpecList.externalAccess.externalService configurações.
Especifique as anotações específicas do cloud provider para o balanceador em spec.clusterSpecList.externalAccess.externalService.annotations para cada cluster do Kubernetes.
Especifique um domínio externo em spec.clusterSpecList.externalAccess.externalDomain. Isso permite ao Operador Kubernetes registrar processos do
mongod
utilizando o sufixo de domínio. Isso permite conexões externas aos processosmongod
em um sistema MongoDB de cluster multi Kubernetes.
Distribua um MongoDBMultiCluster
recurso sem uma rede de serviço
O procedimento a seguir estabelece conexões criptografadas por TLSentre hosts do MongoDB em um conjunto de réplicas e entre aplicativos clientes e deployments do MongoDB.
Crie o segredo para o certificado TLS do seu MongoDBMultiCluster
recurso.
Execute o comando kubectl
para criar um novo segredo que armazena o certificado de recurso MongoDBMultiCluster
:
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-cert \ --cert=<resource-tls-cert> \ --key=<resource-tls-key>
Observação
É necessário prefixar os segredos com <prefix>-<metadata.name>
.
Por exemplo, se você chamar sua implantação my-deployment
de e definir o prefixo como mdb
, deverá nomear o segredo TLS para as comunicações TLS do cliente mdb-my-deployment-cert
. Além disso, você deve nomear o segredo TLS para autenticação interna do cluster (se ativado) como mdb-my-deployment-clusterfile
.
Crie o ConfigMap para vincular sua CA com seu MongoDBMultiCluster
recurso.
Execute o comando kubectl
para vincular sua CA ao seu recurso MongoDBMultiCluster
. Especifique o arquivo de certificado da CA que você deve sempre nomear ca-pem
para o recurso MongoDBMultiCluster
:
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create configmap custom-ca -from-file=ca-pem=<your-custom-ca-file>
Configure kubectl
o para utilizar o namespace do agrupamento central.
Se ainda não tiver feito isso, execute os seguintes comandos para executar todos os comandos kubectl
no cluster central no namespace padrão.
kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME kubectl config set-context $(kubectl config current-context) \ --namespace=mongodb
Copie e cole o recurso de amostra.
Copie o arquivo YAML do conjunto de réplicas de amostra e cole-o em um novo arquivo de texto.
Altere as configurações do arquivo para corresponder à configuração do conjunto de réplicas desejada.
1 # Provides statefulSet override per cluster 2 3 apiVersion: mongodb.com/v1 4 kind: MongoDBMultiCluster 5 metadata: 6 name: multi-replica-set 7 spec: 8 version: 6.0.0-ent 9 type: ReplicaSet 10 credentials: my-credentials 11 opsManager: 12 configMapRef: 13 name: my-project 14 externalAccess: 15 externalService: 16 annotations: 17 # Global cloud-specific annotations added to external services in all clusters 18 spec: 19 # ServiceSpec attributes to override in external services in all clusters 20 clusterSpecList: 21 - clusterName: cluster1.example.com 22 members: 2 23 externalAccess: 24 # Domain suffix that mongod processes will use in cluster1 25 externalDomain: cluster1.example.com 26 externalService: 27 annotations: 28 # Cloud-specific annotations for external services 29 spec: 30 # ServiceSpec attributes to override if necessary 31 - clusterName: cluster2.example.com 32 members: 1 33 externalAccess: 34 # Domain suffix that mongod processes will use in cluster2 35 externalDomain: cluster2.example.com 36 externalService: 37 annotations: 38 # Cloud-specific annotations for external services 39 spec: 40 # ServiceSpec attributes to override if necessary 41 - clusterName: cluster3.example.com 42 members: 1 43 externalAccess: 44 # Domain suffix that mongod processes will use in cluster3 45 externalDomain: cluster3.example.com 46 externalService: 47 annotations: 48 # Cloud-specific annotations for external services 49 spec: 50 # ServiceSpec attributes to override if necessary 51 52 ...
Defina as configurações de conectividade externa.
Especifique valores globais que afetam todos os clusters em um sistema MongoDB de cluster multi-Kubernetes usando o spec.externalAccess configurações e substituições específicas do cluster usando o spec.clusterSpecList.externalAccess.externalService configurações.
Quando você fornece essas configurações na especificação de recursos do MongoDBMultiCluster
, o Kubernetes Operator cria serviços externos para cada Pod em todos os Kubernetes clusters. Em seguida, você usa esses serviços para estabelecer conectividade externa com todos os processos do mongod
em seu sistema.
Defina um domínio externo para cada cluster de membro do Kubernetes.
Defina um domínio externo para cada cluster de membro usando o spec.clusterSpecList.externalAccess.externalDomain configuração.
Como resultado, o Operador Kubernetes registra todos os processos do mongod
no agrupamento de membro do Kubernetes em um nome de host de acordo com a seguinte convenção:
<pod-name>.<externalDomain>
Por exemplo, um processo do mongod
pode ter o seguinte nome de host: my-replica-set-0-0.cluster-1.example.com
.
Altere as configurações para seus valores preferidos.
Chave | Tipo | Descrição | Exemplo |
---|---|---|---|
string | Etiqueta para o recurso Os nomes de recursos devem ter 44 caracteres ou menos. Consulte também | multi-replica-set | |
string | Versão do MongoDB que este recurso O formato deve ser IMPORTANTE: Certifique-se de escolher uma versão compatível do MongoDB Server. Versões compatíveis diferem dependendo da imagem base que o recurso do banco de banco de dados MongoDB utiliza. Para saber mais sobre a versão MongoDB, consulte Versões do MongoDB no Manual MongoDB. | 6.0.0-ent | |
string | Nome do ConfigMap com a configuração de conexão MongoDB Ops Manager do . A configuração Esse valor deve existir no mesmo namespace que o recurso que você deseja criar. IMPORTANTE: o operador Kubernetes rastreia quaisquer alterações no ConfigMap e reconcilia o estado do recurso | <my-project> | |
spec .clusterSpecList .clusterName | string | Nome do cluster no recurso MongoDBMultiCluster . | cluster1.example.com |
spec .clusterSpecList .members | inteiro | O número de nós neste cluster. | 2 |
spec .clusterSpecList .statefulSet .spec | collection | Opcional. Fornece a configuração para o StatefulSet substituição para cada um dos StatefulSets do cluster em uma implantação do MongoDB de cluster multi-Kubernetes. Se especificado em um nível de cluster individual em | Veja o exemplo. |
spec .clusterSpecList .statefulSet .spec .volumeClaimTemplates .spec | collection | Opcional. Se especificado, fornece uma substituição por cluster para o tamanho de armazenamento padrão do volumeClaimtemplates, para o volume persistente que armazena os dados. | Veja o exemplo. |
string | Nome do secret que você criou como credenciais de autenticação da API do Ops Manager para o Kubernetes Operator se comunicar com o Ops Manager. No Ops Manager, o secret do Kubernetes que contém as credenciais precisa existir no mesmo namespace que o recurso que você deseja criar. IMPORTANTE: o operador do Kubernetes rastreia quaisquer alterações no Secret e reconcilia o estado do recurso | <mycredentials> | |
string | Tipo de recurso MongoDB a ser criado. O único valor suportado para este campo é ReplicaSet . Consulte Limitações. | ReplicaSet |
Adicione quaisquer configurações aceitas adicionais para uma MongoDBMultiCluster
implantação de recurso do.
Você também pode adicionar quaisquer configurações opcionais ao objeto especificação. Consulte Especificação de recursos multi-Kubernetes-Cluster.
Salve este arquivo de configuração de conjunto de réplicas com uma .yaml
extensão.
Inicie o seu sistema de conjunto de réplicas.
Em qualquer diretório, invoque o seguinte comando do Kubernetes para criar seu conjunto de réplicas:
kubectl apply -f <replica-set-conf>.yaml
Verifique a conectividade externa para cada cluster de membros.
Verifique o status dos serviços externos em todos os clusters de membros:
kubectl get services O Kubernetes deve retornar um serviço externo criado para cada Pod do conjunto de réplicas em todos os clusters de membros.
Verifique se cada serviço externo está exposto externamente e é acessível. Execute o comando semelhante ao exemplo a seguir:
mongosh mongodb://my-replica-set-0-0.cluster-0.example.com:27017 \ -tls -tlsCAFile "issuer-ca.pem" Conectar-se ao
my-replica-set-0-0.cluster-0.example.com:27017
deve direcionar o tráfego do cliente para um serviço externo chamadomy-replica-set-0-0-svc-external
, que, por sua vez, direciona o tráfego para o processomongod
.Configure sua zona DNS para o domínio externo especificado para ponto para os serviços externos correspondentes. Essa configuração depende do seu ambiente ou do fornecedor de nuvem que você está usando.
Monitore o status de sua implantação do MongoDB em cluster multi-Kubernetes.
Para verificar o status do seu recurso do MongoDBMultiCluster
, utilize o seguinte comando no cluster central:
kubectl get mdbmc <resource-name> -o yaml -w
Com o sinalizador -w
(inspeção) definido, quando a configuração muda, o resultado é atualizado imediatamente até que a fase de status atinja o estado Running
. Para saber mais sobre os status de distribuição de recursos, consulte Solucionar problemas do operador Kubernetes.