Para implantar várias instâncias de recursos do MongoDB em vários clusters Kubernetes, primeiro você precisa implantar o Operador Kubernetes em um dos clusters do Kubernetes. Depois que o Operador Kubernetes for implantado em seu cluster central, você poderá criar e gerenciar todos os seus recursos do MongoDB em todos os seus clusters Kubernetes aplicando atualizações em seu cluster central.
Observação
O procedimento para implantar o Operador Kubernetes é o mesmo com ou sem uma malha de serviço. A instalação do operador não configura a rede cluster-to-cluster. Quando você implanta seus recursos MongoDB , o operador expõe cada membro por meio de um Serviço Kubernetes externo e define seu nome de host para um FQDN acessível externamente. Nesta arquitetura de referência, o DNSExterno cria os registros DNS que mapeiam estes FQDN para os Serviços externos.
Pré-requisitos
Antes de iniciar o procedimento a seguir, execute as seguintes ações:
Instalar
kubectl.Conclua o procedimento GKE Clusters ou equivalente.
Conclua o procedimento Configurar DNS Externo ou equivalente.
Instale o plugin
kubectl mongodb. Para instalar o plugin-inkubectl mongodb:1Baixe a versão desejada do pacote do Kubernetes Operator.
Faça o download da versão desejada do pacote do Kubernetes Operator na página de lançamento do repositório do MongoDB Operators for Kubernetes.
O nome do pacote usa este padrão:
kubectl-mongodb_{{ .Version }}_{{ .Os }}_{{ .Arch }}.tar.gz.Use um dos seguintes pacotes:
kubectl-mongodb_{{ .Version }}_darwin_amd64.tar.gzkubectl-mongodb_{{ .Version }}_darwin_arm64.tar.gzkubectl-mongodb_{{ .Version }}_linux_amd64.tar.gzkubectl-mongodb_{{ .Version }}_linux_arm64.tar.gz
23Localize o binário do plugin
kubectl mongodbe copie-o para o destino desejado.Encontre o binário
kubectl-mongodbno diretório descompactado e mova-o para o destino desejado, dentro do PATH para o usuário do Kubernetes Operator, conforme mostrado no exemplo a seguir:mv kubectl-mongodb /usr/local/bin/kubectl-mongodbAgora você pode executar o plug-in
kubectl mongodbusando os seguintes comandos:kubectl mongodb multicluster setupkubectl mongodb multicluster recoverPara saber mais sobre os sinalizadores suportados, consulte a Referência do plugin Kubectl do MongoDB.
Atualize conforme necessário e defina as variáveis de ambiente definidas no arquivo
env_variables.sha seguir.# Namespace in which Ops Manager and AppDB will be deployedexport OM_NAMESPACE="mongodb-om"# Namespace in which the operator will be installedexport OPERATOR_NAMESPACE="mongodb-operator"# Namespace in which MongoDB resources will be deployedexport MDB_NAMESPACE="mongodb" # comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operatorexport OPERATOR_ADDITIONAL_HELM_VALUES="${OPERATOR_ADDITIONAL_HELM_VALUES:-""}" export OFFICIAL_OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"export OPERATOR_HELM_CHART="${OPERATOR_HELM_CHART:-${OFFICIAL_OPERATOR_HELM_CHART}}"
código fonte
Você pode encontrar todo o código-fonte incluído no repositório do MongoDB Kubernetes Operator.
Procedimento
Crie namespaces para o Kubernetes Operator, MongoDB e Ops Manager em cada um dos seus Kubernetes clusters.
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}"kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}"kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}"
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}"kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}"kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}"
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}"kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}"kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}"Criar segredos de pull de imagem.
mkdir -p secrets
kubectl create secret generic "image-registries-secret" \ --from-file=.dockerconfigjson="${HOME}/.docker/config.json" --type=kubernetes.io/dockerconfigjson \ --dry-run=client -o yaml > secrets/image-registries-secret.yaml
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" apply -f secrets/image-registries-secret.yaml
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yaml
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yamlConfigure seus clusters Kubernetes.
Execute o comando a seguir para configurar seus clusters Kubernetes.
kubectl mongodb multicluster setup \ --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ --member-cluster-namespace="${OM_NAMESPACE}" \ --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ --create-service-account-secrets \ --install-database-roles=true \ --image-pull-secrets=image-registries-secret
kubectl mongodb multicluster setup \ --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ --member-cluster-namespace="${MDB_NAMESPACE}" \ --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ --create-service-account-secrets \ --install-database-roles=true \ --image-pull-secrets=image-registries-secretAdicione os Charts do MongoDB Helm para Kubernetes.
Adicione o repositório MongoDB Helm Charts for Kubernetes ao Helm.
helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo "${OFFICIAL_OPERATOR_HELM_CHART}"Implemente o Operador Kubernetes.
Use os MongoDB Helm Charts for Kubernetes para implementar o Operador Kubernetes.
helm upgrade --install \ --debug \ --kube-context "${K8S_CLUSTER_0_CONTEXT_NAME}" \ mongodb-kubernetes-operator-multi-cluster \ "${OPERATOR_HELM_CHART}" \ --namespace="${OPERATOR_NAMESPACE}" \ --set namespace="${OPERATOR_NAMESPACE}" \ --set operator.namespace="${OPERATOR_NAMESPACE}" \ --set operator.watchNamespace="${OM_NAMESPACE}\,${MDB_NAMESPACE}" \ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}}" \ --set "${OPERATOR_ADDITIONAL_HELM_VALUES:-"dummy=value"}" \ --set operator.env=devVerifique o status dos seus Controladores MongoDB para o Operador Kubernetes.
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator-multi-clusterecho "Operator deployment in ${OPERATOR_NAMESPACE} namespace"kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get deploymentsecho; echo "Operator pod in ${OPERATOR_NAMESPACE} namespace"kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get pods