Início rápido do Multi-Kubernetes-Cluster
Nesta página
Use o início rápido para implantar um conjunto de réplicas do MongoDB em três clusters de membros do Kubernetes, usando aGKE (Google Kubernetes Engine) e a malha de serviço Istion.
Antes de começar:
Saiba mais sobre sistemas de clusters multi-Kubernetes
Revisar a lista de serviços e ferramentas de vários clusters Kubernetes
Concluir os pré- requisitos
Observação
Os procedimentos a seguir definem o escopo do sistema do MongoDB do cluster multi-Kubernetes para um único namespace denominado mongodb
. Você pode configurar seu sistema do MongoDB de clusters multikubernetes para observar recursos em vários namespaces ou em todos os namespaces.
Você prefere aprender assistindo?
Acompanhe este tutorial em vídeo que demonstra como criar um sistema MongoDB de cluster multi-Kubernetes.
Duração: 12 Minutos
Implantação de um conjunto de réplicas do MongoDB em vários clusters Kubernetes
Pré-requisitos
Antes de criar um sistema do MongoDB em cluster multi-Kubernetes usando o início rápido, conclua as seguintes tarefas:
Revise os pré-requisitos gerais
Certifique-se de atender ao pré-requisito geral antes de prosseguir. Para saber mais, consulte Pré-requisitos gerais.
Definir variáveis de ambiente e zonas GKE
Defina as variáveis de ambiente com nomes de cluster e as zonas GKE disponíveis onde você distribui os clusters, como neste exemplo:
export MDB_GKE_PROJECT={GKE project name} export MDB_CENTRAL_CLUSTER_ZONE="us-west1-a" export MDB_CLUSTER_1_ZONE="us-west1-b" export MDB_CLUSTER_2_ZONE="us-east1-b" export MDB_CLUSTER_3_ZONE="us-central1-a" export MDB_CENTRAL_CLUSTER_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CENTRAL_CLUSTER_ZONE}_${MDB_CENTRAL_CLUSTER}" export MDB_CLUSTER_1_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_1_ZONE}_${MDB_CLUSTER_1}" export MDB_CLUSTER_2_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_2_ZONE}_${MDB_CLUSTER_2}" export MDB_CLUSTER_3_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_3_ZONE}_${MDB_CLUSTER_3}"
Configurar clusters GKE
Configurar o GKE (Google Kubernetes Engine) clusters:
Configure sua conta do Google Cloud.
Se você ainda não tiver feito isso, crie um Google Cloud Platform projeto do , habilite o faturamento no projeto, habilite as APIs Artefato de Registro e GKE e inicie shell o Cloud seguindo os procedimentos relevantes no Início rápido do Google Engine Kubernetes na documentação Google Cloud Platform do .
Crie um cluster central e clusters de membros.
Crie um cluster central e um ou mais clusters membros, especificando as zonas de GKE, o número de nós e os tipos de instância, como nestes exemplos:
gcloud container clusters create $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
Obter credenciais de autenticação de usuário para clusters centrais e de membros
Obtenha credenciais de autenticação de usuário para os clusters Kubernetes centrais e de membros e salve as credenciais. Posteriormente, você utilizará estas credenciais para executar comandos do kubectl
nestes agrupamentos.
Execute os seguintes comandos:
gcloud container clusters get-credentials $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE
Implemente um recurso MongoDBMultiCluster
Selecione a guia apropriada com base no fato de você desejar criptografar as conexões do conjunto de réplicas em seus sistemas do MongoDB do cluster Kubernetes usando certificadosTLS .
Você pode usar os seguintes procedimentos nesta aba TLS-Encrypted Connections :
Implemente um recurso
MongoDBMultiCluster
Renovar certificados TLS para um recurso
MongoDBMultiCluster
Esses procedimentos estabelecem conexões criptografadas por TLSentrehosts MongoDB em um conjunto de réplicas e entre aplicativos cliente e MongoDB .
Antes de começar, você deve ter certificados válidos para criptografia TLS .
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>
Execute o kubectl mongodb
plugin.
Por padrão, o Kubernetes Operator tem como escopo o namespace mongodb
. Ao executar o seguinte comando, o plugin kubectl mongodb
:
Cria um cluster central, três clusters de membros e um namespace rotulado como
mongodb
em cada um dos clusters.Cria um ConfigMap padrão com o nome codificado
mongodb-enterprise-operator-member-list
que contém todos os clusters de membros. Você não pode alterar o nome do ConfigMap.Cria as contas de serviço e roles necessários para executar volumes de trabalho de banco de dados de dados nos clusters de membros.
Execute o plug-in kubectl mongodb
:
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
Opcional: defina o webhook de injeção do Istion em cada cluster de membros.
Se você estiver usando o Istipo, execute o seguinte comando no cluster central, especificando o contexto de cada um dos clusters de membros no sistema. Para habilitar a injeção de sidecar no Istion, os comandos a seguir adicionam os istio-injection=enabled
rótulos aos mongodb
namespaces em cada cluster de membros. Se você usar outra interface de serviço, configure-a para lidar com o tráfego de rede nos namespaces criados.
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
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
Implemente o MongoDB Enterprise Kubernetes Operator no cluster central.
Implante o MongoDB Enterprise Kubernetes Operator no cluster central do namespace mongodb
com Helm ou kubectl
.
Adicione o repositório MongoDB Helm Charts for Kubernetes ao Helm.
helm repo add mongodb https://mongodb.github.io/helm-charts Use os MongoDB Helm Charts do para para Kubernetes implementar o Kubernetes Operador .
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
Aplique os recursos personalizados do Kubernetes Operator.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml Baixe o modelo YAML do Kubernetes Operator.
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml Opcional: personalize o modelo YAML do operador Kubernetes.
Para saber mais sobre as configurações de instalação opcionais do Operador Kubernetes, consulte MongoDB Enterprise Kubernetes Operator kubectl e oc Configurações de instalação.
Aplique o arquivo YAML do Kubernetes Operator.
kubectl apply -f operator.yaml Verifique se o Operador Kubernetes está implantado.
Para verificar se o Kubernetes Operator foi instalado corretamente, execute o seguinte comando e verifique o resultado:
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> Por padrão, existem sistemas no namespace
mongodb
. Se a seguinte mensagem de erro aparecer, certifique-se de usar o namespace correto:Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found Para solucionar problemas do seu operador Kubernetes, consulte Verificar registros do operador Kubernetes e outros tópicos de solução de problemas.
Importante
Se você precisar remover o Kubernetes Operator ou o namespace, primeiro deverá remover os recursos do MongoDB.
Crie um segredo para usar com o Ops Manager e crie um ConfigMap.
Crie um segredo para que o operador Kubernetes possa criar e atualizar objetos em seu projeto MongoDB Ops Manager . Para saber mais, consulte Criar Credenciais para o Operador Kubernetes.
Crie um ConfigMap para vincular o Operador Kubernetes ao seu projeto do Ops Manager. Para saber mais, consulte Criar um projeto por MongoDB usando um ConfigMap.
Implemente o MongoDBMultiCluster
recurso.
Defina spec.credentials
, spec.opsManager.configMapRef.name
e configurações de segurança e implemente o recurso MongoDBMultiCluster
. Na seguinte amostra de código, duplicateServiceObjects
está definido como true
para habilitar o proxy de DNS em Ístipo.
Observação
Para habilitar a resolução de DNS entre clusters pela malha de serviço do Istío, este tutorial cria objetos de serviço com um único endereço ClusterIP por cada Pod do Kubernetes.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
O Kubernetes Operator copia o ConfigMap com a CA que você criou em etapas anteriores para cada cluster de membros, gera um segredo PEM concatenado e o distribui para os clusters de membros.
Verifique se os MongoDBMultiCluster
recursos do estão em execução.
Para clusters de membros, execute os seguintes comandos para verificar se os MongoDB Pods estão no estado de execução:
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb No cluster central, execute o seguinte comando para verificar se o recurso
MongoDBMultiCluster
está no estado de execução:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
Renovar certificados TLS para um recurso MongoDBMultiCluster
Renove periodicamente seus certificados TLS usando o procedimento a seguir.
Renove o segredo para um MongoDBMultiCluster
recurso.
Execute este kubectl
comando para renovar um segredo existente que armazena os certificados para o MongoDBMultiCluster
recurso :
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> \ --dry-run=client \ -o yaml | kubectl apply -f -
Este procedimento não criptografa conexões entre hosts MongoDB em um conjunto de réplicas e entre aplicativos cliente e MongoDB .
Execute o kubectl mongodb
plugin.
Por padrão, o Kubernetes Operator tem como escopo o namespace mongodb
. Ao executar o seguinte comando, o plugin kubectl mongodb
:
Cria um cluster central, três clusters de membros e um namespace rotulado como
mongodb
em cada um dos clusters.Cria um ConfigMap padrão com o nome codificado
mongodb-enterprise-operator-member-list
que contém todos os clusters de membros. Você não pode alterar o nome do ConfigMap.Cria as contas de serviço e roles necessários para executar volumes de trabalho de banco de dados de dados nos clusters de membros.
Execute o plug-in kubectl mongodb
:
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
Opcional: defina o webhook de injeção do Istion em cada cluster de membros.
Se você estiver usando o Istipo, execute o seguinte comando no cluster central, especificando o contexto de cada um dos clusters de membros no sistema. Para habilitar a injeção de sidecar no Istion, os comandos a seguir adicionam os istio-injection=enabled
rótulos aos mongodb
namespaces em cada cluster de membros. Se você usar outra interface de serviço, configure-a para lidar com o tráfego de rede nos namespaces criados.
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
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
Implemente o MongoDB Enterprise Kubernetes Operator no cluster central.
Implante o MongoDB Enterprise Kubernetes Operator no cluster central do namespace mongodb
com Helm ou kubectl
.
Adicione o repositório MongoDB Helm Charts for Kubernetes ao Helm.
helm repo add mongodb https://mongodb.github.io/helm-charts Use os MongoDB Helm Charts do para para Kubernetes implementar o Kubernetes Operador .
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
Aplique os recursos personalizados do Kubernetes Operator.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml Baixe o modelo YAML do Kubernetes Operator.
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml Opcional: personalize o modelo YAML do operador Kubernetes.
Para saber mais sobre as configurações de instalação opcionais do Operador Kubernetes, consulte MongoDB Enterprise Kubernetes Operator kubectl e oc Configurações de instalação.
Aplique o arquivo YAML do Kubernetes Operator.
kubectl apply -f operator.yaml Verifique se o Operador Kubernetes está implantado.
Para verificar se o Kubernetes Operator foi instalado corretamente, execute o seguinte comando e verifique o resultado:
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> Por padrão, existem sistemas no namespace
mongodb
. Se a seguinte mensagem de erro aparecer, certifique-se de usar o namespace correto:Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found Para solucionar problemas do seu operador Kubernetes, consulte Verificar registros do operador Kubernetes e outros tópicos de solução de problemas.
Importante
Se você precisar remover o Kubernetes Operator ou o namespace, primeiro deverá remover os recursos do MongoDB.
Crie um segredo para usar com o Ops Manager e crie um ConfigMap.
Crie um segredo para que o operador Kubernetes possa criar e atualizar objetos em seu projeto MongoDB Ops Manager . Para saber mais, consulte Criar Credenciais para o Operador Kubernetes.
Crie um ConfigMap para vincular o Operador Kubernetes ao seu projeto do Ops Manager. Para saber mais, consulte Criar um projeto por MongoDB usando um ConfigMap.
Implemente o MongoDBMultiCluster
recurso.
Defina spec.credentials
, spec.opsManager.configMapRef.name
e configurações de segurança e implemente o recurso MongoDBMultiCluster
. Na seguinte amostra de código, duplicateServiceObjects
está definido como true
para habilitar o proxy de DNS em Ístipo.
Observação
Para habilitar a resolução de DNS entre clusters pela malha de serviço do Istío, este tutorial cria objetos de serviço com um único endereço ClusterIP por cada Pod do Kubernetes.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
O Kubernetes Operator copia o ConfigMap com a CA que você criou em etapas anteriores para cada cluster de membros, gera um segredo PEM concatenado e o distribui para os clusters de membros.
Verifique se os MongoDBMultiCluster
recursos do estão em execução.
Para clusters de membros, execute os seguintes comandos para verificar se os MongoDB Pods estão no estado de execução:
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb No cluster central, execute o seguinte comando para verificar se o recurso
MongoDBMultiCluster
está no estado de execução:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
Próximos passos
Depois de implantar seu conjunto de réplicas do MongoDB em três clusters de membros do Kubernetes, você pode adicionar um usuário de banco de dados para poder se conectar ao banco de dados do MongoDB. Consulte managed trigger de banco de dados.