Utilice el inicio rápido para implementar un conjunto de réplicas de MongoDB en tres clústeres miembros de Kubernetes, utilizando Malla deservicios de GKE (Google Kubernetes Engine) e Istio.
Antes de empezar:
Aprender acerca de Implementaciones de múltiples clústeres de Kubernetes
Revise la lista de servicios y herramientas de múltiples clústeres de Kubernetes
Completar los prerrequisitos
Nota
Los siguientes procedimientos limitan la implementación de MongoDB de su clúster multi-Kubernetes a un único espacio de nombres denominado mongodbPuede configurar su implementación de MongoDB en un clúster multi-Kubernetes para observar recursos en múltiples espacios de nombres o en todos los espacios de nombres.
¿Prefieres aprender mirando?
Siga este video tutorial que demuestra cómo crear una implementación de MongoDB en un clúster de Kubernetes múltiple.
Duración: 12 minutos
Implementación de un conjunto de réplicas de MongoDB en varios clústeres de Kubernetes
Requisitos previos
Antes de crear una implementación de MongoDB en un clúster de varios Kubernetes mediante el inicio rápido, complete las siguientes tareas:
Revisar los prerrequisitos generales
Asegúrese de cumplir con los requisitos generales antes de continuar. Para obtener más información, consulte Requisitos generales.
Establecer variables de entorno y zonas de GKE
Establezca las variables de entorno con los nombres de los clústeres y las zonas de GKE disponibles donde implementa los clústeres, como en este ejemplo:
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 clústeres de GKE
Configurar clústeres de GKE (Google Kubernetes Engine):
Configura tu cuenta de Google Cloud.
Si aún no lo ha hecho, cree un proyecto de Google Cloud, habilite la facturación en el proyecto, habilite Artifact Registry y las API de GKE, e inicie Cloud Shell siguiendo los procedimientos correspondientes en la Guía de inicio rápido de Google Kubernetes Engine en la documentación de Google Cloud.
Crea un clúster operador y clústeres nodos.
Crea un clúster de operador y uno o más clústeres nodos, especificando las zonas de GKE, el número de nodos y los tipos de instancia, como en estos ejemplos:
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"
Obtener credenciales de autenticación de usuario para clústeres centrales y de miembros
Obtenga las credenciales de autenticación de usuario para los clústeres central y miembro de Kubernetes y guárdelas. Posteriormente, las usará para ejecutar comandos kubectl en estos clústeres.
Ejecute los siguientes 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
Implementar un recurso MongoDBMultiCluster
Seleccione la pestaña adecuada según si desea cifrar las conexiones del conjunto de réplicas en sus implementaciones de MongoDB de clústeres multi-Kubernetes mediante Certificados TLS.
Puede utilizar los siguientes procedimientos en este TLS-Encrypted Connections pestaña:
Implementar un recurso
MongoDBMultiClusterRenovar certificados TLS para un recurso
MongoDBMultiCluster
Estos procedimientos establecen conexiones cifradas con TLSentre hosts MongoDB en un conjunto de réplicas y entre aplicaciones cliente e implementaciones MongoDB.
Antes de comenzar, debe tener certificados válidos para el cifrado TLS.
Cree el secreto para el certificado TLS de su MongoDBMultiCluster recurso.
Ejecute el comando kubectl para crear un nuevo secreto que almacene el 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>
Nota
Debes anteponer a tus secretos el prefijo <prefix>-<metadata.name>.
Por ejemplo, si llama a su implementación my-deployment y establece el prefijo,mdb debe asignarle al secreto TLS para las comunicaciones TLS del cliente el mdb-my-deployment-cert nombre. Además, debe asignarle al secreto TLS para la autenticación interna del clúster (si está habilitada) el mdb-my-deployment-clusterfile nombre.
Cree el ConfigMap para vincular su CA con su recurso MongoDBMultiCluster.
Ejecute el kubectl comando para vincular su CA a su MongoDBMultiCluster recurso. Especifique el archivo de certificado de CA que siempre debe llamarse ca-pem para el MongoDBMultiCluster recurso:
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create configmap custom-ca -from-file=ca-pem=<your-custom-ca-file>
Ejecute el kubectl mongodb complemento.
De forma predeterminada, el operador de Kubernetes se limita al espacio de nombres mongodb. Al ejecutar el siguiente comando, el complemento kubectl mongodb:
Crea un clúster de operadores, tres clústeres de miembros y un espacio de nombres denominado
mongodben cada uno de los clústeres.Crea un ConfigMap predeterminado con el nombre fijo
mongodb-kubernetes-operator-member-listque contiene todos los clústeres miembros. No se puede cambiar el nombre del ConfigMap.Crea las cuentas de servicio y los roles necesarios para ejecutar cargas de trabajo de base de datos en los clústeres miembros.
Ejecute el complemento 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: configure el webhook de inyección de Istio en cada clúster miembro.
Si usa Istio, ejecute el siguiente comando en el clúster del operador, especificando el contexto de cada clúster miembro de la implementación. Para habilitar la inyección de sidecar en Istio, los siguientes comandos agregan las istio-injection=enabled etiquetas a los mongodb espacios de nombres de cada clúster miembro. Si usa otra malla de servicios, configúrela para gestionar el tráfico de red en los espacios de nombres creados.
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 para utilizar el espacio de nombres del clúster del operador.
Si aún no lo ha hecho, ejecute los siguientes comandos para ejecutar todos los comandos kubectl en el clúster del operador en el espacio de nombres predeterminado.
kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME kubectl config set-context $(kubectl config current-context) \ --namespace=mongodb
Implemente los controladores MongoDB para el operador de Kubernetes en el clúster del operador.
Implemente los controladores MongoDB para el operador de Kubernetes en el clúster del operador en el espacio de nombres mongodb con Helm o kubectl.
Agregue el repositorio MongoDB Helm Charts para Kubernetes a Helm.
helm repo add mongodb https://mongodb.github.io/helm-charts Utilice los gráficos Helm de MongoDB para Kubernetes para implementar el operador de Kubernetes.
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-kubernetes-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
Aplicar los recursos personalizados del operador de Kubernetes.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml Descargue la plantilla YAML del operador de Kubernetes.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml Opcional: personalice la plantilla YAML del operador de Kubernetes.
Para obtener más información sobre las configuraciones de instalación opcionales del operador Kubernetes, consulte Configuración de instalación de controladores MongoDB para el operador Kubernetes kubectl y oc.
Aplicar el archivo YAML del operador de Kubernetes.
kubectl apply -f operator.yaml Verifique que el operador de Kubernetes esté implementado.
Para verificar que el Operador de Kubernetes se instaló correctamente, ejecuta el siguiente comando y verifica el resultado:
kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace> oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace> Por defecto, las implementaciones existen en el namespace
mongodb. Si aparece el siguiente mensaje de error, asegúrate de utilizar el namespace correcto:Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found Para solucionar problemas de tu operador de Kubernetes, consulta Revisión de registros del operador de Kubernetes y otros temas de solución de problemas.
Importante
Si necesitas eliminar el operador Kubernetes o el namespace, primero debes eliminar los recursos de MongoDB.
Crea un secreto para usar con Ops Manager y crea un ConfigMap.
Crea un secreto para que el operador de Kubernetes pueda crear y actualizar objetos en tu proyecto de Ops Manager. Para obtener más información, consulta "Crear credenciales para el operador de Kubernetes".
Cree un ConfigMap para vincular el operador de Kubernetes a su proyecto de Ops Manager. Para obtener más información, consulte Crear un proyecto por cada implementación de MongoDB con un ConfigMap.
Implementar el MongoDBMultiCluster recurso.
spec.credentialsEstablezca, spec.opsManager.configMapRef.name y la configuración de seguridad, e implemente el MongoDBMultiCluster recurso. En el siguiente ejemplo de código, duplicateServiceObjects se establece en true para habilitar el proxy DNS en Istio.
Nota
Para habilitar la resolución de DNS entre clústeres mediante la malla de servicios Istio, este tutorial crea objetos de servicio con una única dirección ClusterIP por cada pod de Kubernetes.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 8.0.0 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
El operador de Kubernetes copia el ConfigMap con la CA que creó en los pasos anteriores en cada clúster miembro, genera un secreto PEM concatenado y lo distribuye a los clústeres miembro.
Verifique que los MongoDBMultiCluster recursos estén ejecutándose.
Para los clústeres de miembros, ejecute los siguientes comandos para verificar que los pods de MongoDB estén en estado de ejecución:
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 En el clúster del operador, ejecute el siguiente comando para verificar que el recurso
MongoDBMultiClusteresté en estado de ejecución:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
Renovar certificados TLS para un recurso MongoDBMultiCluster
Renueve sus certificados TLS periódicamente utilizando el siguiente procedimiento.
Renueva el secreto para un recurso MongoDBMultiCluster.
Ejecute este kubectl comando para renovar un secreto existente que almacena los certificados para el 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 procedimiento no cifra las conexiones entre los hosts de MongoDB en un conjunto de réplicas, ni entre las aplicaciones cliente y las implementaciones de MongoDB.
Ejecute el kubectl mongodb complemento.
De forma predeterminada, el operador de Kubernetes se limita al espacio de nombres mongodb. Al ejecutar el siguiente comando, el complemento kubectl mongodb:
Crea un clúster de operadores, tres clústeres de miembros y un espacio de nombres denominado
mongodben cada uno de los clústeres.Crea un ConfigMap predeterminado con el nombre fijo
mongodb-kubernetes-operator-member-listque contiene todos los clústeres miembros. No se puede cambiar el nombre del ConfigMap.Crea las cuentas de servicio y los roles necesarios para ejecutar cargas de trabajo de base de datos en los clústeres miembros.
Ejecute el complemento 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: configure el webhook de inyección de Istio en cada clúster miembro.
Si usa Istio, ejecute el siguiente comando en el clúster del operador, especificando el contexto de cada clúster miembro de la implementación. Para habilitar la inyección de sidecar en Istio, los siguientes comandos agregan las istio-injection=enabled etiquetas a los mongodb espacios de nombres de cada clúster miembro. Si usa otra malla de servicios, configúrela para gestionar el tráfico de red en los espacios de nombres creados.
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 para utilizar el espacio de nombres del clúster del operador.
Si aún no lo ha hecho, ejecute los siguientes comandos para ejecutar todos los comandos kubectl en el clúster del operador en el espacio de nombres predeterminado.
kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME kubectl config set-context $(kubectl config current-context) \ --namespace=mongodb
Implemente los controladores MongoDB para el operador de Kubernetes en el clúster del operador.
Implemente los controladores MongoDB para el operador de Kubernetes en el clúster del operador en el espacio de nombres mongodb con Helm o kubectl.
Agregue el repositorio MongoDB Helm Charts para Kubernetes a Helm.
helm repo add mongodb https://mongodb.github.io/helm-charts Utilice los gráficos Helm de MongoDB para Kubernetes para implementar el operador de Kubernetes.
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-kubernetes-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
Aplicar los recursos personalizados del operador de Kubernetes.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml Descargue la plantilla YAML del operador de Kubernetes.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml Opcional: personalice la plantilla YAML del operador de Kubernetes.
Para obtener más información sobre las configuraciones de instalación opcionales del operador Kubernetes, consulte Configuración de instalación de controladores MongoDB para el operador Kubernetes kubectl y oc.
Aplicar el archivo YAML del operador de Kubernetes.
kubectl apply -f operator.yaml Verifique que el operador de Kubernetes esté implementado.
Para verificar que el Operador de Kubernetes se instaló correctamente, ejecuta el siguiente comando y verifica el resultado:
kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace> oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace> Por defecto, las implementaciones existen en el namespace
mongodb. Si aparece el siguiente mensaje de error, asegúrate de utilizar el namespace correcto:Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found Para solucionar problemas de tu operador de Kubernetes, consulta Revisión de registros del operador de Kubernetes y otros temas de solución de problemas.
Importante
Si necesitas eliminar el operador Kubernetes o el namespace, primero debes eliminar los recursos de MongoDB.
Crea un secreto para usar con Ops Manager y crea un ConfigMap.
Crea un secreto para que el operador de Kubernetes pueda crear y actualizar objetos en tu proyecto de Ops Manager. Para obtener más información, consulta "Crear credenciales para el operador de Kubernetes".
Cree un ConfigMap para vincular el operador de Kubernetes a su proyecto de Ops Manager. Para obtener más información, consulte Crear un proyecto por cada implementación de MongoDB con un ConfigMap.
Implementar el MongoDBMultiCluster recurso.
spec.credentialsEstablezca, spec.opsManager.configMapRef.name y la configuración de seguridad, e implemente el MongoDBMultiCluster recurso. En el siguiente ejemplo de código, duplicateServiceObjects se establece en true para habilitar el proxy DNS en Istio.
Nota
Para habilitar la resolución de DNS entre clústeres mediante la malla de servicios Istio, este tutorial crea objetos de servicio con una única dirección ClusterIP por cada pod de Kubernetes.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 8.0.0 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
El operador de Kubernetes copia el ConfigMap con la CA que creó en los pasos anteriores en cada clúster miembro, genera un secreto PEM concatenado y lo distribuye a los clústeres miembro.
Verifique que los MongoDBMultiCluster recursos estén ejecutándose.
Para los clústeres de miembros, ejecute los siguientes comandos para verificar que los pods de MongoDB estén en estado de ejecución:
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 En el clúster del operador, ejecute el siguiente comando para verificar que el recurso
MongoDBMultiClusteresté en estado de ejecución:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
Próximos pasos
Después de implementar su conjunto de réplicas de MongoDB en tres clústeres miembros de Kubernetes, puede agregar un usuario de base de datos para conectarse a su base de datos MongoDB.Consulte Administrar usuarios de base de datos.