A partir de Kubernetes Operator 1.15, las implementaciones independientes están obsoletas y dejarán de ser compatibles en la próxima versión principal. Migre sus implementaciones independientes a conjuntos de réplicas de un miembro. Un conjunto de réplicas de un miembro proporciona la misma topología de nodo único que una instancia independiente y permite agregar miembros posteriormente sin necesidad de migrar de nuevo.
Acerca de esta tarea
Esta migración no es una actualización in situ. Se implementa un nuevo conjunto de réplicas de un solo miembro, se copian los datos con mongodump y mongorestore, y luego se redirigen las aplicaciones al conjunto de réplicas.
Un proyecto de Ops Manager contiene una única implementación, por lo que el conjunto de réplicas requiere un proyecto nuevo. No se puede reutilizar el proyecto que utiliza la implementación independiente.
mongodumpymongorestoreno copian los usuarios de la base de datos. Después de la restauración, vuelva a crear sus usuarios como recursosMongoDBUser.La implementación independiente permanece intacta hasta que la elimine. Si la migración falla, puede redirigir sus aplicaciones de nuevo a la implementación independiente.
Antes de comenzar
Implementa un recurso independiente administrado por el operador de Kubernetes. Para obtener más información, consulta Implementar una instancia independiente de MongoDB.
Configure
kubectlpara acceder al clúster de Kubernetes que aloja la implementación independiente.Tenga en cuenta el valor de
spec.versionen el recurso independiente. El conjunto de réplicas de un solo miembro debe ejecutar la misma versión de MongoDB.
Procedimiento
Crea un ConfigMap para un nuevo proyecto.
Un proyecto de Ops Manager contiene un único despliegue, por lo que no se puede reutilizar el proyecto que utiliza el despliegue independiente. Copie el ConfigMap al que hace referencia el despliegue independiente, conserve los valores baseUrl y orgId, y establezca un nuevo valor projectName único. Aplique el ConfigMap al mismo espacio de nombres de Kubernetes que el despliegue independiente.
Para obtener más información,consulte Crear un proyecto por implementación de MongoDB mediante un ConfigMap.
Implemente un conjunto de réplicas de un solo miembro.
Cree un recurso MongoDB con spec.type configurado como ReplicaSet y spec.members como 1. Configure spec.version con la misma versión de MongoDB que utiliza la implementación independiente y haga referencia al ConfigMap que creó en el paso anterior. Puede reutilizar el secreto de credenciales que utiliza la implementación independiente. Copie cualquier configuración adicional de spec del recurso independiente.
apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: <my-replica-set> namespace: <my-namespace>spec: members: 1 # Must match the MongoDB version of the standalone deployment version: "<mongodb-version>" opsManager: configMapRef: # Must match metadata.name in the new project ConfigMap file name: <configMap.metadata.name> # Can match the credentials Secret that the standalone deployment uses credentials: <mycredentials> type: ReplicaSet persistent: trueAplicar el recurso:
kubectl apply -f <replica-set-yaml> --namespace <my-namespace>Para verificar el estado de su MongoDB recurso, utilice el siguiente comando:
kubectl get mdb <resource-name> -o yaml -wCon la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.
Implementar un pod de herramientas.
Las imágenes de contenedor que ejecutan los pods de la base de datos no incluyen las herramientas de base de datos de MongoDB. Para ejecutar mongodump y mongorestore, implemente un pod de herramientas dedicado basado en la imagen mongodb-enterprise-server. Configure la etiqueta de la imagen con la misma versión de MongoDB que se ejecuta en la implementación independiente.
apiVersion: v1kind: Podmetadata: name: mongodb-tools namespace: <my-namespace>spec: containers: - name: mongodb-tools # Use the standalone's MongoDB version without the -ent # suffix, for example 8.0.4 image: quay.io/mongodb/mongodb-enterprise-server:<mongodb-version>-ubi9 command: ["sleep", "infinity"]Aplicar la cápsula:
kubectl apply -f <tools-pod-yaml> --namespace <my-namespace>Detener las escrituras en la implementación independiente.
Detenga todas las escrituras de la aplicación en la implementación independiente y mantenga las escrituras detenidas hasta que sus aplicaciones se conecten al nuevo conjunto de réplicas. El volcado no captura las escrituras que se produzcan después de que comience el volcado.
Registra el número de documentos y un hash de la base de datos.
Registre el número de documentos de cada colección y el dbHash de cada base de datos en la implementación independiente, excepto las bases de datos admin, config y local. La restauración excluye las bases de datos admin y config, y la replicación escribe en la base de datos local, por lo que estos valores nunca coinciden. Después de la restauración, repita estas mediciones en el conjunto de réplicas para verificar la migración.
Volcar los datos independientes.
Ejecutar mongodump desde el pod de herramientas contra el servicio de la implementación independiente:
kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongodump \ --host "<my-standalone>-svc.<my-namespace>.svc.cluster.local:27017" \ --out /tmp/dumpSi la implementación independiente requiere autenticación, conéctese como un usuario con los roles backup y readAnyDatabase. Si la implementación requiere TLS, agregue las opciones de conexión mongodump correspondientes. Para obtener más información, consulte mongodump.
Restaurar los datos en el conjunto de réplicas.
Ejecutar mongorestore desde el pod de herramientas contra el servicio del conjunto de réplicas:
kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongorestore \ --host "<my-replica-set>-svc.<my-namespace>.svc.cluster.local:27017" \ --nsExclude="admin.*" \ --nsExclude="config.*" \ /tmp/dumpLas opciones --nsExclude excluyen las bases de datos admin y config de la restauración. Una salida completa mongodump incluye admin.system.users y admin.system.version. Restaurarlas implicaría escribir los usuarios de la base de datos y el esquema de autenticación en el conjunto de réplicas fuera de la configuración de automatización, por lo que la lista de usuarios del proyecto en Ops Manager ya no coincidiría con la base de datos.
Si el conjunto de réplicas requiere autenticación, aún no tiene usuarios, ya que los usuarios de la base de datos se recrean en un paso posterior. Cree un recurso temporal MongoDBUser en el nuevo proyecto con los roles restore, readWriteAnyDatabase y dbAdminAnyDatabase, y conéctese como ese usuario. Para obtener más información sobre la creación de usuarios, consulte la sección "Administrar usuarios de la base de datos".
Si el conjunto de réplicas requiere TLS, agregue las opciones de conexión mongorestore correspondientes. Para obtener más información, consulte mongorestore.
Recrear los usuarios de la base de datos.
El volcado no incluye usuarios de la base de datos. Recrea cada usuario como un recurso MongoDBUser en el nuevo proyecto. Si creaste un usuario temporal para la restauración, elimínalo después de recrear los usuarios. Para obtener más información, consulta la sección «Administrar usuarios de la base de datos» y la «Especificación de recursos de usuario de MongoDB».
Eliminar la implementación independiente.
Tras verificar la migración, elimine el recurso MongoDB independiente. El operador de Kubernetes no elimina la solicitud de volumen persistente que utilizaba la implementación independiente, por lo que debe eliminarla manualmente. Para obtener más información, consulte Eliminar un recurso MongoDB.
Rollback
La implementación independiente permanece intacta hasta que la elimine. Para revertir la migración, redirija sus aplicaciones a la implementación independiente. Esta implementación no contiene las escrituras que el conjunto de réplicas recibió después de la migración.