내부적으로 managed 애플리케이션 데이터베이스를 사용하는 Ops Manager 리소스 외부 애플리케이션 데이터베이스(spec.role가 AppDB로 설정하다 MongoDB 사용자 지정 리소스 사용하는 리소스로 변환할 수 있습니다. 이렇게 하면 Ops Manager 애플리케이션 데이터베이스를 백업하고 복원 할 수 있습니다. 자세한 학습 은 Ops Manager 애플리케이션 데이터베이스 백업을 참조하세요.
마이그레이션 은 기존 애플리케이션 데이터베이스 StatefulSet 및 해당 Persistent Volumes의 소유권을 Ops Manager 리소스 에서 MongoDB 리소스 로 다시 지정합니다. Kubernetes Operator는 데이터를 이동하거나 다시 생성하지 않으며, Ops Manager 포드를 다시 시작하지 않습니다.
마이그레이션 작동 방식
Ops Manager 리소스 내부적으로 managed 애플리케이션 데이터베이스로 시작하며, Kubernetes Operator는 <primary-om-name>-db이라는 StatefulSet를 소유합니다. 마이그레이션 다음과 같이 진행됩니다.
관리 Ops Manager 인스턴스 가 관리하는 프로젝트 에서
spec.role가AppDB로 설정하다 StatefulSet와 동일한 이름을 사용하여 MongoDB 리소스 생성합니다. MongoDB 리소스 아직 StatefulSet의 소유권을 가질 수 없으므로 애플리케이션 데이터베이스 StatefulSet의 소유권을 가져올 수 없다는 메시지와 함께Pending단계에 머물러 있습니다.Ops Manager 리소스 에
spec.externalApplicationDatabaseRef를 추가합니다. Kubernetes Operator는 Ops Manager 리소스의 소유자 참조를 제거하고 StatefulSet를 마이그레이션 준비 완료로 표시하여 StatefulSet를 분리합니다. 그러면 MongoDB 리소스 소유권을 갖습니다.
Kubernetes Operator는 동일한 호스트 이름을 사용하는 이전과 동일한 연결 문자열 계산하기 때문에 Ops Manager 포드가 다시 시작되지 않습니다.
전제 조건
시작하기 전에 다음 작업을 완료하세요.
Kubernetes Operator와
kubectl을(를) 설치합니다. 자세한 학습 은 Kubernetes 로 설치를 참조하세요.내부적으로 managed 애플리케이션 데이터베이스를 사용하는 프라이머리 Ops Manager 리소스 배포합니다. 이 리소스
spec.applicationDatabase를 설정하며, Kubernetes Operator는<primary-om-name>-db라는 이름의 StatefulSet를 소유하고 있습니다. 자세한 학습 은 Ops Manager 리소스 배포를 참조하세요.Running단계에 있고 외부 애플리케이션 데이터베이스에 대한 프로젝트 소유하는 관리 Ops Manager 리소스 배포합니다. 자세한 학습 은 외부 애플리케이션 데이터베이스로 Ops Manager 배포를 참조하세요.Kubernetes Operator가 관리 Ops Manager 리소스 대한 프로그래밍 방식 API 키 시크릿을 생성했는지 확인합니다. Kubernetes Operator는 이 시크릿의 이름을
<namespace>-<management-om-name>-admin-key로 지정합니다.
고려 사항
마이그레이션 하기 전에 다음 고려 사항을 검토하세요.
MongoDB 리소스 에 설정하다 애플리케이션 데이터베이스 버전은 내부적으로 managed 애플리케이션 데이터베이스가 실행하는 버전과 일치해야 하며, 관리 Ops Manager 인스턴스 가 제공하는 MongoDB 버전이어야 합니다.
Kubernetes Operator는 마이그레이션 중에는
spec.applicationDatabase.passwordSecretKeyRef을(를) 지원 하지 않습니다. Kubernetes Operator는 새 비밀번호를 생성하고 사용자가 제공한 모든 비밀번호를 로테이션합니다.MongoDB 리소스 구성이 내부적으로 managed 애플리케이션 데이터베이스 구성과 다른 경우(예: 다른 포드 템플릿 또는 다른 컨테이너 설정하다 ) 애플리케이션 데이터베이스를 1~2분 동안 사용하지 못할 수 있습니다. 두 구성이 의미적으로 동일하더라도 애플리케이션 데이터베이스는 계속 사용할 수 있습니다.
Kubernetes Operator는 단일 Kubernetes 클러스터 에서만 마이그레이션 지원합니다.
절차
마이그레이션 을 위한 환경 변수를 설정합니다.
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="${MDB_NS}-${MANAGEMENT_OM_NAME}-admin-key" export APPDB_PROJECT_CONFIGMAP="${APPDB_NAME}-config" export APPDB_PROJECT_NAME="external-appdb"
시작 상태 확인합니다.
프라이머리 Ops Manager 리소스 와 내부적으로 managed 애플리케이션 데이터베이스가
Running단계에 있는지 확인합니다.kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.opsManager.phase} / appdb={.status.applicationDatabase.phase}{"\n"}' Ops Manager 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' 이 명령은
MongoDBOpsManager/${PRIMARY_OM_NAME}을 반환합니다.
외부 애플리케이션 데이터베이스에 대한 MongoDB 리소스 생성합니다.
리소스 기존 애플리케이션 데이터베이스 StatefulSet와 동일한 이름을 지정합니다.
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
MongoDB 리소스 소유권을 기다리는지 확인합니다.
Ops Manager 리소스 StatefulSet를 릴리스할 때까지 MongoDB 리소스 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"}'
상태 메시지는 리소스 애플리케이션 데이터베이스 StatefulSet의 소유권을 가질 수 없다고 보고합니다.
Ops Manager 리소스 에 외부 애플리케이션 데이터베이스 참조를 추가합니다.
kubectl patch om "${PRIMARY_OM_NAME}" \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --type merge \ -p "{\"spec\":{\"externalApplicationDatabaseRef\":{\"name\":\"${APPDB_NAME}\",\"kind\":\"MongoDB\"}}}"
동일한 패치에서 spec.applicationDatabase를 제거 할 수 있습니다. 그대로 두면 아무런 효과가 없습니다.spec.externalApplicationDatabaseRef를 설정하다 Kubernetes Operator가 이 리소스 에 대한 내부 애플리케이션 데이터베이스 관리를 중지합니다.
마이그레이션 을 확인합니다.
MongoDB 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 있는지 확인합니다.
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' 이 명령은
MongoDB/${APPDB_NAME}을 반환합니다.Ops Manager 리소스 애플리케이션 데이터베이스를
Disabled(으)로 보고하는지, 즉 Kubernetes Operator가 더 이상 내부 애플리케이션 데이터베이스를 관리하지 않는지 확인합니다.kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.applicationDatabase.phase}{"\n"}' 기간 및 재시작 횟수를 확인하여 Ops Manager pod가 다시 시작되지 않았는지 확인합니다.
kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"
일반적인 마이그레이션 문제
MongoDB 리소스가 버전 오류를 보고합니다.
MongoDB 리소스 MongoDB 버전을 사용할 수 없다는 메시지와 함께 Failed를 보고하는 경우,spec.version를 관리 Ops Manager 인스턴스 가 제공하는 버전으로 설정하다 , Ops Manager 버전과 애플리케이션 데이터베이스 버전을 동일한 주요 버전으로 유지하세요. 버전.
패치 후에도 MongoDB 리소스가 보류 중 상태로 유지
Kubernetes Operator는 먼저 StatefulSet를 분리해야 MongoDB 리소스 소유권을 갖습니다. 프라이머리 Ops Manager 리소스 에 spec.externalApplicationDatabaseRef를 적용했고 spec.externalApplicationDatabaseRef.name의 값이 정확히 <primary-om-name>-db인지 확인합니다.
MongoDB 리소스가 프로젝트 오류를 보고합니다.
프로젝트 또는 등록 오류로 인해 MongoDB 리소스 Pending 단계로 유지되는 경우, 리소스 생성할 때 관리 Ops Manager 공개 API 준비되지 않았을 수 있습니다. 관리 Ops Manager 리소스 Running 단계에 있고 해당 API 요청에 응답하는지 확인한 다음 리소스 를 다시 조정합니다.
마이그레이션 중 Ops Manager Pod 다시 시작
Ops Manager 포드가 다시 시작되면 계산된 연결 문자열 변경됩니다. 기본값 포트를 사용하는 복제본 세트 의 경우 연결 문자열 마이그레이션 전후 동일합니다. Kubernetes Operator는 이 마이그레이션 에 대해 기본이 아닌 포트를 지원 하지 않습니다.
다음 단계
외부 애플리케이션 데이터베이스를 백업하려면 관리 Ops Manager 인스턴스 가 관리하는 프로젝트 의 MongoDB 리소스 에서 백업 활성화 . 자세한 학습 은 MongoDB 데이터베이스 백업 구성을 참조하세요.
이 마이그레이션 되돌리려면 Ops Manager 로 외부 애플리케이션 데이터베이스 반환을 참조하세요.