Importante
Esta sección es solo para implementaciones de un solo clúster de Kubernetes. Para implementaciones de MongoDB en múltiples clústeres de Kubernetes, consulte Arquitectura, capacidades y limitaciones.
Puede utilizar el Operador de Kubernetes y Cloud Manager u Ops Manager para implementar recursos de bases de datos MongoDB en un clúster de Kubernetes. Puedes utilizar un Cloud Manager o Ops Manager existente, o desplegar Ops Manager en Kubernetes para gestionar tus bases de datos.
El operador de Kubernetes utiliza Cloud Manager u Ops Manager para gestionar los siguientes recursos personalizados de la base de datos MongoDB:
MongoDBMongoDBUser
Tu Las especificaciones derecursos personalizados definen estos recursos en el Operador de Kubernetes. El Kubernetes operador supervisa estos recursos. Cuando actualices la especificación del recurso, el Kubernetes Operator empuja estos cambios a Cloud Manager o Ops Manager, los cuales modifican la configuración de la implementación de MongoDB.
La MongoDB definición de recurso personalizado
El operador de Kubernetes gestiona las implementaciones de la base de datos MongoDB definidas por recursos personalizados de MongoDB.
La especificación de recurso personalizado base de datos MongoDB define los siguientes tipos de recursos personalizados de la base de datos MongoDB:
StandaloneReplicaSetShardedCluster
El siguiente diagrama ilustra la composición de cada tipo de recurso de MongoDB en el Operador de Kubernetes.
Advertencia
El operador de Kubernetes no es compatible con nodos árbitros.
Autónomo
Para el Standalone tipo del recurso de base de datos MongoDB, el operador de Kubernetes implementa un conjunto de réplicas con un solo miembro en el clúster de Kubernetes como un StatefulSet.
El Operador de Kubernetes crea el StatefulSet, que contiene la especificación del Pod con el número de Pods a crear. El operador de Kubernetes depende del controlador StatefulSet de Kubernetes para crear un pod para esta instancia autónomo de la base de datos de MongoDB.
Importante
En Kubernetes, un recurso Standalone equivale a un recurso ReplicaSet con un solo miembro. Recomendamos implementar un recurso ReplicaSet con un solo miembro en lugar de un recurso Standalone, ya que un conjunto de réplicas permite agregarle miembros en el futuro.
Set de réplicas
Para el tipo ReplicaSet del recurso MongoDB, el operador de Kubernetes implementa un set de réplicas en el clúster de Kubernetes como un StatefulSet, con un número de miembros igual al valor de spec.members.
El operador de Kubernetes se basa en el controlador StatefulSet de Kubernetes para crear un pod en el StatefulSet para cada miembro del conjunto de réplicas.
Cada pod en el StatefulSet ejecuta una instancia del agente MongoDB.
Clúster fragmentado
El tipo ShardedCluster del recurso de MongoDB consiste en uno o más Servidores de Configuración, mongos instancias y nodos de particiones.
Para el recurso ShardedCluster, el Operador de Kubernetes implementa:
Un StatefulSet para todos los servidores de configuración
Un único StatefulSet para todas las instancias de
mongosUn StatefulSet para cada nodo de partición
El Operador de Kubernetes se basa en el Controlador StatefulSet de Kubernetes para crear un Pod en cada uno de los StatefulSets creados para el clúster sharded.
Conciliando el recurso personalizado MongoDB
Cuando aplicas una especificación de recurso personalizado de MongoDB, el operador de Kubernetes implementa cada recurso como un StatefulSet en el clúster de Kubernetes.
El Operador de Kubernetes:
Supervisa la especificación del recurso personalizado y el ConfigMap o los secretos asociados almacenados en tu herramienta de almacenamiento de secretos.
Valida los cambios cuando cambia el archivo de especificaciones, el ConfigMap o el secreto.
Realiza las actualizaciones adecuadas en los recursos de la base de datos de MongoDB en el clúster de Kubernetes.
Envía los cambios a Cloud Manager u Ops Manager, que realiza cambios en la configuración de la implementación de MongoDB.
Diagrama de una conciliación de un conjunto de réplicas
El siguiente diagrama describe cómo se comporta el Operador Kubernetes si realiza cambios en un set de réplicas:
MongoDBespecificaciones de recursos personalizadasSecretos asociados almacenados en tu herramienta de almacenamiento de secretos
Diagrama de una reconciliación de clúster fragmentado
El siguiente diagrama describe cómo se comporta el operador de Kubernetes si realiza cambios en un clúster fragmentado:
MongoDBespecificaciones de recursos personalizadasSecretos asociados almacenados en tu herramienta de almacenamiento de secretos
Flujo de trabajo de conciliación
Cuando creas o modificas una especificación de recurso de MongoDB, o cuando realizas cambios en una ConfigMap o secreto asociados, el operador de Kubernetes realiza las siguientes acciones para conciliar los cambios:
Lee la configuración requerida de la organización y del proyecto desde el ConfigMap que se utilizó para crear o conectar a un proyecto en el operador de Kubernetes.
Si modificas tu especificación de recursos, el operador de Kubernetes identifica que se realizó el cambio y revisa la especificación de la ConfigMap especificada en
spec.opsManager.configMapRef.name.Nota
Cuando configuras el Operador de Kubernetes para recursos de MongoDB, creas un ConfigMap para conectar o crear tu proyecto de Cloud Manager u Ops Manager. El Agente de MongoDB utiliza este ConfigMap para iniciar o realizar cambios en la implementación del recurso MongoDB.
Lee la configuración de autenticación para Cloud Manager o Ops Manager desde el secreto especificado en:
spec.credentialsen la especificación del recurso
Este secreto almacena las claves de API de Cloud Manager o las claves de API de Ops Manager necesarias para que el operador de Kubernetes se autentique en Cloud Manager o Ops Manager.
Nota
Cuando configuras el Operador de Kubernetes para los recursos de MongoDB, ya sea crea este secreto en Kubernetes o almacenas este secreto en tu herramienta de almacenamiento de secretos.
El Operador de Kubernetes se conecta a Cloud Manager u Ops Manager y realiza las siguientes acciones:
Lee la organización del campo
orgIden el ConfigMap. Debe proporcionar un valor en el campoorgId.Lee un nombre de proyecto especificado en el campo
projectNameen el ConfigMap o, si no se especificó un valor para este campo opcional, crea este proyecto en Cloud Manager u Ops Manager si no existe.Comprueba que el
<project-id>-group-secretsecreto creado por el operador de Kubernetes para el agente de MongoDB existe. El operador de Kubernetes lee el secreto desde la herramienta de almacenamiento de secretos o lo crea con las claves de API de Ops Manager o Cloud Manager.Se registra como observador del ConfigMap y de este secreto. Esto permite que el operador de Kubernetes reaccione a los cambios que realice en el ConfigMap o en el secreto.
El operador de Kubernetes verifica cualquier certificado TLS y X.509.
Si TLS está habilitado para un set de réplicas, el operador de Kubernetes buscará los certificados proporcionados en el secreto
<prefix>-<resource-name>-certo en tu herramienta de almacenamiento secreto.Si TLS está habilitado para un clúster particionado, el Operador de Kubernetes busca certificados en estos secretos:
<prefix>-<resource-name>-x-certpara cada nodo de la partición.<prefix>-<resource-name>-config-certpara todos los servidores de configuración.<prefix>-<resource-name>-mongos-certpara todas lasmongosinstancias.
Si X.509 o la autenticación interna con X.509 y TLS están habilitadas, el operador de Kubernetes verifica que sus certificados contengan la configuración requerida.
El Operador de Kubernetes localiza y actualiza los StatefulSets necesarios o crea nuevos StatefulSets si no existen. El número de StatefulSets depende del tipo de recurso de MongoDB.
Para los recursos
ReplicaSetoStandalone, el operador de Kubernetes crea un único StatefulSet.Para un recurso
ShardedCluster, el operador de Kubernetes crea:Un StatefulSet para todos los servidores de configuración.
Un StatefulSet para todas las
mongosinstancias.Un StatefulSet para cada miembro del fragmento.
En este punto, cada Pod ejecuta al menos una instancia de MongoDB Agent, pero aún no contiene instancias de
mongod.Cada instancia del Agente MongoDB comienza a sondear Cloud Manager o Ops Manager para recibir la configuración de automatización de MongoDB.
Nota
Contenedores no estáticos: Cuando el MongoDB Agent recibe la configuración por primera vez, descarga los binarios de MongoDB con la versión especificada en
spec.versionde Internet, o desde Ops Manager si el MongoDB Agent está configurado en modo local.Contenedores estáticos: Los contenedores estáticos no descargan binarios durante la ejecución. Para obtener más información, consulta Contenedores estáticos (Vista previa pública).
Después de que el MongoDB Agent recibe la configuración de automatización, inicia una instancia
mongoden el Pod correspondiente.Para cada pod de cada StatefulSet que crea el recurso personalizado de MongoDB, excepto StatefulSets, el operador
mongosde Kubernetes genera una notificación de volumen persistente. Puede anular este comportamiento configurandospec.persistentafalseen la especificación del recurso.
El Operador Kubernetes actualiza la configuración de automatización que recibió del MongoDB Agent con los cambios de las especificaciones y la envía a Cloud Manager u Ops Manager.
Cada agente de MongoDB para cada pod sondea nuevamente a Cloud Manager o Ops Manager y recibe la configuración de automatización actualizada.
Si cambia algún campo en la especificación, el operador de Kubernetes realiza una actualización continua de los StatefulSets para iniciar nuevos Pods que coincidan con la nueva especificación.
El operador de Kubernetes espera que cada MongoDB Agent informe que ha alcanzado el estado de listo.
Nota
Si cambia la configuración de seguridad de un recurso de base de datos o reduce la escala de un StatefulSet existente, el operador de Kubernetes ejecuta el paso 6 antes de ejecutar el 5 paso.
El operador de Kubernetes actualiza los servicios de Kubernetes o, para un nuevo recurso de MongoDB, crea los servicios necesarios para cada nuevo StatefulSet.
Para el ServiceType
ClusterIP, el operador de Kubernetes defineClusterIPaNoney realiza estas acciones:Crea este servicio si no existe.
Para recursos de
ReplicaSetoStandalone, el Operador de Kubernetes nombra el servicio con el nombre del recurso personalizado, con-svcagregado al mismo.Para un recurso
ShardedCluster, el Operador Kubernetes utiliza estas convenciones para los nombres:Para instancias de
mongos, el operador de Kubernetes utiliza el nombre especificado enspec.serviceo el nombre del recurso con-svcañadido.Para los servidores de configuración, el Operador Kubernetes utiliza el nombre del recurso con
-csañadido al final.Para cada partición, el Operador de Kubernetes utiliza el nombre del recurso con
-shañadido al final.
Para el puerto, el operador de Kubernetes utiliza el puerto predeterminado 27017 o el .net.port especificado
spec.additionalMongodConfigen.
Conciliando el recurso personalizado MongoDBUser
Si el método de autenticación de usuario está configurado como SCRAM, la Especificación de recurso de usuario de MongoDB depende de la herramienta de almacenamiento seguro que almacena las credenciales del usuario. Si utilizas un secreto de Kubernetes, debes especificar el secreto en la configuración spec.passwordSecretKeyRef de la especificación de recursos MongoDBUser.
El operador de Kubernetes supervisa el secreto para detectar cambios. Si modifica la configuración del secreto, el operador de Kubernetes concilia los cambios. Realiza las siguientes acciones:
Determina el recurso del usuario de MongoDB basado en el valor especificado en la configuración
spec.MongoDBResourceRef.nameen la Especificación de recursos de usuarios de MongoDB.Se conecta a Cloud Manager u Ops Manager:
Lee la organización desde
orgIden ConfigMap.Lee el nombre de un proyecto desde
projectNameen ConfigMap o crea este proyecto en Cloud Manager u Ops Manager si no existe.Verifica que el
<project-id>-group-secretcreado por el Operador de Kubernetes para el MongoDB Agent exista. El Operador de Kubernetes lee el secreto de tu herramienta de almacenamiento de secretos, o lo crea con claves de API de Ops Manager o claves de API de Cloud Manager.
Actualiza las credenciales del usuario en Cloud Manager u Ops Manager, o crea un nuevo usuario si no existe.
Si el método de autenticación de usuario es SCRAM, lee la contraseña del secreto.
Lee el nombre de usuario. Si el nombre de usuario ha cambiado, el Operador de Kubernetes remueve el nombre anterior y agrega uno nuevo.
Asegura que el usuario exista en Cloud Manager o Ops Manager.
El siguiente diagrama describe cómo se comporta el operador de Kubernetes si realiza cambios en el secreto del usuario o en la especificación de recursos de usuario de MongoDB.