Puede convertir un recurso de MongoDB Ops Manager que utiliza una base de datos de la aplicación gestionada internamente en uno que utiliza una base de datos de la aplicación externa: un recurso personalizado de MongoDB con spec.role establecido en AppDB. Esto permite a MongoDB Ops Manager realizar copias de seguridad y restaurar la base de datos de la aplicación. Para obtener más información, consulte Realizar copias de seguridad de la base de datos de la aplicación de MongoDB Ops Manager.
La migración transfiere la propiedad del StatefulSet de la base de datos de la aplicación existente y sus volúmenes persistentes del recurso de Ops Manager al recurso de MongoDB. El operador de Kubernetes no mueve ni recrea los datos, ni reinicia los pods de Ops Manager.
Cómo funciona la migración
El recurso de MongoDB Ops Manager comienza con una base de datos de la aplicación gestionada internamente, y el operador de Kubernetes posee un StatefulSet llamado <primary-om-name>-db. La migración procede de la siguiente manera:
Usted crea un recurso de MongoDB con
spec.roleconfigurado comoAppDBy con el mismo nombre que el StatefulSet, en un proyecto administrado por una instancia de Ops Manager. El recurso de MongoDB aún no puede tomar posesión del StatefulSet, por lo que permanece en la fasePendingcon un mensaje que indica que no puede tomar posesión del StatefulSet de la base de datos de la aplicación.Se agrega
spec.externalApplicationDatabaseRefal recurso del Administrador de operaciones. El operador de Kubernetes desvincula el StatefulSet eliminando la referencia de propietario del recurso del Administrador de operaciones y marcando el StatefulSet como listo para la migración. El recurso de MongoDB toma entonces la propiedad del mismo.
Debido a que el operador de Kubernetes calcula la misma cadena de conexión que antes, que utiliza los mismos nombres de host, los pods del administrador de operaciones no se reinician.
Requisitos previos
Antes de comenzar, cumpla con las siguientes tareas:
Instala el operador de Kubernetes y
kubectl. Para aprender más, consulta Instala con Kubernetes.Implemente un recurso primario de MongoDB Ops Manager que utilice una base de datos de la aplicación gestionada internamente. Este recurso establece
spec.applicationDatabase, y el operador de Kubernetes posee un StatefulSet llamado<primary-om-name>-db. Para obtener más información, consulta Implementar un recurso de MongoDB Ops Manager.Implemente un recurso de Ops Manager de administración que se encuentre en la fase
Runningy que sea el propietario del proyecto de la base de datos de aplicaciones externa. Para obtener más información, consulte Implementar Ops Manager con una base de datos de aplicaciones externa.Cree credenciales para el operador de Kubernetes. El secreto contiene el par de claves API programáticas que el operador de Kubernetes utiliza para autenticarse en la API de administración de Ops Manager en su nombre. Puede asignarle cualquier nombre al secreto. Para obtener más información, consulte Crear credenciales para el operador de Kubernetes.
Considerations
Revise las siguientes consideraciones antes de migrar:
La versión de la base de datos de la aplicación que configure en el recurso de MongoDB debe coincidir con la versión que ejecuta la base de datos de la aplicación administrada internamente, y debe ser una versión de MongoDB que ofrezca la instancia de administración de Ops Manager.
El Kubernetes operador no es compatible con
spec.applicationDatabase.passwordSecretKeyRefdurante la migración. El Kubernetes operador genera una nueva contraseña y rota cualquier contraseña que haya proporcionado.La base de datos de la aplicación puede no estar disponible durante uno o dos minutos si la configuración de recursos de MongoDB difiere de la configuración de la base de datos de la aplicación gestionada internamente, por ejemplo, debido a una plantilla de pod o un conjunto de contenedores diferentes. Si ambas configuraciones son semánticamente idénticas, la base de datos de la aplicación permanece disponible.
El operador de Kubernetes solo admite la migración en un único clúster de Kubernetes.
Procedimiento
Establezca las variables de entorno para la migración.
export K8S_CTX="<your-kube-context>" export MDB_NS="mongodb" export MANAGEMENT_OM_NAME="management-om" export PRIMARY_OM_NAME="primary-om" export APPDB_NAME="${PRIMARY_OM_NAME}-db" export APPDB_VERSION="8.0.5-ent" export MANAGEMENT_OM_URL="http://${MANAGEMENT_OM_NAME}-svc.${MDB_NS}.svc.cluster.local:8080" export MANAGEMENT_OM_ADMIN_KEY_SECRET="<your-operator-credentials-secret>" export APPDB_PROJECT_CONFIGMAP="${APPDB_NAME}-config" export APPDB_PROJECT_NAME="external-appdb"
Confirma el estado inicial.
Confirme que el recurso principal de Ops Manager y su base de datos de aplicaciones gestionada internamente se encuentran en la fase
Running:kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.opsManager.phase} / appdb={.status.applicationDatabase.phase}{"\n"}' Confirme que el recurso de MongoDB Ops Manager es propietario del StatefulSet de la base de datos de la aplicación:
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' El comando devuelve
MongoDBOpsManager/${PRIMARY_OM_NAME}.
Crear el ConfigMap del Proyecto para la base de datos de la aplicación externa.
El valor orgId es obligatorio. Si lo establece como una cadena vacía, el operador de Kubernetes creará una organización con el mismo nombre que su proyecto.
kubectl create configmap "${APPDB_PROJECT_CONFIGMAP}" \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --from-literal=baseUrl="${MANAGEMENT_OM_URL}" \ --from-literal=projectName="${APPDB_PROJECT_NAME}" \ --from-literal=orgId=""
Cree el recurso MongoDB para la base de datos de la aplicación externa.
Asigne al recurso el mismo nombre que al StatefulSet de la base de datos de la aplicación existente.
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: ${APPDB_NAME} spec: members: 3 version: ${APPDB_VERSION} type: ReplicaSet role: AppDB opsManager: configMapRef: name: ${APPDB_PROJECT_CONFIGMAP} credentials: ${MANAGEMENT_OM_ADMIN_KEY_SECRET} persistent: true security: authentication: enabled: true modes: ["SCRAM"] ignoreUnknownUsers: true EOF
Confirma que el recurso de MongoDB espera a que se le asigne un propietario.
Hasta que el recurso de MongoDB Ops Manager libere el StatefulSet, el recurso de MongoDB permanece en la fase Pending. Esto es lo esperado y no es un error.
kubectl wait --for=jsonpath='{.status.phase}'=Pending \ mdb/"${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=300s kubectl get mdb "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.message}{"\n"}'
El mensaje de estado indica que el recurso no puede asumir la propiedad del StatefulSet de la base de datos de la aplicación.
Agregue la referencia a la base de datos de la aplicación externa al recurso de Ops Manager.
kubectl patch om "${PRIMARY_OM_NAME}" \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --type merge \ -p "{\"spec\":{\"externalApplicationDatabaseRef\":{\"name\":\"${APPDB_NAME}\",\"kind\":\"MongoDB\"}}}"
Puede remover spec.applicationDatabase en el mismo parche. Dejarlo en su lugar no tiene ningún efecto: una vez que configure spec.externalApplicationDatabaseRef, el operador de Kubernetes deja de administrar una base de datos de la aplicación interna para este recurso.
Espere a que la migración termine.
kubectl wait --for=jsonpath='{.status.phase}'=Running \ mdb/"${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1200s kubectl wait --for=jsonpath='{.status.opsManager.phase}'=Running \ om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1800s
Verificar la migración.
Confirme que el recurso MongoDB es propietario del StatefulSet de la base de datos de la aplicación:
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' El comando devuelve
MongoDB/${APPDB_NAME}.Confirme que el recurso de MongoDB Ops Manager informa su base de datos de la aplicación como
Disabled, lo que significa que el operador de Kubernetes ya no gestiona una base de datos de la aplicación interna para él:kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.applicationDatabase.phase}{"\n"}' Confirme que los pods de Ops Manager no se hayan reiniciado comprobando su antigüedad y el número de reinicios:
kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"
Problemas comunes de migración
El recurso de MongoDB informa de un error de versión
Si el recurso MongoDB informa Failed con un mensaje que indica que la versión de MongoDB no está disponible, establezca spec.version en una versión que ofrezca la instancia de administración de Ops Manager y mantenga la versión de Ops Manager y la versión de Application Database en la misma versión principal.
El recurso de MongoDB permanece pendiente después del parche
El operador de Kubernetes debe desvincular el StatefulSet antes de que el recurso de MongoDB pueda tomar posesión de él. Confirme que ha aplicado spec.externalApplicationDatabaseRef al recurso primario de MongoDB Ops Manager y que el valor de spec.externalApplicationDatabaseRef.name es exactamente <primary-om-name>-db.
El recurso MongoDB informa de un error en el proyecto.
Si el recurso de MongoDB permanece en la fase Pending con un error de proyecto o registro, es posible que la API pública de administración de Ops Manager no estuviera lista cuando creó el recurso. Confirme que el recurso de administración de Ops Manager se encuentre en la fase Running y que su API responda a las solicitudes; luego, vuelva a conciliar el recurso.
Los pods de MongoDB Ops Manager se reinician durante la migración
Si los pods de Ops Manager se reinician, la cadena de conexión calculada cambia. Para un conjunto de réplicas que usa el puerto predeterminado, la cadena de conexión es idéntica antes y después de la migración. El operador de Kubernetes no admite puertos distintos al predeterminado para esta migración.
Próximos pasos
Para realizar una copia de seguridad de la base de datos de la aplicación externa, habilite la copia de seguridad en el recurso MongoDB del proyecto que administra la instancia de Ops Manager. Para obtener más información,consulte Configurar copias de seguridad de la base de datos MongoDB.
Para revertir esta migración, consulte Devolver una base de datos de la aplicación externa a Ops Manager.