Puedes devolver una base de datos de aplicación externa a la gestión interna mediante el recurso de Administrador de operaciones. El recurso de Administrador de operaciones recupera el StatefulSet de la base de datos de aplicación existente y, a continuación, eliminas el recurso de MongoDB que la gestionaba. El operador de Kubernetes no mueve ni recrea tus datos, ni reinicia los pods del Administrador de operaciones.
Cómo funciona la migración
El recurso Ops Manager comienza con una base de datos de aplicación externa: un recurso MongoDB con spec.role configurado como AppDB, llamado <primary-om-name>-db, que posee el StatefulSet de la base de datos de aplicación. La migración procede de la siguiente manera:
El operador de Kubernetes solicita al recurso de MongoDB que libere el StatefulSet. El recurso de MongoDB informa la fase
Pendingmientras espera que el recurso del administrador de operaciones lo recupere.El operador de Kubernetes recupera el StatefulSet y lo gestiona como una base de datos de aplicación interna. Dado que la cadena de conexión no cambia, los pods del administrador de operaciones no se reinician.
Eliminas el recurso de MongoDB, que ya no posee nada.
Advertencia
Elimine el recurso MongoDB solo después de que el recurso Ops Manager vuelva a administrar la base de datos de la aplicación interna. Si elimina el recurso MongoDB mientras aún posee el StatefulSet, Kubernetes eliminará la base de datos de la aplicación mediante el recolector de basura. Para recuperarse de este estado, es necesario recrear la base de datos de la aplicación a partir de las reclamaciones de volumen persistentes retenidas, lo que provoca un tiempo de inactividad y la rotación de las credenciales de la base de datos de la aplicación.
Requisitos previos
Antes de comenzar, cumpla con las siguientes tareas:
Install the Kubernetes Operator and
kubectl. To learn more, see Install with Kubernetes.Confirme que el recurso principal de Ops Manager utiliza una base de datos de aplicación externa: establece
spec.externalApplicationDatabaseRefen un recurso de MongoDB llamado<primary-om-name>-db, no establecespec.applicationDatabasey sustatus.applicationDatabase.phaseinformaDisabled.Confirme que el recurso MongoDB se encuentra en la fase
Runningy posee el StatefulSet de la base de datos de la aplicación.
Considerations
Antes de migrar, revise las siguientes consideraciones:
Establezca
spec.applicationDatabase.versionen la versión que ya utiliza la base de datos de la aplicación. Reutilizar la misma versión mantiene los mismos binarios y datos. Una versión diferente inicia una actualización de la base de datos de la aplicación al mismo tiempo que la transferencia.El operador de Kubernetes no elimina el proyecto de Ops Manager que creó para la base de datos de aplicaciones externa. Eliminar dicho proyecto hace que las métricas históricas de la base de datos de aplicaciones sean ilegibles, por lo que limpiarlo es decisión suya.
Procedimiento
Confirma el estado inicial.
Confirme que el recurso del Administrador de operaciones hace referencia a la base de datos de la aplicación externa y que informa de su base de datos de la aplicación como
Disabled:kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='ref={.spec.externalApplicationDatabaseRef.name} appdb={.status.applicationDatabase.phase}{"\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}' The command returns
MongoDB/${APPDB_NAME}.
Reconfigure el recurso del Administrador de operaciones para que utilice una base de datos de aplicaciones interna.
Este parche elimina spec.externalApplicationDatabaseRef y agrega spec.applicationDatabase.
kubectl patch om "${PRIMARY_OM_NAME}" \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --type merge \ -p "{\"spec\":{\"externalApplicationDatabaseRef\":null,\"applicationDatabase\":{\"members\":3,\"version\":\"${APPDB_VERSION}\"}}}"
Espere a que el recurso Ops Manager recupere el StatefulSet.
Confirme que el recurso MongoDB libera el StatefulSet. El recurso informa la fase
Pendingcon un mensaje que indica que está en proceso de migración inversa al recurso Ops Manager: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"}' Espere a que el administrador de operaciones vuelva a gestionar la base de datos de la aplicación interna:
kubectl wait --for=jsonpath='{.status.applicationDatabase.phase}'=Running \ om/"${PRIMARY_OM_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 Administrador de operaciones 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}' The command returns
MongoDBOpsManager/${PRIMARY_OM_NAME}.Confirme que el recurso Ops Manager informa que su base de datos de aplicación es
Runningy que el recurso MongoDB ya no existe:kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.applicationDatabase.phase}{"\n"}' kubectl get mdb --context "${K8S_CTX}" -n "${MDB_NS}" 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 no libera el StatefulSet.
Si el recurso MongoDB permanece en la fase Running y aún posee el StatefulSet, el recurso Ops Manager no ha solicitado la liberación. Confirme que su parche cambió spec.externalApplicationDatabaseRef a null y agregó spec.applicationDatabase.
La versión de la base de datos de la aplicación no coincide.
Establezca spec.applicationDatabase.version a la versión que ya ejecuta la base de datos de la aplicación para que el StatefulSet recuperado mantenga los mismos binarios.
Eliminaste el recurso de MongoDB demasiado pronto.
Si elimina el recurso MongoDB mientras aún posee el StatefulSet, Kubernetes elimina el StatefulSet y los secretos que comparte con el recurso Ops Manager. Para recuperarse, vuelva a crear la base de datos de la aplicación a partir de las reclamaciones de volumen persistentes conservadas. Este proceso provoca un tiempo de inactividad y rota las credenciales de la base de datos de la aplicación. Para obtener más información, consulte Recuperación ante desastres para los recursos de Ops Manager y AppDB.
Próximos pasos
Para volver a utilizar una base de datos de aplicación externa, consulte Migrar una base de datos de aplicación a una implementación externa.