Você pode retornar um banco de dados de aplicativos externo para gerenciamento interno pelo recurso Ops Manager. O recurso Ops Manager recupera o banco de dados de aplicativo StatefulSet existente e, em seguida, você exclui o recurso MongoDB que o gerenciou. O Operador Kubernetes não move nem recria seus dados e não reinicia os pods do Ops Manager.
Como funciona a migração
O recurso Ops Manager começa com um aplicativo de banco de dados externo: um recurso do MongoDB com spec.role definido como AppDB, chamado <primary-om-name>-db, que possui o aplicativo de banco de dados StatefulSet. A migração prossegue da seguinte forma:
Você remove
spec.externalApplicationDatabaseRefdo recurso Ops Manager e adicionaspec.applicationDatabase.O Operador Kubernetes solicita ao recurso MongoDB para liberar o StatefulSet. O recurso MongoDB relata a fase
Pendingenquanto aguarda que o recurso Ops Manager o recupere.O Operador Kubernetes recupera o StatefulSet e o gerencia como um aplicativo de banco de dados interno. Como a string de conexão não muda, os pods do Ops Manager não são reiniciados.
Você exclui o recurso MongoDB , que não possui mais nada.
Aviso
Exclua o recurso MongoDB somente depois que o recurso do Ops Manager gerenciar o banco de dados interno de aplicativos novamente. Se você excluir o recurso MongoDB enquanto ele ainda possui o StatefulSet, o Kubernetes coletará o aplicativo de banco de dados. A recuperação desse estado requer a recriação do Banco de Dados a partir das Declarações de Volume Persistentes retidas, o que causa tempo de inatividade e gira as credenciais do Banco de Dados de Aplicativo.
Pré-requisitos
Antes de começar, conclua as seguintes tarefas:
Instale o Operador Kubernetes e
kubectl. Para saber mais,consulte Instalar com Kubernetes.Confirme que o recurso principal do Ops Manager usa um banco de dados de aplicativos externo: ele define
spec.externalApplicationDatabaseRefcomo um recurso do MongoDB chamado<primary-om-name>-db, não definespec.applicationDatabasee seustatus.applicationDatabase.phasereportaDisabled.Confirme que o recurso MongoDB está na fase
Runninge possui o StatefulSet do banco de dados de aplicativos.
Considerações
Revise as seguintes considerações antes de migrar:
Defina
spec.applicationDatabase.versionpara a versão que o banco de dados do aplicativo já executa. Reutilizar a mesma versão mantém os mesmos binários e dados no lugar. Uma versão diferente inicia uma atualização do banco de dados do aplicativo ao mesmo tempo que a transferência.O Kubernetes Operator não exclui o projeto do Ops Manager que ele criou para o aplicativo de banco de dados externo. A remoção desse projeto torna as métricas históricas do banco de dados de aplicativos ilegíveis, portanto, a limpeza é uma decisão sua.
Procedimento
Confirme o estado inicial.
Confirme que o recurso do Ops Manager faz referência ao banco de dados de aplicativos externo e relata seu banco de dados de aplicativos 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 o recurso MongoDB possui o Banco de Dados do Aplicativo StatefulSet:
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' O comando retorna
MongoDB/${APPDB_NAME}.
Reconfigure o recurso Ops Manager para usar um banco de dados de aplicativos interno.
Este patch remove spec.externalApplicationDatabaseRef e adiciona 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}\"}}}"
Aguarde o recurso do Ops Manager recuperar o StatefulSet.
Confirme que o recurso MongoDB libera o StatefulSet. O recurso relata a fase
Pendingcom uma mensagem de que está sob migração reversa para o 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"}' Aguarde o recurso do Ops Manager gerenciar o banco de dados de aplicativos interno novamente:
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
Verifique a migração.
Confirme que o recurso Ops Manager possui o banco de dados do aplicativo StatefulSet:
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' O comando retorna
MongoDBOpsManager/${PRIMARY_OM_NAME}.Confirme que o recurso Ops Manager relata seu Banco de Dados de Aplicativo como
Runninge que o recurso MongoDB não existe mais: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 os pods do Ops Manager não foram reiniciados verificando a idade e as contagens de reinicialização:
kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"
Problemas comuns de migração
O recurso MongoDB não libera o StatefulSet
Se o recurso MongoDB permanecer na fase Running e ainda possuir o StatefulSet, o recurso Ops Manager não solicitou a versão. Confirme que seu patch definiu spec.externalApplicationDatabaseRef como null e adicionou spec.applicationDatabase.
A versão do banco de dados do aplicativo não corresponde
Defina spec.applicationDatabase.version como a versão que o banco de dados do aplicativo já executa para que o StatefulSet recuperado mantenha os mesmos binários.
Você excluiu o recurso MongoDB muito cedo
Se você excluir o recurso MongoDB enquanto ele ainda possui o StatefulSet, o lixo do Kubernetes coletará o StatefulSet e os segredos que ele compartilhará com o recurso Ops Manager. Para recuperar, recrie o Banco de Dados do Aplicativo a partir das Declarações de Volume Persistentes retidas. Esse caminho causa tempo de inatividade e gira as credenciais do banco de dados do aplicativo. Para saber mais, consulte Recuperação de desastres para Ops Manager e Recursos do AppDB.
Próximos passos
Para usar um aplicativo de banco de dados externo novamente, consulte Migrar um aplicativo de banco de dados para um sistema externo.