Utilice este procedimiento para implementar un conjunto de réplicas en una implementación de MongoDB de un clúster de Kubernetes múltiple sin utilizar una malla de servicio para establecer conectividad externa entre los clústeres de Kubernetes miembro.
Como alternativa al uso de este procedimiento, puede utilizar el Inicio rápido de múltiples clústeres de Kubernetes, que utiliza una malla de servicios.
Antes de comenzar
Obtenga información sobre las implementaciones de múltiples clústeres de Kubernetes.
Revise la lista de servicios y herramientas de múltiples clústeres de Kubernetes.
Completa los prerrequisitos, pero no configure un service mesh. En su lugar, decida si necesita una malla de servicios. Si elige implementar sin una malla de servicios, utilice dominios externos y configure DNS para habilitar la conectividad externa.
Como parte de completar los prerrequisitos, generar certificados válidos para CifradoTLS. Para obtener más información, consulte Preparación para conexiones cifradas con TLS.
Implementar los recursos de Ops Manager.
Instale el operador de Kubernetes en una implementación de MongoDB con varios clústeres de Kubernetes. Consulte la Guía de inicio rápido para varios clústeres de Kubernetes.
Overview
En una implementación de MongoDB de un clúster de Kubernetes múltiple sin una malla de servicio, utilice lo siguiente
MongoDBMultiCluster configuración de recursos:
Utilice la configuración spec.clusterSpecList.externalAccess.externalService para que el operador de Kubernetes cree un servicio externo y, como parte de su configuración predeterminada, configure un balanceador de carga con la configuración predeterminada. Configure el balanceador de carga para que actúe como proxy TCP con transferencia TLS (sin terminación TLS en el balanceador de carga).
Personalice los servicios externos que el operador de Kubernetes crea para cada pod del clúster de Kubernetes. Use la configuración global "all-clusters" en la configuración spec.externalAccess y las anulaciones específicas del clúster de Kubernetes en la configuración spec.clusterSpecList.externalAccess.externalService.
Especifique anotaciones específicas del proveedor de nube para el balanceador de carga en spec.clusterSpecList.externalAccess.externalService.annotations para cada clúster de Kubernetes.
Especifique un dominio externo en spec.clusterSpecList.externalAccess.externalDomain. Esto permite que el operador de Kubernetes registre
mongodprocesos mediante el sufijo de dominio. Esto habilita conexiones externas a losmongodprocesos en una implementación de MongoDB con varios clústeres de Kubernetes.
Implementar un MongoDBMultiCluster recurso sin una malla de servicio
El siguiente procedimiento establece conexiones cifradas TLSentre los hosts de MongoDB en un set de réplicas y entre aplicaciones cliente y implementaciones de MongoDB.
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>
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
Copia y pega el recurso de muestra.
Copie el archivo YAML del conjunto de réplicas de muestra y péguelo en un nuevo archivo de texto.
Cambie la configuración del archivo para que coincida con la configuración del conjunto de réplicas deseada.
1 # Provides statefulSet override per cluster 2 3 apiVersion: mongodb.com/v1 4 kind: MongoDBMultiCluster 5 metadata: 6 name: multi-replica-set 7 spec: 8 version: 6.0.0-ent 9 type: ReplicaSet 10 credentials: my-credentials 11 opsManager: 12 configMapRef: 13 name: my-project 14 externalAccess: 15 externalService: 16 annotations: 17 # Global cloud-specific annotations added to external services in all clusters 18 spec: 19 # ServiceSpec attributes to override in external services in all clusters 20 clusterSpecList: 21 - clusterName: cluster1.example.com 22 members: 2 23 externalAccess: 24 # Domain suffix that mongod processes will use in cluster1 25 externalDomain: cluster1.example.com 26 externalService: 27 annotations: 28 # Cloud-specific annotations for external services 29 spec: 30 # ServiceSpec attributes to override if necessary 31 - clusterName: cluster2.example.com 32 members: 1 33 externalAccess: 34 # Domain suffix that mongod processes will use in cluster2 35 externalDomain: cluster2.example.com 36 externalService: 37 annotations: 38 # Cloud-specific annotations for external services 39 spec: 40 # ServiceSpec attributes to override if necessary 41 - clusterName: cluster3.example.com 42 members: 1 43 externalAccess: 44 # Domain suffix that mongod processes will use in cluster3 45 externalDomain: cluster3.example.com 46 externalService: 47 annotations: 48 # Cloud-specific annotations for external services 49 spec: 50 # ServiceSpec attributes to override if necessary 51 52 ...
Definir la configuración de conectividad externa.
Especifique valores globales que afecten a todos los clústeres en una implementación de MongoDB de clúster multi-Kubernetes mediante la configuración spec.externalAccess y anulaciones específicas del clúster mediante la configuración spec.clusterSpecList.externalAccess.externalService.
Al proporcionar esta configuración en la especificación del recurso MongoDBMultiCluster, el operador de Kubernetes crea servicios externos para cada pod en todos los clústeres de Kubernetes. Estos servicios se utilizan para establecer la conectividad externa con todos los procesos mongod de la implementación.
Defina un dominio externo para cada clúster miembro de Kubernetes.
Defina un dominio externo para cada clúster miembro utilizando la configuración spec.clusterSpecList.externalAccess.externalDomain.
Como resultado, el operador de Kubernetes registra todos los procesos mongod en el clúster miembro de Kubernetes bajo un nombre de host de acuerdo con la siguiente convención:
<pod-name>.<externalDomain>
Por ejemplo, un proceso mongod puede tener el siguiente nombre de host: my-replica-set-0-0.cluster-1.example.com.
Cambie la configuración a sus valores preferidos.
Clave | Tipo | Descripción | Ejemplo |
|---|---|---|---|
string | Etiqueta para el recurso Los nombres de recursos deben tener 44 caracteres o menos. Véase también |
| |
string | Versión de MongoDB que este recurso El formato debe ser IMPORTANTE: Asegúrese de elegir una versión compatible de MongoDB Server. Las versiones compatibles varían según la imagen base que utilice el recurso de base de datos MongoDB. Para obtener más información sobre el versionado de MongoDB, consulta versionado de MongoDB en el manual de MongoDB. |
| |
string | Nombre del ConfigMap con la configuración de conexión de Ops Manager. El parámetro es un alias de este parámetro y puede utilizarse en su Este valor debe existir en el mismo espacio de nombres que el recurso que quieres crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio en el ConfigMap y reconcilia el estado del recurso |
| |
spec.clusterSpecList.clusterName | string | Nombre del clúster en el recurso |
|
spec.clusterSpecList.members | entero | El número de miembros en este grupo. |
|
spec.clusterSpecList.statefulSet.spec | Colección | Opcional. Proporciona la configuración para la anulación de StatefulSet para cada uno de los StatefulSets del clúster en una implementación de MongoDB con clústeres multi-Kubernetes. Si se especifica a nivel de | Vea el ejemplo. |
spec.clusterSpecList.statefulSet.spec.volumeClaimTemplates.spec | Colección | Opcional. Si se especifica, proporciona una anulación por clúster del tamaño de almacenamiento predeterminado de las plantillas volumeClaimtemplates para el volumen persistente que almacena los datos. | Vea el ejemplo. |
string | Nombre del secreto que creó como credenciales de autenticación de API de Ops Manager para que el operador de Kubernetes se comunique con Ops Manager. El objeto secreto de Kubernetes de Ops Manager que contiene las credenciales debe existir en el mismo espacio de nombres que el recurso que desea crear. IMPORTANTE: El operador de Kubernetes rastrea cualquier cambio realizado en el Secreto y reconcilia el estado del recurso |
| |
string | Tipo de recurso |
|
Agregue cualquier configuración adicional aceptada para una MongoDBMultiCluster implementación de recursos.
También puede agregar cualquier configuración opcional a la especificación del objeto. Consulte la Especificación de recursos de clústeres multi-Kubernetes.
Guarde este archivo de configuración del conjunto de réplicas con una .yaml extensión.
Inicie la implementación de su conjunto de réplicas.
En cualquier directorio, invoque el siguiente comando de Kubernetes para crear su conjunto de réplicas:
kubectl apply -f <replica-set-conf>.yaml
Verificar la conectividad externa para cada clúster miembro.
Verifique el estado de los servicios externos en todos los clústeres miembros:
kubectl get services Kubernetes debe devolver un servicio externo creado para cada pod del conjunto de réplicas en todos los clústeres miembros.
Verifique que cada servicio externo esté expuesto externamente y sea accesible. Ejecute un comando similar al siguiente ejemplo:
mongosh mongodb://my-replica-set-0-0.cluster-0.example.com:27017 \ -tls -tlsCAFile "issuer-ca.pem" Conectarse a
my-replica-set-0-0.cluster-0.example.com:27017debe dirigir el tráfico del cliente a un servicio externo llamadomy-replica-set-0-0-svc-external, que, a su vez, dirige el tráfico al procesomongod.Configure su zona DNS para que el dominio externo especificado apunte a los servicios externos correspondientes. Esta configuración depende de su entorno o del proveedor de nube que utilice.
Realice un seguimiento del estado de la implementación de MongoDB de su clúster multi-Kubernetes.
Para comprobar el estado de su recurso MongoDBMultiCluster, utilice el siguiente comando en el clúster del operador:
kubectl get mdbmc <resource-name> -o yaml -w
Con el -w indicador (observación) activado, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el Running estado. Para obtener más información sobre los estados de implementación de recursos, consulte Solucionar problemas del operador de Kubernetes.