Ops Manager 리소스 통해 외부 애플리케이션 데이터베이스를 내부 관리 로 반환할 수 있습니다. Ops Manager 리소스 기존 애플리케이션 데이터베이스 StatefulSet를 회수한 다음 이를 managed MongoDB 리소스 삭제 . Kubernetes Operator는 데이터를 이동하거나 다시 생성하지 않으며, Ops Manager 포드를 다시 시작하지 않습니다.
마이그레이션 작동 방식
Ops Manager 리소스 외부 애플리케이션 데이터베이스, 즉 spec.role가 AppDB로 설정하다 <primary-om-name>-db라는 이름의 MongoDB 리소스 로 시작하며, 이 리소스는 애플리케이션 데이터베이스 StatefulSet를 소유합니다. 마이그레이션 다음과 같이 진행됩니다.
Ops Manager 리소스 에서
spec.externalApplicationDatabaseRef를 제거spec.applicationDatabase를 추가합니다.Kubernetes Operator는 MongoDB 리소스 StatefulSet를 출시하다 하도록 요청합니다. MongoDB 리소스 Ops Manager 리소스 이를 회수할 때까지 기다리는 동안
Pending단계를 보고합니다.Kubernetes Operator는 StatefulSet를 회수하여 내부 애플리케이션 데이터베이스로 관리합니다. 연결 문자열 변경되지 않으므로 Ops Manager 포드가 다시 시작되지 않습니다.
더 이상 아무것도 소유하지 않는 MongoDB 리소스 삭제 .
경고
Ops Manager 리소스 내부 애플리케이션 데이터베이스를 다시 관리한 후에만 MongoDB 리소스 삭제합니다. MongoDB 리소스 여전히 StatefulSet를 소유하고 있는 동안 삭제 하면 Kubernetes 애플리케이션 데이터베이스를 가비지 수집합니다. 해당 상태 에서 복구하려면 보존된 영구 볼륨 클레임에서 애플리케이션 데이터베이스를 다시 생성해야 하며, 이로 인해 다운타임이 발생하고 애플리케이션 데이터베이스 자격 증명 순환됩니다.
전제 조건
시작하기 전에 다음 작업을 완료하세요.
Install the Kubernetes Operator and
kubectl. To learn more, see Install with Kubernetes.프라이머리 Ops Manager 리소스 외부 애플리케이션 데이터베이스를 사용하는지 확인합니다:
spec.externalApplicationDatabaseRef를<primary-om-name>-db이라는 이름의 MongoDB 리소스 로 설정하고,spec.applicationDatabase를 설정하다 하지 않으며, 해당status.applicationDatabase.phase이Disabled을 보고합니다.MongoDB 리소스
Running단계에 있으며 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.
고려 사항
마이그레이션 하기 전에 다음 고려 사항을 검토하세요.
spec.applicationDatabase.version를 애플리케이션 데이터베이스가 이미 실행 중인 버전으로 설정합니다. 동일한 버전을 재사용하면 동일한 바이너리와 데이터가 제자리에 유지됩니다. 다른 버전은 핸드오버와 동시에 애플리케이션 데이터베이스 업그레이드 시작합니다.Kubernetes Operator는 외부 애플리케이션 데이터베이스용으로 생성한 Ops Manager 프로젝트 삭제 하지 않습니다. 해당 프로젝트 제거하면 애플리케이션 데이터베이스의 기록 지표 읽을 수 없게 되므로 프로젝트를 정리하는 것은 사용자의 결정입니다.
절차
시작 상태 확인합니다.
Ops Manager 리소스 외부 애플리케이션 데이터베이스를 참조하고 해당 애플리케이션 데이터베이스를
Disabled(으)로 보고하는지 확인합니다.kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='ref={.spec.externalApplicationDatabaseRef.name} appdb={.status.applicationDatabase.phase}{"\n"}' MongoDB 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.
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}.
내부 애플리케이션 데이터베이스를 사용하도록 Ops Manager 리소스 재구성합니다.
이 패치는 spec.externalApplicationDatabaseRef를 제거하고 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}\"}}}"
Ops Manager 리소스 StatefulSet을 회수할 때까지 기다립니다.
MongoDB 리소스 StatefulSet를 해제하는지 확인합니다. 리소스 Ops Manager 리소스 로 역방향 마이그레이션 중이라는 메시지와 함께
Pending단계를 보고합니다.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"}' Ops Manager 리소스 내부 애플리케이션 데이터베이스를 다시 관리 할 때까지 기다립니다.
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
마이그레이션 을 확인합니다.
Ops Manager 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.
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}.Ops Manager 리소스 해당 애플리케이션 데이터베이스를
Running(으)로 보고하고 MongoDB 리소스 더 이상 존재하지 않는지 확인합니다.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}" 기간 및 재시작 횟수를 확인하여 Ops Manager pod가 다시 시작되지 않았는지 확인합니다.
kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"
일반적인 마이그레이션 문제
MongoDB 리소스가 StatefulSet를 릴리스하지 않음
MongoDB 리소스 Running 단계에 남아 있고 여전히 StatefulSet를 소유하고 있다면, Ops Manager 리소스 출시하다 요청하지 않은 것입니다. 패치가 spec.externalApplicationDatabaseRef를 null로 설정하다 하고 spec.applicationDatabase을 추가했는지 확인합니다.
애플리케이션 데이터베이스 버전이 일치하지 않음
회수된 StatefulSet가 동일한 바이너리를 유지하도록 spec.applicationDatabase.version를 애플리케이션 데이터베이스가 이미 실행 중인 버전으로 설정합니다.
MongoDB 리소스를 너무 일찍 삭제했습니다.
MongoDB 리소스 StatefulSet를 여전히 소유하고 있는 동안 삭제 하면 Kubernetes StatefulSet와 Ops Manager 리소스 와 공유하는 시크릿을 가비지 수집합니다. 복구하려면 보존된 영구 볼륨 클레임에서 애플리케이션 데이터베이스를 다시 생성합니다. 이 경로는 다운타임을 유발하고 애플리케이션 데이터베이스 자격 증명 순환시킵니다. 자세한 학습 은 Ops Manager 의 재해 복구 및 AppDB 리소스를 참조하세요.
다음 단계
외부 애플리케이션 데이터베이스를 다시 사용하려면 애플리케이션 데이터베이스를 외부 배포로 마이그레이션을 참조하세요.