Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Devuelva una base de datos de aplicación externa al administrador de operaciones.

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.

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:

  1. El operador de Kubernetes solicita al recurso de MongoDB que libere el StatefulSet. El recurso de MongoDB informa la fase Pending mientras espera que el recurso del administrador de operaciones lo recupere.

  2. 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.

  3. 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.

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.externalApplicationDatabaseRef en un recurso de MongoDB llamado <primary-om-name>-db, no establece spec.applicationDatabase y su status.applicationDatabase.phase informa Disabled.

  • Confirme que el recurso MongoDB se encuentra en la fase Running y posee el StatefulSet de la base de datos de la aplicación.

Antes de migrar, revise las siguientes consideraciones:

  • Establezca spec.applicationDatabase.version en 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.

1
export K8S_CTX="<your-kube-context>"
export MDB_NS="mongodb"
export PRIMARY_OM_NAME="primary-om"
export APPDB_NAME="${PRIMARY_OM_NAME}-db"
export APPDB_VERSION="8.0.5-ent"
2
  1. 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"}'
  2. 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}.

3

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}\"}}}"
4
  1. Confirme que el recurso MongoDB libera el StatefulSet. El recurso informa la fase Pending con 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"}'
  2. 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
5

Complete este paso solo después de que el paso anterior reporte applicationDatabase.phase=Running.

kubectl delete mdb "${APPDB_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" --wait=true --timeout=300s
6
  1. 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}.

  2. Confirme que el recurso Ops Manager informa que su base de datos de aplicación es Running y 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}"
  3. 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}"

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.

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.

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.

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.