Importante
Esta sección es solo para implementaciones de un solo clúster de Kubernetes. Para implementaciones de MongoDB con varios clústeres de Kubernetes, consulte Arquitectura, capacidades y limitaciones.
Puede usar Kubernetes Operator y Cloud Manager u Ops Manager para implementar recursos de bases de datos MongoDB en un clúster de Kubernetes. Puede usar un Cloud Manager u Ops Manager existente, o implementar Ops Manager en Kubernetes para administrar sus bases de datos.
El operador de Kubernetes utiliza Cloud Manager o Ops Manager para administrar los siguientes recursos personalizados de la base de datos MongoDB:
MongoDBMongoDBUser
Su recurso personalizado Las especificaciones definen estos recursos en el operador de Kubernetes. Este los supervisa. Al actualizar la especificación del recurso, el operador de Kubernetes envía estos cambios a Cloud Manager u Ops Manager, lo que modifica la configuración de la implementación de MongoDB.
La MongoDB definición de recurso personalizado
El operador de Kubernetes administra las implementaciones de bases de datos MongoDB que están definidas por recursos personalizados de MongoDB.
La especificación de recursos personalizados de la 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 MongoDB en el operador de Kubernetes.
Advertencia
El operador de Kubernetes no admite 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 y el número de pods que se crearán. El operador de Kubernetes se basa en el controlador StatefulSet de Kubernetes para crear un pod para esta instancia independiente de la base de datos 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 ReplicaSet tipo del recurso MongoDB, el operador de Kubernetes implementa un conjunto de réplicas en el clúster de Kubernetes como un StatefulSet, con una cantidad de miembros igual al valor spec.members de.
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 ShardedCluster tipo del recurso MongoDB consta de uno o más servidores de configuración, instancias y miembros demongos fragmentos.
Para el recurso ShardedCluster, el operador de Kubernetes implementa:
Un conjunto con estado para todos los servidores de configuración
Un StatefulSet para todas las
mongosinstanciasUn 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 fragmentado.
Conciliación del MongoDB recurso personalizado
Cuando se aplica 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:
Observa la especificación del recurso personalizado y el ConfigMap asociado o los secretos almacenados en su herramienta de almacenamiento de secretos.
Valida los cambios cuando el archivo de especificación, el ConfigMap o el secreto cambian.
Realiza las actualizaciones adecuadas a los recursos de la base de datos MongoDB en el clúster de Kubernetes.
Envía los cambios a Cloud Manager o Ops Manager, que realizan 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 de Kubernetes si realiza cambios en un conjunto de réplicas:
MongoDBespecificaciones de recursos personalizadosSecretos 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 personalizadosSecretos asociados almacenados en tu herramienta de almacenamiento de secretos
Flujo de trabajo de conciliación
Cuando crea o cambia una especificación de recurso de MongoDB, o cuando realiza cambios en un ConfigMap o secreto asociado, el operador de Kubernetes realiza las siguientes acciones para conciliar los cambios:
Lee la configuración de proyecto y organización requerida del ConfigMap que utilizó para crear o conectarse 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
Al configurar el operador de Kubernetes para recursos de MongoDB, se crea un ConfigMap para conectar o crear el proyecto de Cloud Manager u Ops Manager. El agente de MongoDB usa este ConfigMap para iniciar o modificar la implementación del recurso de MongoDB.
Lee la configuración de autenticación para Cloud Manager o Ops Manager desde el secreto especificado en:
spec.credentialsen la especificación de recursos
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 configura el operador de Kubernetes para los recursos de MongoDB,crea este secreto en Kubernetes o lo almacena en su 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 ConfigMap. Debe proporcionar un valor en el campoorgId.Lee un nombre de proyecto especificado en el campo
projectNameen ConfigMap o, si no especificó un valor para este campo opcional, crea este proyecto en Cloud Manager o 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 todos los certificados TLS y X..509
Si TLS está habilitado para un conjunto de réplicas, el operador de Kubernetes busca certificados proporcionados en el
<prefix>-<resource-name>-certsecreto o en su herramienta de almacenamiento de secretos.Si TLS está habilitado para un clúster fragmentado, el operador de Kubernetes busca certificados en estos secretos:
<prefix>-<resource-name>-x-certpara cada miembro del fragmento.<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. La cantidad 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
mongodinstancias.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 Agente MongoDB recibe la configuración por primera vez, descarga los binarios de MongoDB con la versión especificada en
spec.versiondesde Internet o desde Ops Manager si el Agente MongoDB 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).
Una vez que el agente MongoDB recibe la configuración de automatización, inicia una instancia en el pod
mongodcorrespondiente.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 de Kubernetes actualiza la configuración de automatización que recibió del agente MongoDB con los cambios de las especificaciones y la envía a Cloud Manager o 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 a que cada agente de MongoDB informe que alcanzó el estado 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,
ClusterIPel operador de Kubernetes estableceClusterIPenNoney 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 de Kubernetes utiliza estas convenciones de nomenclatura:Para
mongosinstancias, el operador de Kubernetes usa el nombre especificado enspec.serviceo el nombre del recurso con-svcagregado.Para los servidores de configuración, el operador de Kubernetes usa el nombre del recurso con
-csagregado.Para cada fragmento, el operador de Kubernetes utiliza el nombre del recurso con
-shagregado.
Para el puerto, el operador de Kubernetes utiliza el puerto predeterminado 27017 o el .net.port especificado
spec.additionalMongodConfigen.
Conciliación del MongoDBUser recurso personalizado
Si el método de autenticación de usuario está configurado como SCRAM, la Especificación de Recursos de Usuario de MongoDB depende de la herramienta de almacenamiento de secretos que almacena las credenciales del usuario. Si utiliza un secreto de Kubernetes,especifíquelo en spec.passwordSecretKeyRef la MongoDBUser configuración de la especificación de recursos.
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 según el valor especificado en la
spec.MongoDBResourceRef.nameconfiguración en la Especificación de recursos de usuario de MongoDB.Se conecta a Cloud Manager o 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 o Ops Manager si no existe.Comprueba que el creado por el operador de Kubernetes para el agente de MongoDB existe. El operador de Kubernetes lee el secreto desde su herramienta de almacenamiento de secretos o lo crea con las claves
<project-id>-group-secretde API de Ops Manager o Cloud Manager.
Actualiza las credenciales del usuario en Cloud Manager o Ops Manager, o crea un nuevo usuario si no existe.
Si el método de autenticación del 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 elimina el nombre antiguo y añade 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.