Importante
Esta sección es solo para implementaciones de un solo clúster de Kubernetes. Para implementaciones multidistribuidas de clústeres de MongoDB, consulte la Visión general.
Los controladores de MongoDB para el operador de Kubernetes utilizan la API y las herramientas de Kubernetes para gestionar los clústeres de MongoDB que se ejecutan en su clúster de Kubernetes. El operador de Kubernetes funciona junto con Ops Manager. Este tutorial demuestra cómo implementar Ops Manager en Kubernetes y luego implementar y conectarse a su primer set de réplicas de MongoDB con el operador de Kubernetes. Puede utilizar Kind para configurar rápidamente un clúster. Para obtener más información, consulte Kind.
Utilice este tutorial para evaluar Kubernetes Operator. Dado que Kind ejecuta un único nodo en su máquina local, el despliegue que cree aquí no podrá soportar la pérdida del nodo y no está dimensionado para el tráfico de producción. Una vez finalizado, consulte los Pasos siguientes para aprender cómo migrar a un despliegue de producción.
Requisitos previos
Este tutorial requiere:
Un clúster de Kubernetes en ejecución.
Helm instalado en su máquina local.
Nodos de Kubernetes ejecutándose en arquitecturas de hardware compatibles.
El Shell de MongoDB instalado en tu máquina local.
Si utiliza Kind con Docker Desktop, asigne al menos 8 GB de memoria y 4 CPU en la configuración de recursos de Docker Desktop. Ops Manager requiere un mínimo de 5 GB de memoria para la aplicación y recursos adicionales para la base de datos de la aplicación y el operador de Kubernetes.
Procedimiento
Agrega el repositorio Helm Charts de MongoDB para Kubernetes a Helm.
helm repo add mongodb https://mongodb.github.io/helm-charts
Instala el operador de los controladores de MongoDB para Kubernetes
Para instalar el operador de Kubernetes con Helm, consulte las instrucciones en el repositorio.
Ejemplo
El siguiente comando instala los Controladores de MongoDB para el Operador de Kubernetes en el namespace mongodb con la opción opcional --create-namespace. Por defecto, el Operador de Kubernetes utiliza el namespace default.
helm install kubernetes-operator mongodb/mongodb-kubernetes --namespace mongodb --create-namespace
Cree el secreto de credenciales de administrador de MongoDB Ops Manager.
Cree un secreto que contenga las credenciales iniciales del usuario administrador de Ops Manager. El operador de Kubernetes utiliza este secreto para configurar el primer usuario administrador cuando implementa el recurso de Ops Manager.
Ejecute el siguiente comando, reemplazando los valores de marcador de posición con sus credenciales preferidas:
kubectl create secret generic ops-manager-admin-secret \ --from-literal=Username="<admin-email>" \ --from-literal=Password="<admin-password>" \ --from-literal=FirstName="<first-name>" \ --from-literal=LastName="<last-name>"
Nota
Almacene estas credenciales de forma segura. Las necesita para iniciar sesión en la Interfaz de Usuario de MongoDB Ops Manager después de la implementación.
Implemente el recurso de Ops Manager.
Copia y guarda el siguiente archivo YAML como
ops-manager.yaml:apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ops-manager namespace: mongodb spec: replicas: 1 version: "8.0.0" adminCredentials: ops-manager-admin-secret externalConnectivity: type: NodePort configuration: mms.ignoreInitialUiSetup: "true" automation.versions.source: "mongodb" mms.fromEmailAddr: admin@example.com mms.replyToEmailAddr: admin@example.com mms.adminEmailAddr: admin@example.com mms.mail.transport: smtp mms.mail.hostname: localhost mms.mail.port: "25" backup: enabled: false applicationDatabase: topology: SingleCluster members: 3 version: "8.0.0" Para obtener más información, consulte la especificación de recursos de MongoDB Ops Manager.
Ejecuta el siguiente comando:
kubectl apply -f ops-manager.yaml
Espere a que el recurso de Ops Manager alcance el estado de ejecución.
El operador de Kubernetes primero implementa el set de réplicas de la base de datos de la aplicación, luego inicia la aplicación de MongoDB Ops Manager. Este proceso puede tardar varios minutos.
Ejecute el siguiente comando para rastrear el estado de los recursos:
kubectl get om -o yaml -w
Espere hasta que la salida muestre las siguientes fases:
status: applicationDatabase: phase: Running opsManager: phase: Running
Cuando ambos componentes alcanzan Running, recupere la URL de MongoDB Ops Manager:
kubectl get om ops-manager -o jsonpath='{.status.opsManager.url}'
Tenga en cuenta esta URL. Lo necesitará para el ConfigMap en un paso posterior.
Configure el operador de Kubernetes para MongoDB Ops Manager.
Puede utilizar la interfaz de usuario de Ops Manager para generar ConfigMap y Secret, o puede crearlos manualmente.
Primero, reenvíe el puerto de servicio de MongoDB Ops Manager a su máquina local para poder acceder a la Interfaz de Usuario en su navegador:
kubectl port-forward svc/ops-manager-svc-ext 8080:8080
Luego, abra http://localhost:8080 en su navegador e inicie sesión con las credenciales que creó en el secreto de administrador.
Para utilizar la Interfaz de Usuario de Ops Manager:
Haz clic en Create New API Keys o Use Existing API Keys.
Complete el formulario. Para obtener más información, consulte Crear credenciales para el operador de Kubernetes.
Haga clic en Generate Key and YAML.
Alternativamente, puede crear el ConfigMap y el secreto manualmente en los siguientes pasos.
Crea y guarda el ConfigMap.
Si generó el ConfigMap desde la interfaz de usuario de Ops Manager, copie y guarde el archivo config-map.yaml generado. De lo contrario, cree y guarde el siguiente archivo. Establezca data.baseUrl en la URL de su instancia de MongoDB Ops Manager desde status.opsManager.url.
Ejemplo:
apiVersion: v1 kind: ConfigMap metadata: name: my-project namespace: mongodb data: baseUrl: http://ops-manager-svc.mongodb.svc.cluster.local:8080 projectName: my-project orgId: <your-org-id>
Reemplace <your-org-id> con el Identificador de la Organización de MongoDB Ops Manager. Puede encontrar este valor en la URL de la interfaz de usuario de MongoDB Ops Manager: http://<ops-manager-url>/v2#/org/<orgId>/projects.
Para obtener más información, consulte las descripciones de los parámetros.
Crear y guardar el secreto.
Si generó el secreto desde la interfaz de usuario de MongoDB Ops Manager, copie y guarde el archivo secret.yaml generado. De lo contrario, cree un secreto que contenga las API claves para su organización de MongoDB Ops Manager.
Ejemplo:
apiVersion: v1 kind: Secret metadata: name: organization-secret namespace: mongodb stringData: publicKey: <public_key> privateKey: <private_key>
Para crear claves de API programáticas, consulte Crear credenciales para el operador de Kubernetes.
Implementa el recurso de conjunto de réplicas de MongoDB.
Copie y guarde el siguiente archivo YAML:
apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: demo-mongodb-cluster-1 namespace: mongodb spec: members: 3 version: 8.0.0 type: ReplicaSet security: authentication: enabled: true modes: ["SCRAM"] opsManager: configMapRef: name: my-project credentials: organization-secret persistent: true podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database resources: limits: cpu: 2 memory: 1.5G requests: cpu: 1 memory: 1G persistence: single: storage: 10Gi Ejecuta el siguiente comando:
kubectl apply -f <replica-set-conf>.yaml
Cree un secreto con la contraseña del usuario de base de datos.
Elija una contraseña para su usuario de base de datos de MongoDB y almacénela en un secreto. Esta contraseña puede ser cualquier valor que elija. Hará referencia a este secreto cuando cree el usuario de base de datos en el siguiente paso.
Puedes almacenar la contraseña como texto sin formato (usando stringData) o como un valor codificado en Base64(usando data).
Para una contraseña de texto sin formato, crea y guarda el siguiente archivo YAML:
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque stringData: password: <my-plain-text-password> # corresponds to user.spec.passwordSecretKeyRef.key
Para una contraseña codificada en Base64, crear y guardar el siguiente archivo YAML:
apiVersion: v1 kind: Secret metadata: name: mms-user-1-password # corresponds to user.spec.passwordSecretKeyRef.name type: Opaque data: password: <base-64-encoded-password> # corresponds to user.spec.passwordSecretKeyRef.key
Reemplace el marcador de posición con la contraseña elegida. Para obtener más información, consulte Gestionar usuarios de bases de datos utilizando autenticación SCRAM.
Cree un usuario de base de datos.
Copia y guarda el siguiente archivo Especificación de recursos de usuario de MongoDB:
apiVersion: mongodb.com/v1 kind: MongoDBUser metadata: name: mms-scram-user-1 spec: passwordSecretKeyRef: name: mms-user-1-password # Match to metadata.name of the User Secret key: password username: "mms-scram-user-1" db: "admin" # mongodbResourceRef: name: "demo-mongodb-cluster-1" # Match to MongoDB resource using authentication roles: - db: "admin" name: "clusterAdmin" - db: "admin" name: "userAdminAnyDatabase" - db: "admin" name: "readWrite" Ejecuta el siguiente comando:
kubectl apply -f <database-user-conf>.yaml
Conéctate al MongoDB set de réplicas.
Realice los siguientes pasos en la aplicación MongoDB Ops Manager:
Haz clic en Deployment en la navegación izquierda.
Haga clic en para la implementación a la que desea conectarse.
Haga clic en Connect to this instance.
Ejecuta el comando de conexión en una terminal para conectar con la implementación.
Próximos pasos
La implementación que creó se ejecuta en un único nodo Kind y utiliza la configuración de recursos predeterminada. Para pasar de esta implementación de evaluación a una implementación de producción:
Planifique el despliegue en producción para elegir una arquitectura, confirmar la compatibilidad de versiones y establecer el alcance del despliegue del operador de Kubernetes.
Instale el operador de Kubernetes en un clúster de Kubernetes de producción que tenga más de un nodo y un
storageClassque admita la expansión de volumen.Aplique las mejores prácticas de producción para el almacenamiento, la persistencia, las zonas de disponibilidad y los límites de recursos.
Proteja la implementación con TLS, autenticación y cifrado en reposo.
Implemente la solución en varios clústeres de Kubernetes si necesita sobrevivir a la pérdida de un clúster de Kubernetes completo.