Antes de crear una implementación de MongoDB en varios clústeres de Kubernetes utilizando el inicio rápido o un procedimiento de implementación, completa las siguientes tareas.
Para obtener más información sobre los requisitos previos específicos del inicio rápido, consulte Requisitos previos de inicio rápido.
Revisar arquitecturas de hardware compatibles
Clona el repositorio de MongoDB Controllers for Kubernetes Operator
Clona el repositorio de MongoDB Controllers for Kubernetes Operator y consulta la etiqueta de la versión actual:
git clone https://github.com/mongodb/mongodb-kubernetes.git cd mongodb-kubernetes git checkout 1.2.0
Establecer Variables de Entorno
Establezca las variables de entorno con los nombres de los clústeres donde implemente los clústeres, como en este ejemplo:
export MDB_CENTRAL_CLUSTER_FULL_NAME="mdb-central" export MDB_CLUSTER_1_FULL_NAME="mdb-1" export MDB_CLUSTER_2_FULL_NAME="mdb-2" export MDB_CLUSTER_3_FULL_NAME="mdb-3"
Instala Go y Helm
Instala las siguientes herramientas:
Instale Go v1.17 o posterior.
Comprenda los roles de Kubernetes y las vinculaciones de roles
Para utilizar una implementación de MongoDB en un clúster de múltiples Kubernetes, debe tener un conjunto específico de Kubernetes Roles, ClusterRoles, RoleBindings, ClusterRoleBindings y ServiceAccounts, que puede configurar de cualquiera de las siguientes maneras:
Sigue la Guía Rápida de Multi-Kubernetes-Cluster, que te indica cómo utilizar el Plugin de MongoDB para crear automáticamente los objetos requeridos y aplicarlos a los clústeres apropiados dentro de tu implementación multi-Kubernetes-cluster de MongoDB.
Utilice Helm para configurar los roles de Kubernetes y las cuentas de servicio necesarios para cada clúster miembro:
helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb helm template --show-only \ templates/database-roles.yaml \ mongodb/mongodb-kubernetes \ --set namespace=mongodb | \ kubectl apply -f - \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb Crea manualmente los archivos
.yamlde objetos de Kubernetes y añade los Roles de Kubernetes requeridos y las cuentas de servicio a tu implementación de MongoDB multi-Kubernetes con el comandokubectl apply. Esto puede ser necesario para ciertos flujos de trabajo altamente automatizados. MongoDB proporciona archivos de configuración de muestra.Para recursos personalizados dirigidos a un subconjunto de namespaces:
Para recursos personalizados con ámbito de namespace a nivel de clúster:
Cada archivo define múltiples recursos. Para apoyar su implementación, debe reemplazar los valores de marcador de posición en los siguientes campos:
subjects.namespaceen cada recursoRoleBindingoClusterRoleBindingmetadata.namespaceen cada recurso deServiceAccount
Después de modificar las definiciones, aplícalas ejecutando el siguiente comando para cada archivo:
kubectl apply -f <fileName>
Establecer el alcance de la implementación
Por defecto, el operador de Kubernetes para clústeres múltiples tiene un ámbito limitado al espacio de nombres en el que se instala. El operador de Kubernetes concilia el recurso MongoDBMultiCluster desplegado en el mismo espacio de nombres que el operador de Kubernetes.
Cuando ejecutes el complemento kubectl de MongoDB como parte del inicio rápido multiclúster y no modifiques los ajustes del complemento de kubectl mongodb, el complemento:
Crea un ConfigMap por defecto llamado
mongodb-kubernetes-operator-member-listque contiene todos los nodos clústeres de la implementación multi-Kubernetes de MongoDB. Este nombre está codificado y no puedes cambiarlo. Ver Problemas conocidos.Crea cuentas de servicio, roles, roles de clúster, enlacesde roles y enlaces de roles de clúster en el clúster central y en cada clúster miembro.
Aplica los permisos correctos para las cuentas de servicio.
Utiliza la configuración anterior para crear tu implementación MongoDB multi-clúster de Kubernetes.
Una vez que el operador de Kubernetes crea el despliegue de MongoDB en clústeres de múltiples Kubernetes, el operador de Kubernetes comienza a observar los recursos MongoDB en el espacio de nombresmongodb.
Para configurar el operador de Kubernetes con los permisos correctos para implementar en un subconjunto o en todos los espacios de nombres, ejecuta el siguiente comando y especifica los espacios de nombres que deseas que el operador de Kubernetes supervise.
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="mongodb2" \ --central-cluster-namespace="mongodb2" \ --create-service-account-secrets \ --cluster-scoped="true"
Cuando instale la implementación de MongoDB en un clúster multi-Kubernetes en varios o todos los espacios de nombres, puede configurar el operador de Kubernetes para:
Nota
Instale y configure una sola instancia de un operador de Kubernetes y configúrela para monitorear uno, varios o todos los recursos personalizados en diferentes subconjuntos de namespaces que no se superpongan. Ver también ¿MongoDB admite ejecutar más de una instancia de Kubernetes operador?
Vigila recursos en varios espacios de nombres
Si configura el alcance para la implementación de MongoDB en clústeres de múltiples Kubernetes a varios espacios de nombres, puede configurar el Operador de Kubernetes para que supervise los recursos MongoDB en estos espacios de nombres en la implementación de MongoDB en clústeres de múltiples Kubernetes.
Establezca spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en el archivo mongodb-kubernetes.yaml del repositorio de GitHub de controladores de MongoDB para el operador de Kubernetes con la lista de espacios de nombres separados por comas que desea que el operador de Kubernetes supervise:
WATCH_NAMESPACE: "$namespace1,$namespace2,$namespace3"
Ejecuta el siguiente comando y reemplaza los valores en la última línea con los namespaces que te gustaría que el Operador de Kubernetes monitoree.
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 operator.watchNamespace="$namespace1,$namespace2,$namespace3"
Ver recursos en todos los espacios de nombres
Si configura el alcance para la implementación de MongoDB en clústeres de múltiples Kubernetes para que abarque todos los espacios de nombres en lugar del espacio de nombres predeterminado mongodb, puede configurar el operador de Kubernetes para que supervise los recursos MongoDB en todos los espacios de nombres en la implementación de MongoDB en clústeres de múltiples Kubernetes.
Establezca spec.template.spec.containers.name.env.name:WATCH_NAMESPACE en mongodb-kubernetes.yaml a "*". Debe incluir las comillas dobles (") alrededor del asterisco (*) en el archivo YAML.
WATCH_NAMESPACE: "*"
Ejecuta el siguiente comando:
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 operator.watchNamespace="*"
Planifica la conectividad externa: ¿deberías usar un malla de servicios?
Una malla de servicios permiten la comunicación entre clústeres entre los miembros del set de réplicas desplegados en diferentes clústeres de Kubernetes. Utilizar una malla de servicios simplifica en gran medida la creación de implementaciones de MongoDB en varios clústeres de Kubernetes, y es la forma recomendada de implementar MongoDB en varios clústeres de Kubernetes. Sin embargo, si tu organización de TI no utiliza una malla de servicios, puedes implementar un set de réplicas en una implementación de MongoDB en varios clústeres de Kubernetes sin ella.
Según tu entorno, realiza lo siguiente:
Si puedes usar una malla de servicios, instala Istio.
Si no puedes usar un malla de servicios:
Revise la sección ¿Cómo establece la conectividad el operador de Kubernetes?
¿Cómo establece el operador de Kubernetes la conectividad?
Independientemente del tipo de implementación, una implementación de MongoDB en Kubernetes debe establecer las siguientes conexiones:
Desde el agente MongoDB Ops Manager en el pod hasta su proceso
mongod, para activar la gestión del ciclo de vida y la supervisión de la implementación de MongoDB.Desde el Ops Manager MongoDB Agent en el Pod hasta la instancia de Ops Manager, para habilitar la automatización.
Entre todos los procesos
mongod, para permitir la replicación.
Cuando el operador de Kubernetes implementa los recursos de MongoDB, trata estos requisitos de conectividad de la siguiente manera, dependiendo del tipo de implementación:
En una única implementación de clúster de Kubernetes, el operador de Kubernetes configura los nombres de host en el conjunto de réplicas como FQDNde un servicio sin cabeza. Este es un único servicio que resuelve el DNS de una dirección IP directa de cada Pod que aloja una instancia de MongoDB mediante el FQDN del Pod, como sigue:
<pod-name>.<replica-set-name>-svc.<namespace>.svc.cluster.local.En una implementación de MongoDB que utiliza múltiples clústeres de Kubernetes y una malla de servicios, el Operador de Kubernetes crea un StatefulSet independiente para cada miembro del set de réplicas de MongoDB en el clúster de Kubernetes. Un malla de servicios permite la comunicación entre los procesos
mongoda través de diferentes clústeres de Kubernetes.El uso de una malla de servicios permite que la implementación de MongoDB en múltiples clústeres de Kubernetes pueda:
Logre la resolución global de nombres de host DNS en clústeres de Kubernetes y establezca conectividad entre ellos. Para cada Pod de implementación de MongoDB en cada clúster de Kubernetes, el Operador de Kubernetes crea un servicio ClusterIP mediante la configuración
spec.duplicateServiceObjects: trueen el recursoMongoDBMultiCluster. Cada proceso tiene un nombre de host definido para el FQDN de este servicio:<pod-name>-svc.<namespace>.svc.cluster.local. Estos nombres de host se resuelven desde DNS a la ClusterIP de un servicio en cada clúster miembro.Establezca comunicación entre Pods en diferentes clústeres de Kubernetes. Como resultado, los nodos del conjunto de réplicas alojados en diferentes clústeres forman un único set de réplicas en estos clústeres.
En una implementación multiclúster de Kubernetes MongoDB sin un service mesh, el Operador de Kubernetes utiliza las siguientes configuraciones de recursos de
MongoDBMultiClusterpara exponer de forma externa todos sus procesos demongod. Esto habilita la resolución DNS de nombres de host entre diferentes clústeres de Kubernetes y establece conectividad entre los Pods que se enrutan a través de las redes que conectan estos clústeres.
Opcional: Instalar Istio
Instale Istio en modo multiprimario en diferentes redes, siguiendo la documentación de Istio. Istio es una malla de servicios que simplifica la resolución DNS y facilita la comunicación entre clústeres de Kubernetes en una implementación de MongoDB con múltiples clústeres de Kubernetes. Si decide usar una malla de servicios, deberá instalarla. Si no puede usar una malla de servicios, omita esta sección y utilice dominios externos, configurando el DNS para habilitar la conectividad externa.
Además, ofrecemos el script de ejemplo `install_istio_separate_network`. Este script se basa en la documentación de Istio y proporciona un ejemplo de instalación que utiliza el modo multi-primary en diferentes redes. No garantizamos el mantenimiento del script con futuras versiones de Istio. Si decide utilizar el script, revise la documentación más reciente de Istio para la instalación de un clúster múltiple y, si es necesario, ajústelo para que coincida con la documentación y su implementación. Si utiliza otra solución de malla de servicios, cree su propio script para configurar redes separadas y facilitar la resolución DNS.
Permitir la conectividad externa a través de dominios externos y zonas DNS
Si no utilizas un servicio mallado, realiza lo siguiente para habilitar la conectividad externa hacia y entre los procesos de mongod y el MongoDB Agent del Ops Manager:
Cuando crees una implementación de MongoDB de clúster múltiple de Kubernetes, usa spec.clusterSpecList.externalAccess.externalDomain configuración para especificar un dominio externo e instruir al Operador de Kubernetes para configurar los nombres de host para
mongodprocesos en el siguiente patrón:<pod-name>.<externalDomain> Nota
Solo puedes especificar dominios externos para nuevas implementaciones. No se pueden cambiar los dominios externos después de configurar una implementación multi-Kubernetes de clúster de MongoDB.
Después de que configures un dominio externo de esta manera, los agentes de MongoDB de Ops Manager y los procesos
mongodutilizan este dominio para conectarse entre sí.Personaliza los servicios externos que el operador de Kubernetes crea para cada pod en el clúster de Kubernetes. Utiliza la configuración global dentro de spec.externalAccess configuraciones y las anulaciones específicas del clúster de Kubernetes en spec.clusterSpecList.externalAccess.externalService configuraciones.
Configure los nombres de host de los Pods en una zona DNS para garantizar que cada Pod de Kubernetes que aloja un proceso
mongodpermita establecer una conexión externa con los demás procesosmongoden una implementación de MongoDB en un clúster de Kubernetes múltiple. Un Pod se considera "expuesto externamente" cuando puede conectarse a un procesomongodutilizando el nombre de host<pod-name>.<externalDomain>en los puertos 27017 (este es el puerto de base de datos predeterminado) y 27018 (este es el puerto de base de datos + 1). También puede ser necesario configurar reglas de firewall para permitir el tráfico TCP en los puertos 27017 y 27018.
Después de completar estos prerrequisitos, podrá implementar un clúster multi-Kubernetes sin un "service mesh".
Verificar conectividad entre clústeres
Siga los pasos de este procedimiento para verificar que los nombres de dominio completos (FQDN)de los servicios sean accesibles en todos los clústeres de Kubernetes.
En este ejemplo, se implementa una aplicación de muestra definida en sample-service.yaml en dos clústeres de Kubernetes.
Crea un namespace en cada clúster.
Crea un namespace en cada uno de los clústeres de Kubernetes para implementar el sample-service.yaml.
kubectl create --context="${CTX_CLUSTER_1}" namespace sample kubectl create --context="${CTX_CLUSTER_2}" namespace sample
Nota
En ciertas soluciones de malla de servicios, es posible que debas anotar o etiquetar el namespace.
Verifica que CLUSTER_1 pueda conectarse a CLUSTER_2.
Implementa el pod en CLUSTER_1 y verifica que puedes acceder a la aplicación de muestra en CLUSTER_2.
kubectl run --context="${CTX_CLUSTER_1}" \ -n sample \ curl --image=radial/busyboxplus:curl \ -i --tty \ curl -sS helloworld2.sample:5000/hello
Deberías ver una salida similar a este ejemplo:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
Verifica que CLUSTER_2 pueda conectarse a CLUSTER_1.
Implementa el pod en CLUSTER_2 y verifica que puedes acceder a la aplicación de muestra en CLUSTER_1.
kubectl run --context="${CTX_CLUSTER_2}" \ -n sample \ curl --image=radial/busyboxplus:curl \ -i --tty \ curl -sS helloworld1.sample:5000/hello
Deberías ver una salida similar a este ejemplo:
Hello version: v1, instance: helloworld-v1-758dd55874-6x4t8
Revisar los requisitos para implementar Ops Manager
Como parte de la Guía de inicio rápido, implementas un recurso de Ops Manager en el clúster central.
Prepárate para conexiones encriptadas por TLS
Si planea proteger su implementación de MongoDB en clústeres de Kubernetes múltiples mediante cifrado TLS, complete las siguientes tareas para habilitar la autenticación interna del clúster y generar certificados TLS para los clústeres miembros y el agente de MongoDB:
Nota
Debe poseer el certificado de la CA y la clave que utilizó para firmar sus certificados TLS.
Genera un certificado TLS para los servicios de Kubernetes.
Utiliza una de las siguientes opciones:
Genera un certificado TLS comodín que cubra los nombres de host de los servicios que el operador de Kubernetes crea para cada Pod en el despliegue.
Si generas certificados wildcard, puedes seguir usando los mismos certificados cuando aumentes el tamaño o rebalancees nodos en los clústeres miembros de Kubernetes, por ejemplo para recuperación ante desastres.
Por ejemplo, agregue el nombre de host con un formato similar al siguiente a la SAN:
*.<namespace>.svc.cluster.local Para cada servicio de Kubernetes que el Operador de Kubernetes genere correspondiente a cada Pod en cada clúster miembro, agregue SANal certificado. En su certificado TLS, el SAN para cada servicio de Kubernetes debe usar el siguiente formato:
<metadata.name>-<member_cluster_index>-<n>-svc.<namespace>.svc.cluster.local donde
nvaría desde0hastaclusterSpecList[member_cluster_index].members - 1.
Genera un certificado TLS para los MongoDB agentes de tu proyecto.
Para el certificado TLS del agente de MongoDB:
El nombre común en el certificado TLS no debe estar vacío.
La Organización y la Unidad Organizativa combinadas en cada certificado TLS deben ser diferentes de la Organización y la Unidad Organizativa en el certificado TLS para los miembros de su conjunto de réplicas.
Para agilizar la creación de certificados TLS para clústeres Kubernetes miembros, ofrecemos el script setup_tls. No garantizamos el mantenimiento del script. Si decide utilizarlo, pruébelo y ajústelo a sus necesidades. El script realiza lo siguiente:
Crea el espacio de nombres
cert-manageren el clúster conectado e instala cert-manager usando Helm en el espacio de nombrescert-manager.Instala una CA local usando mkcert.
Descarga certificados TLS de
downloads.mongodb.comy los concatena con el nombre del archivo CA yca-chain.Crea un ConfigMap que incluye los archivos
ca-chain.Crea un recurso
Issuer, que cert-manager utiliza para generar certificados.Crea un recurso
Certificate, que cert-manager utiliza para crear un objeto clave para los certificados.
Para utilizar el script:
Instale mkcert.
Instala mkcert en la máquina donde planeas ejecutar este script.
Ejecuta el script setup_tls.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/scripts/release/kubectl_mongodb/setup_tls.sh -o setup_tls.sh
La salida incluye:
Un secreto que contiene la CA llamada
ca-key-pair.Un secreto que contiene los certificados de servidor en el nodo central n
clustercert-${resource}-cert.Un ConfigMap que contiene los certificados CA denominados
issuer-ca.
Genera un certificado TLS para los MongoDB agentes de tu proyecto.
Para el certificado TLS del agente de MongoDB:
El nombre común en el certificado TLS no debe estar vacío.
La Organización y la Unidad Organizativa combinadas en cada certificado TLS deben ser diferentes de la Organización y la Unidad Organizativa en el certificado TLS para los miembros de su conjunto de réplicas.
Generar un certificado TLS para nombres de host SAN.
Utiliza una de las siguientes opciones:
Genere un certificado TLS comodín que contenga todos los dominios externos que creó en la SAN. Por ejemplo, agregue los nombres de host similares al siguiente formato a la SAN:
*.cluster-0.example.com, *.cluster-1.example.com Si generas certificados comodín, puedes seguir utilizándolos cuando amplíes o rebalancees nodos en los clústeres miembro de Kubernetes, por ejemplo para recuperación ante desastres.
Genere un certificado TLS para cada nombre de host miembro del conjunto de réplicas de MongoDB en la SAN. Por ejemplo, agregue los nombres de host similares a los siguientes a la SAN:
my-replica-set-0-0.cluster-0.example.com, my-replica-set-0-1.cluster-0.example.com, my-replica-set-1-0.cluster-1.example.com, my-replica-set-1-1.cluster-1.example.com Si genera un certificado TLS individual que contenga todos los nombres de host específicos, deberá crear un nuevo certificado cada vez que aumente la escala o reequilibre los nodos en los clústeres miembros de Kubernetes, por ejemplo, para la recuperación ante desastres.
Genera un certificado TLS para los MongoDB agentes de tu proyecto.
Para el certificado TLS del agente de MongoDB:
El nombre común en el certificado TLS no debe estar vacío.
La Organización y la Unidad Organizativa combinadas en cada certificado TLS deben ser diferentes de la Organización y la Unidad Organizativa en el certificado TLS para los miembros de su conjunto de réplicas.
Importante
El operador de Kubernetes utiliza secretos de kubernetes.io/tls para almacenar certificados TLS y claves privadas para los recursos de Ops Manager y MongoDB. A partir de la versión 1.17.0 del operador de Kubernetes, este no admite archivos PEM concatenados almacenados como secretos opacos.
Elija GitOps o el plugin kubectl de MongoDB
Puede elegir crear y mantener los archivos de recursos necesarios para la implementación de recursos en MongoDBMultiCluster en un entorno GitOps.
Si utiliza un flujo de trabajo GitOps, no podrá usar el complemento kubectl mongodb, que configura automáticamente el control de acceso basado en roles (RBAC) y crea el archivo kubeconfig que permite que el clúster central se comunique con sus clústeres miembros. En su lugar, deberá configurar manualmente o crear su propia automatización para configurar los archivos RBAC y kubeconfig siguiendo el procedimiento y los ejemplos de Configurar recursos para GitOps.
Las siguientes secciones de requisitos previos describen cómo instalar el complemento kubectl para MongoDB si no utiliza GitOps o cómo configurar los recursos para GitOps si lo utiliza.
Instala el plugin MongoDB kubectl
Usa el plugin kubectl mongodb para:
Nota
Si utiliza GitOps, no puede usar el complemento kubectl mongodb. En su lugar, siga el procedimiento descrito en Configurar recursos para GitOps.
Para instalar el plugin kubectl mongodb:
Descarga la versión deseada del paquete del operador de Kubernetes.
Descargue la versión del paquete del operador de Kubernetes que desee desde la página de versiones del repositorio de controladores de MongoDB para el operador de Kubernetes.
El nombre del paquete utiliza este patrón: kubectl-mongodb_{{ .Version }}_{{ .Os }}_{{ .Arch }}.tar.gz.
Utilice uno de los siguientes paquetes:
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
Localice el archivo binario del plugin kubectl mongodb y cópielo al destino deseado.
Encuentra el binario kubectl-mongodb en el directorio desenpaquetado y muévelo a su destino deseado, dentro del PATH para el usuario del Operador de Kubernetes, como se muestra en el siguiente ejemplo:
mv kubectl-mongodb /usr/local/bin/kubectl-mongodb
Ahora puedes ejecutar el plugin kubectl mongodb usando los siguientes comandos:
kubectl mongodb multicluster setup kubectl mongodb multicluster recover
Para obtener más información sobre los flags compatibles, consulte la Referencia de MongoDB kubectl plugin.
Configurar recursos para GitOps
Si utiliza un flujo de trabajo GitOps, no podrá usar el complemento kubectl mongodb para configurar automáticamente el control de acceso basado en roles (RBAC) ni el archivo kubeconfig que permite que el clúster central se comunique con sus clústeres miembros. En su lugar, deberá configurar y aplicar manualmente los siguientes archivos de recursos o crear su propia automatización basándose en la información que se detalla a continuación.
Nota
Para saber cómo el complemento kubectl mongodb automatiza los siguientes pasos, consulte el código fuente del complemento en el repositorio del operador de MongoDB Kubernetes.
Para configurar RBAC y el kubeconfig para GitOps:
Crear y aplicar recursos RBAC a cada clúster.
Utilice estos ejemplos de recursos RBAC para crear los suyos propios. Para obtener más información sobre estos recursos RBAC, consulte la sección "Comprender los roles y las vinculaciones de roles de Kubernetes".
Para aplicarlas a tus clústeres centrales y miembros con GitOps, puedes usar una herramienta como Argo CD.
Crea y aplica el archivo ConfigMap.
El operador de Kubernetes realiza un seguimiento de sus clústeres miembros mediante un archivo ConfigMap. Copie, modifique y aplique el siguiente ejemplo de ConfigMap:
apiVersion: v1 kind: ConfigMap data: cluster1: "" cluster2: "" metadata: namespace: <namespace> name: mongodb-kubernetes-operator-member-list labels: multi-cluster: "true"
Configura el secreto kubeconfig para el Operador de Kubernetes.
El operador de Kubernetes, que se ejecuta en el clúster central, se comunica con los pods de los clústeres miembros a través de la API de Kubernetes. Para que esto funcione, el operador de Kubernetes necesita un archivo kubeconfig que contenga los tokens de las cuentas de servicio de los clústeres miembros. Cree este archivo kubeconfig siguiendo estos pasos:
Obtenga una lista de las cuentas de servicio configuradas en el espacio de nombres del operador de Kubernetes. Por ejemplo, si eligió usar el espacio de nombres predeterminado
mongodb, puede obtener las cuentas de servicio usando el siguiente comando:kubectl get serviceaccounts -n mongodb Obtén el secreto para cada cuenta de servicio que pertenezca a un clúster de miembros.
kubectl get secret <service-account-name> -n mongodb -o yaml En cada secreto de cuenta de servicio, copie el certificado CA y el token. Por ejemplo, copie
<ca_certificate>y<token>del secreto, como se muestra en el siguiente ejemplo:apiVersion: v1 kind: Secret metadata: name: my-service-account namespace: mongodb data: ca.crt: <ca_certificate> token: <token> Copia el siguiente ejemplo
kubeconfigpara el clúster central y reemplaza los marcadores de posición con las<ca_certificate>y<token>que copiaste de los secretos de cuenta de servicio ejecutando los comandos que se indican a continuación.apiVersion: v1 clusters: - cluster: certificate-authority: server: https:// name: kind-e2e-cluster-1 - cluster: certificate-authority: server: https:// name: kind-e2e-cluster-2 contexts: - context: cluster: kind-e2e-cluster-1 namespace: mongodb user: kind-e2e-cluster-1 name: kind-e2e-cluster-1 - context: cluster: kind-e2e-cluster-2 namespace: mongodb user: kind-e2e-cluster-2 name: kind-e2e-cluster-2 kind: Config users: - name: kind-e2e-cluster-1 user: token: - name: kind-e2e-cluster-2 user: token: Completa los siguientes comandos
kubectlcon los valores correctos y ejecútalos para actualizar tu archivo de ejemplokubeconfig.kubectl config --kubeconfig=kubeconfig set-cluster kind-e2e-cluster-1 --certificate-authority=<cluster-1-ca.crt> kubectl config --kubeconfig=kubeconfig set-cluster kind-e2e-cluster-2 --certificate-authority=<cluster-2-ca.crt> kubectl config --kubeconfig=kubeconfig set-credentials kind-e2e-cluster-1 --token=<cluster-1-token> kubectl config --kubeconfig=kubeconfig set-credentials kind-e2e-cluster-2 --token=<cluster-2-token> Cree un secreto en el clúster central que montará en el operador de Kubernetes, tal como se ilustra en el gráfico de Helm de referencia. Por ejemplo:
kubectl --context="${CTX_CENTRAL_CLUSTER}" -n <operator-namespace> create secret --from-file=kubeconfig=<path-to-kubeconfig-file> <kubeconfig-secret-name>