Menu Docs
Página inicial do Docs
/
Operador de Kubernetes do MongoDB Enterprise
/

Início rápido do Multi-Kubernetes-Cluster

Nesta página

Use o início rápido para implementar um conjunto de réplicas do MongoDB em três clusters de membros do Kubernetes, usando oGKE (Google Kubernetes Engine) e Ístolo tela de serviço.

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.

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

Antes de criar um sistema do MongoDB em cluster multi-Kubernetes usando o início rápido, conclua as seguintes tarefas:

Certifique-se de atender ao pré-requisito geral antes de prosseguir. Para saber mais, consulte Pré-requisitos gerais.

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 o GKE (Google Kubernetes Engine) clusters:

1

Se você ainda não tiver feito isso, crie um projeto do Google Cloud, habilite o faturamento no projeto, habilite as APIs Artefato de Registro e GKE e inicie o Cloud Shell seguindo os procedimentos relevantes no Início rápido do Google Kubernetes Engine na documentação do Google Cloud.

2

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"

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

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 clientes e sistemas MongoDB.

Antes de começar, você deve ter certificados válidos para criptografia TLS .

1

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.

2

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>
3

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 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
4

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
5

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
6

Implante o MongoDB Enterprise Kubernetes Operator no cluster central do namespace mongodb com Helm ou kubectl.

  1. Adicione o repositório MongoDB Helm Charts for Kubernetes ao Helm.

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 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
  1. Aplique os recursos personalizados do Kubernetes Operator.

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml
  2. 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
  3. 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.

  4. Aplique o arquivo YAML do Kubernetes Operator.

    kubectl apply -f operator.yaml
  5. 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.

7
  1. 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.

  2. Crie um ConfigMap para vincular o Operador Kubernetes ao seu projeto do Gerente de Operações . Para saber mais, consulte Criar um projeto usando um ConfigMap.

8
9

Defina spec.credentials, spec.opsManager.configMapRef.name e configurações de segurança e implemente o MongoDBMultiCluster recurso . 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.

10
  1. 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
  2. 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

Renove periodicamente seus certificados TLS usando o procedimento a seguir.

1

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 clientes e sistemas MongoDB.

1

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 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
2

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
3

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
4

Implante o MongoDB Enterprise Kubernetes Operator no cluster central do namespace mongodb com Helm ou kubectl.

  1. Adicione o repositório MongoDB Helm Charts for Kubernetes ao Helm.

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 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
  1. Aplique os recursos personalizados do Kubernetes Operator.

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml
  2. 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
  3. 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.

  4. Aplique o arquivo YAML do Kubernetes Operator.

    kubectl apply -f operator.yaml
  5. 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.

5
  1. 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.

  2. Crie um ConfigMap para vincular o Operador Kubernetes ao seu projeto do Gerente de Operações . Para saber mais, consulte Criar um projeto usando um ConfigMap.

6
7

Defina spec.credentials, spec.opsManager.configMapRef.name e configurações de segurança e implemente o MongoDBMultiCluster recurso . 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.

8
  1. 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
  2. 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

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.

Voltar

Pré-requisitos