Las implementaciones de aplicaciones en Kubernetes pueden ser desafiantes, especialmente para aplicaciones con estado como MongoDB en un clúster de Kubernetes. ¿Cómo facilitarías la implementación? Deja que el Operador de Kubernetes de MongoDB implemente y gestione automáticamente aplicaciones con estado dentro de tu clúster de Kubernetes.
En este tutorial, aprenderás cómo implementar MongoDB en Kubernetes usando el Operador de Kubernetes de MongoDB.
¡Sigue leyendo y comienza a automatizar tus implementaciones de Kubernetes!
Requisitos previos
Este tutorial será una demostración práctica. Para seguirlo, asegúrate de tener los siguientes requisitos:
- A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
- Kubectl instalado en la máquina local.
- MongoDB Compass instalado en la máquina local.
- Git instalado en tu máquina.
- jq Parser JSON instalado en la máquina local.
Creando un Namespace para MongoDB
Al implementar aplicaciones en Kubernetes, siempre se recomienda crear un espacio de nombres específico para tus proyectos.
Los espacios de nombres facilitan la gestión de recursos de Kubernetes para los administradores y evitan colisiones de nombres. Al mismo tiempo, crear espacios de nombres previene el uso incorrecto de recursos en el entorno de Kubernetes.
Abre tu terminal y ejecuta el comando kubectl create
a continuación para crear un nuevo espacio de nombres (ns
) llamado mongodb
en tu clúster de Kubernetes.
Ahora ejecuta el siguiente comando kubectl get
para verificar la lista de espacios de nombres en tu clúster de Kubernetes.
Verás un nuevo espacio de nombres llamado mongodb disponible en tu clúster, como se muestra a continuación.

Descargando el Operador de MongoDB para Kubernetes
Después de crear un espacio de nombres, es hora de descargar el Operador de Kubernetes de MongoDB. El Operador de Kubernetes de MongoDB es un conjunto de operadores de Kubernetes. Estos operadores de Kubernetes ofrecen implementación, configuración y gestión automáticas de MongoDB Community en el entorno de Kubernetes.
Ejecuta el comando git
a continuación para clonar
el proyecto del Operador de Kubernetes de MongoDB en tu máquina local.
Ahora, ejecuta cada comando a continuación para cambiar tu directorio de trabajo actual a mongodb-kubernetes-operator
y listar (ls
) todos los archivos y directorios disponibles.
Verás un subdirectorio llamado config dentro del directorio del proyecto ~/mongodb-kubernetes-operator, como se muestra a continuación. El subdirectorio config contiene ejemplos de archivos YAML para implementar MongoDB en Kubernetes.

Implementación del Operador de MongoDB
Ahora que tu espacio de nombres personalizado y el Operador de Kubernetes de MongoDB están configurados, estás listo para implementar el Operador de MongoDB en tu clúster de Kubernetes. ¿Cómo? Utilizarás la configuración dentro del directorio config.
El Operador de MongoDB maneja el ciclo de vida de tu implementación de MongoDB en el clúster de Kubernetes. El operador creará, gestionará y escalará automáticamente el estado de tu implementación de MongoDB.
Para implementar el operador de MongoDB, debes crear una Definición de Recursos Personalizada (CRD) de Kubernetes y el controlador. El CRD de Kubernetes es extensible a la API de Kubernetes, lo que te permite crear recursos personalizados en Kubernetes.
1. Ejecuta el comando kubectl apply
a continuación para crear un nuevo CRD de Kubernetes para la implementación de MongoDB.
El operador de Kubernetes sustituye toda interacción humana para implementar una aplicación en Kubernetes. El operador es un controlador de pods que implementa y gestiona automáticamente tu aplicación con estado en Kubernetes.

2. A continuación, ejecuta el siguiente comando kubectl get
para verificar la lista de crd
disponibles en tu clúster Kubernetes.
A continuación, puedes ver el CRD con el nombre mongodbcommunity.mongodbcommunity.mongodb.org.

3. Ejecuta el siguiente comando para crear un nuevo Control de Acceso Basado en Roles (RBAC) personalizado para el Operador de MongoDB y especifica la implementación de RBAC en el espacio de nombres mongodb.
Este comando crea un nuevo rol, rolebinding y serviceaccount para el operador de MongoDB, que son permisos personalizados en tu clúster de Kubernetes. Estos permisos personalizados son necesarios para implementar y gestionar automáticamente MongoDB.

4. Ahora, ejecuta cada comando kubectl
a continuación para verificar el rol, rolebinding y serviceaccount del operador de MongoDB.
La salida a continuación muestra que se ha creado el rol, rolebinding y serviceaccount mongodb-kubernetes-operator en el espacio de nombres mongodb.

5. Una vez que la verificación esté completa, ejecuta el comando kubectl
a continuación para implementar el Operador de MongoDB en el espacio de nombres mongodb
.
Este comando crea una nueva cápsula (mongodb-kubernetes-operator) con la imagen base de Docker (quay.io/mongodb/mongodb-kubernetes-operator). Esta cápsula actuará como controlador para implementar automáticamente conjuntos de réplicas de MongoDB en el clúster de Kubernetes.
A continuación, puedes ver que se ha creado la implementación del operador de MongoDB, pero la cápsula aún se está inicializando.

6. Finalmente, ejecuta los siguientes comandos para verificar la implementación y las cápsulas en el espacio de nombres mongodb
.
Como se puede ver a continuación, la cápsula del Operador de MongoDB está en ejecución.

Implementación de MongoDB ReplicaSet en Kubernetes
Después de desplegar MongoDB, desplegarás ReplicaSet en tu clúster de Kubernetes para proporcionar alta disponibilidad y redundancia para tu despliegue de MongoDB. No querrías tiempo de inactividad en tu despliegue.
El despliegue de MongoDB ReplicaSets utilizando el Operador Kubernetes de MongoDB es seguro por defecto utilizando la autenticación SCRAM para usuarios. Al mismo tiempo, puedes utilizar una conexión segura TLS para conexiones de usuarios y aplicaciones y exponer métricas de Prometheus para monitorear recursos.
Relacionado: Primeros Pasos con la Monitorización de Clústeres Kubernetes de Grafana & Prometheus
Dentro del directorio config/samples/, verás múltiples ejemplos de archivos YAML para el despliegue de ReplicaSet. Cada archivo puede ser utilizado en diferentes escenarios de despliegue, pero el archivo de despliegue de ReplicaSet por defecto es mongodb.com_v1_mongodbcommunity_cr.yaml.
1. Edita el archivo YAML para tu despliegue utilizando tu editor preferido. Para esta demostración, se utiliza el archivo /mongodb.com_v1_hostpath.yaml para el despliegue local. Este archivo YAML se encuentra en el directorio config/samples/arbitrary_statefulset_configuration/.
Si estás implementando el Operador de MongoDB Kubernetes en servicios en la nube como GKE y AKS, utiliza el archivo YAML `mongodb.com_v1_mongodbcommunity_cr.yaml`. Pero si estás implementando localmente dentro de Kind o Minikube, puedes usar el archivo YAML personalizado (`arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml`), que crea automáticamente PV y PVC personalizados para los pods de ReplicaSet de MongoDB.
A continuación, cambia el número (miembros) de ReplicaSets que desees implementar dependiendo de tu entorno, pero el valor predeterminado es 3. Para este tutorial, el número de ReplicaSets está establecido en 2.
Reemplaza <tu-contraseña-aquí> con tu contraseña segura. Utilizarás esta contraseña para iniciar sesión en la base de datos de MongoDB y, de forma predeterminada, se utiliza la autenticación SCRAM.
Guarda los cambios y cierra el editor una vez que estés satisfecho con la contraseña.
2. A continuación, ejecuta el comando kubectl
a continuación para implementar (apply
) el ReplicaSet de MongoDB usando el archivo mongodb.com_v1_hostpath.yaml
en el espacio de nombres mongodb.
Este comando crea lo siguiente:
- A new custom resource (MongoDBCommunity) with the name mdb0 under the
mongodbcommunity.mongodb.com/v1
CRD
- Secretos de Kubernetes para almacenar contraseñas de usuario de MongoDB. Al mismo tiempo, algunos PV y PVC con el tipo `hostPath` para el Replica Set de MongoDB.
El despliegue tomará algún tiempo, dependiendo de la magnitud de los ReplicaSets a crear y del clúster de Kubernetes en sí.

3. Después del despliegue, ejecuta cada comando a continuación para verificar los recursos personalizados y las pods en el espacio de nombres de mongodb
.
La salida a continuación muestra lo siguiente:
- El recurso personalizado MongoDBCommunity con el nombre mdb0 se está ejecutando con MongoDB v4.4.0.
- Las dos pods del conjunto replicado de MongoDB se están ejecutando con los nombres mdb0-0 y mdb0-1. Cada pod contiene dos contenedores diferentes, el mongod, y el contenedor mongodb-agent.

4. Por último, ejecuta otro comando de kubectl
a continuación para verificar el pv
y el pvc
en el espacio de nombres de mongodb
.
La salida a continuación te muestra algunos pv y pvc utilizados por las pods del conjunto replicado de MongoDB.

Creación de un Nuevo Usuario y Base de Datos para el Despliegue de MongoDB
Has completado el despliegue del operador de MongoDB y los ReplicaSets en tu clúster de Kubernetes en este punto. El siguiente paso es crear una nueva base de datos y usuario de MongoDB para tu aplicación.
Crearás un nuevo secreto de Kubernetes para el nuevo usuario, editarás el recurso personalizado del despliegue del ReplicaSet y actualizarás el ReplicaSet en tu clúster.
1. Crea un nuevo archivo YAML utilizando tu editor preferido y completa el siguiente secreto de Kubernetes. Puedes nombrar el archivo YAML como desees, pero en este tutorial el archivo se llama new-user.yaml.
Este archivo YAML crea un nuevo secreto de Kubernetes con el nombre myappdata y la contraseña myapppassword.
2. A continuación, ejecuta el comando kubectl
a continuación para ejecutar la configuración new-user.yaml
.
Este comando crea y aplica (apply) un nuevo secreto de Kubernetes a tu clúster y aplica este secreto al espacio de nombres mongodb.

3. Edita el archivo YAML de la configuración de tu ReplicaSet CRD (mongodb.com_v1_hostpath.yaml) en el directorio config/samples/arbitrary_statefulset_configuration
Agrega la siguiente configuración al archivo mongodb.com_v1_hostpath.yaml , que crea la base de datos y el usuario para MongoDB.
Asegúrate de reemplazar scram-secret-myapp con tus propias credenciales scram, guarda los cambios en el archivo y cierra el editor.
4. Ahora, ejecuta el comando siguiente para aplicar
los nuevos cambios que hiciste en el archivo mongodb.com_v1_hostpath.yaml
en el paso tres.

5. Por último, ejecuta cada comando a continuación para generar las conexiones detalladas de MongoDB para tu aplicación. Estos comandos generan la conexión detallada de MongoDB para tus aplicaciones en formato JSON y analizan la salida usando el comando de línea de comandos jq
.
Reemplaza mdb0-admin-mongoadmin con los detalles de tu entorno de la siguiente manera:
mdb0
– El nombre de metadatos de los recursos de MongoDB.
admin
– La base de datos para autenticar.
mongoadmin
– El usuario que utilizarás para autenticar
La salida a continuación muestra que puedes conectarte a MongoDB utilizando las conexiones standard y standardSrv. También verás el nombre de usuario y la contraseña de tu implementación de MongoDB.

Conectándose a la implementación de MongoDB
Has completado la implementación de MongoDB en el clúster de Kubernetes utilizando el operador de Kubernetes de MongoDB. Pero, ¿cómo sabes que la implementación funciona? Verificarás la base de datos de tu máquina local y la conexión de usuario a MongoDB dentro del clúster de Kubernetes.
Para verificar la conexión a tu implementación de MongoDB, utilizarás el reenvío de puertos. El reenvío de puertos en Kubernetes te permite crear un puerto de reenvío desde cualquier servicio de Kubernetes a tu puerto local.
1. Ejecute el comando kubectl
a continuación para obtener
la lista de servicios (svc
) en el espacio de nombres de mongodb
(-n
).
A continuación, verá el servicio llamado mdb0-svc, que expone el puerto 27017 (puerto predeterminado de MongoDB).

2. A continuación, ejecute el siguiente comando para crear un reenvío de puertos al clúster de Kubernetes.
Este comando crea un nuevo reenvío de puertos en el servicio de Kubernetes (mdb0-svc) y reenvía el puerto local 27017 al puerto del servicio de Kubernetes 27017.

3. Por último, abra su aplicación MongoDB Compass en su máquina local, agregue una nueva conexión con el siguiente formato y haga clic en Conectar para conectarse a MongoDB.
Cambie el campo de nombre de usuario y contraseña con su usuario y contraseña de MongoDB.


Cuando la conexión sea exitosa, obtendrá la siguiente ventana que confirma que la implementación de MongoDB en Kubernetes está funcionando correctamente.
Para el usuario mongoadmin, verá las bases de datos predeterminadas (local, config y admin).

Para el usuario appuser, solo verá una base de datos de privilegios llamada appdb1.

Conclusión
A lo largo de este tutorial, ha aprendido cómo implementar MongoDB en el clúster de Kubernetes utilizando el Operador de Kubernetes de MongoDB. También ha aprendido sobre el uso básico del operador de Kubernetes. Y en este momento, ya tiene un conocimiento sólido sobre cómo implementar y gestionar automáticamente aplicaciones en Kubernetes.
¿Por qué no configurar una conexión TLS en tu implementación de MongoDB para aprovechar este conocimiento recién adquirido? La conexión TLS asegura las conexiones entre conjuntos de réplicas y protege las conexiones de los clientes o aplicaciones a MongoDB.