Docs Menu
Docs Home
/
Enterprise Kubernetes Operator
/

Arquitectura de bases de datos MongoDB en Kubernetes

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:

  • MongoDB

  • MongoDBUser

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.

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:

  • Standalone

  • ReplicaSet

  • ShardedCluster

El siguiente diagrama ilustra la composición de cada tipo de recurso MongoDB en el operador de Kubernetes.

Diagrama que muestra la arquitectura de alto nivel de los recursos de MongoDB en el MongoDB Enterprise Kubernetes Operator
haga clic para ampliar

Advertencia

El operador de Kubernetes no admite nodos árbitros.

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.

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.

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 mongos instancias

  • Un 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.

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.

El siguiente diagrama describe cómo se comporta el operador de Kubernetes si realiza cambios en un conjunto de réplicas:

Diagrama que describe cómo el operador Kubernetes de MongoDB Enterprise realiza cambios en la definición de recurso personalizado de MongoDB para un conjunto de réplicas
haga clic para ampliar

El siguiente diagrama describe cómo se comporta el operador de Kubernetes si realiza cambios en un clúster fragmentado:

Diagrama que describe cómo el operador de Kubernetes de MongoDB Enterprise realiza cambios en la definición de recurso personalizado de MongoDB para un clúster fragmentado
haga clic para ampliar

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:

  1. 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.

  2. Lee la configuración de autenticación para Cloud Manager o Ops Manager desde el secreto especificado en:

    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.

  3. El Operador de Kubernetes se conecta a Cloud Manager u Ops Manager y realiza las siguientes acciones:

    • Lee la organización del campo orgId en ConfigMap. Debe proporcionar un valor en el campo orgId.

    • Lee un nombre de proyecto especificado en el campo projectName en 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-secret secreto 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.

  4. 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>-cert secreto 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-cert para cada miembro del fragmento.

      • <prefix>-<resource-name>-config-cert para todos los servidores de configuración.

      • <prefix>-<resource-name>-mongos-cert para todas las mongos instancias.

      • Tu herramienta de almacenamiento secreta.

    • 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.

  5. 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 ReplicaSet o Standalone, 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 mongos instancias.

      • 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 mongod instancias.

    • 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.version desde 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 mongod correspondiente.

    • Para cada pod de cada StatefulSet que crea el recurso personalizado de MongoDB, excepto StatefulSets, el operador mongos de Kubernetes genera una notificación de volumen persistente. Puede anular este comportamiento configurando spec.persistent a false en la especificación del recurso.

  6. 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.

  7. 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 establece ClusterIP en None y realiza estas acciones:

    • Crea este servicio si no existe.

    • Para recursos de ReplicaSet o Standalone, el Operador de Kubernetes nombra el servicio con el nombre del recurso personalizado, con -svc agregado al mismo.

    • Para un recurso ShardedCluster, el operador de Kubernetes utiliza estas convenciones de nomenclatura:

      • Paramongosinstancias, el operador de Kubernetes usa el nombre especificado enspec.serviceo el nombre del recurso con -svc agregado.

      • Para los servidores de configuración, el operador de Kubernetes usa el nombre del recurso con -cs agregado.

      • Para cada fragmento, el operador de Kubernetes utiliza el nombre del recurso con -sh agregado.

    • Para el puerto, el operador de Kubernetes utiliza el puerto predeterminado 27017 o el .net.port especificado spec.additionalMongodConfig en.

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:

  1. Determina el recurso del usuario de MongoDB según el valor especificado en la spec.MongoDBResourceRef.name configuración en la Especificación de recursos de usuario de MongoDB.

  2. Se conecta a Cloud Manager o Ops Manager:

    • Lee la organización desde orgId en ConfigMap.

    • Lee el nombre de un proyecto desde projectName en 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-secret de API de Ops Manager o Cloud Manager.

  3. 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.

Diagrama que describe cómo el operador Kubernetes de MongoDB Enterprise concilia los cambios en la definición de recurso personalizado MongoDBUser
haga clic para ampliar

Volver

Implementar recursos de la base de datos

En esta página