외부 애플리케이션 데이터베이스를 사용하는 Ops Manager 리소스 배포 할 수 있습니다: spec.role가 AppDB로 설정하다 MongoDB 사용자 지정 리소스 이며, 두 번째 Ops Manager 인스턴스 프로젝트 로 관리합니다. 이렇게 하면 Ops Manager 애플리케이션 데이터베이스를 백업하고 복원 할 수 있습니다. 자세한 학습 은 Ops Manager 애플리케이션 데이터베이스 백업을 참조하세요.
이 절차에서는 새 Ops Manager 인스턴스 배포합니다. 내부적으로 managed 애플리케이션 데이터베이스를 사용하는 기존 Ops Manager 인스턴스 변환하려면 애플리케이션 데이터베이스를 외부 배포로 마이그레이션을 참조하세요.
이 절차에서는 다음 리소스를 배포합니다.
내부적으로 managed 자체 애플리케이션 데이터베이스가 있는 관리 Ops Manager 인스턴스 .이 인스턴스 외부 애플리케이션 데이터베이스가 포함된 프로젝트 관리합니다.
외부 애플리케이션 데이터베이스:
spec.role이(가)AppDB(으)로 설정하다 MongoDB 복제본 세트 (<primary-om-name>-db)입니다.spec.applicationDatabase를 생략하고spec.externalApplicationDatabaseRef로외부 애플리케이션 데이터베이스를 참조하는 프라이머리 Ops Manager 인스턴스 .
전제 조건
시작하기 전에 다음 작업을 완료하세요.
기본값
StorageClass를 사용하여 Kubernetes 클러스터 배포합니다.kubectl및helm를 설치하고 해당 클러스터 에 맞게 구성합니다.Kubernetes Operator Helm 차트 에 대한 액세스 얻습니다.
고려 사항
Ops Manager 버전과 애플리케이션 데이터베이스 버전을 일관적인 쌍으로 설정합니다. 관리 Ops Manager 인스턴스 외부 애플리케이션 데이터베이스를 관리하므로 애플리케이션 데이터베이스 버전은 관리 Ops Manager 인스턴스 가 버전 매니페스트 에서 제공하는 MongoDB 버전이어야 합니다. 예시 를 들어 8.0.x Ops Manager 인스턴스 8.0.x MongoDB 버전을 제공하지만 7.0.x Ops Manager 인스턴스 제공하지 않습니다.
절차
배포서버 위한 환경 변수를 설정합니다.
export K8S_CTX="<your-kube-context>" export MDB_NS="mongodb" export OPERATOR_HELM_CHART="oci://quay.io/mongodb/helm-charts/mongodb-kubernetes" export OM_VERSION="8.0.7" export APPDB_VERSION="8.0.5-ent" export MANAGEMENT_OM_NAME="management-om" export PRIMARY_OM_NAME="primary-om" export APPDB_NAME="${PRIMARY_OM_NAME}-db" 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" export APPDB_CONNECTION_STRING_SECRET="${APPDB_NAME}-connection-string" export OM_ADMIN_EMAIL="admin@example.com" export OM_ADMIN_PASSWORD="<your-password>" export OM_ADMIN_FIRST_NAME="Admin" export OM_ADMIN_LAST_NAME="User"
Kubernetes Operator는 외부 애플리케이션 데이터베이스의 이름을 <primary-om-name>-db으로 지정해야 하며, 이것이 APPDB_NAME이 PRIMARY_OM_NAME에서 파생된 이유입니다.
Ops Manager 관리자 시크릿을 생성합니다.
두 Ops Manager 리소스 모두 spec.adminCredentials로 이 시크릿을 참조합니다.
kubectl create secret generic ops-manager-admin-secret \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --from-literal=Username="${OM_ADMIN_EMAIL}" \ --from-literal=Password="${OM_ADMIN_PASSWORD}" \ --from-literal=FirstName="${OM_ADMIN_FIRST_NAME}" \ --from-literal=LastName="${OM_ADMIN_LAST_NAME}"
관리 Ops Manager 인스턴스 배포합니다.
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ${MANAGEMENT_OM_NAME} spec: replicas: 1 version: ${OM_VERSION} adminCredentials: ops-manager-admin-secret applicationDatabase: members: 3 version: ${APPDB_VERSION} backup: enabled: false configuration: automation.versions.source: mongodb mms.ignoreInitialUiSetup: "true" mms.adminEmailAddr: admin@example.com mms.fromEmailAddr: admin@example.com mms.replyToEmailAddr: admin@example.com mms.mail.hostname: email-smtp.us-east-1.amazonaws.com mms.mail.port: "465" mms.mail.ssl: "true" mms.mail.transport: smtp mms.minimumTLSVersion: TLSv1.2 EOF
mms.* 메일 설정이 필요합니다. mms.ignoreInitialUiSetup가 true인 경우, mms.fromEmailAddr 및 관련 메일 설정이 없는 한 Ops Manager 실행 전 검사는 Ops Manager 시작하지 않습니다.
관리 Ops Manager 인스턴스 준비될 때까지 기다립니다.
내부적으로 managed 애플리케이션 데이터베이스와 Ops Manager 리소스 나올 때까지 기다립니다.
kubectl wait --for=jsonpath='{.status.applicationDatabase.phase}'=Running \ om/"${MANAGEMENT_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1200s kubectl wait --for=jsonpath='{.status.opsManager.phase}'=Running \ om/"${MANAGEMENT_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1800s Ops Manager 공개 API 요청에 응답하는지 확인합니다.
Running의opsManager.phase는 Ops Manager 포드가 작동 중이지만 Kubernetes Operator가 애플리케이션 데이터베이스 프로젝트 생성하는 데 사용하는 API 몇 초 정도 지연될 수 있음을 의미합니다.401응답은 예상되는 인증되지 않은 응답이며 API 준비되었음을 의미합니다.om_pod="${MANAGEMENT_OM_NAME}-0" until [ "$(kubectl exec "${om_pod}" -c mongodb-ops-manager --context "${K8S_CTX}" -n "${MDB_NS}" -- \ curl -s -o /dev/null -w '%{http_code}' \ "http://$(kubectl get pod "${om_pod}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{.status.podIP}'):8080/api/public/v1.0" 2>/dev/null)" = "401" ]; do echo "waiting for management Ops Manager public API..."; sleep 10 done Kubernetes Operator가 관리 Ops Manager 인스턴스 에 대한 프로그래밍 방식 API 키 시크릿을 생성했는지 확인합니다.
kubectl get secret "${MANAGEMENT_OM_ADMIN_KEY_SECRET}" \ --context "${K8S_CTX}" -n "${MDB_NS}"
외부 애플리케이션 데이터베이스를 생성합니다.
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 EOF kubectl wait --for=jsonpath='{.status.phase}'=Running \ mdb/"${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1200s
spec.role를 AppDB로 설정하다 Kubernetes Operator가 리소스 에 대한 SCRAM 인증 구성합니다. 자세한 학습 은 spec.role를 참조하세요.
프라이머리 Ops Manager 인스턴스 배포합니다.
이 리소스 spec.applicationDatabase를 생략하고 대신 외부 애플리케이션 데이터베이스를 참조합니다.
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBOpsManager metadata: name: ${PRIMARY_OM_NAME} spec: replicas: 1 version: ${OM_VERSION} adminCredentials: ops-manager-admin-secret externalApplicationDatabaseRef: name: ${APPDB_NAME} kind: MongoDB backup: enabled: false configuration: automation.versions.source: mongodb mms.ignoreInitialUiSetup: "true" mms.adminEmailAddr: admin@example.com mms.fromEmailAddr: admin@example.com mms.replyToEmailAddr: admin@example.com mms.mail.hostname: email-smtp.us-east-1.amazonaws.com mms.mail.port: "465" mms.mail.ssl: "true" mms.mail.transport: smtp mms.minimumTLSVersion: TLSv1.2 EOF
MongoDB deployment에 대한 백업 활성화 하려면 이 리소스 에서 spec.backup.enabled를 true로 설정하다 스냅샷 저장 구성합니다. 자세한 학습 은 Kubernetes Operator로 파일 시스템 백업 저장소 구성을 참조하세요.
프라이머리 Ops Manager 인스턴스 준비될 때까지 기다립니다.
kubectl wait --for=jsonpath='{.status.opsManager.phase}'=Running \ om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1800s kubectl wait --for=jsonpath='{.status.applicationDatabase.phase}'=Disabled \ om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=600s
Kubernetes Operator는 외부 애플리케이션 데이터베이스를 사용하는 Ops Manager 리소스 에 대해 내부 애플리케이션 데이터베이스를 관리 하지 않으므로 status.applicationDatabase.phase은(는) Disabled을(를) 보고합니다. 이는 예상된 결과이며 오류가 아닙니다.
배포서버를 확인합니다.
관리 Ops Manager pod, 외부 애플리케이션 데이터베이스 pod 및 프라이머리 Ops Manager pod가 실행 중인지 확인합니다.
kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}" MongoDB 리소스 애플리케이션 데이터베이스 StatefulSet를 소유하고 프라이머리 Ops Manager 리소스 소유하지 않는지 확인합니다.
kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \ -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}' 이 명령은
MongoDB/${APPDB_NAME}을 반환합니다.Kubernetes Operator가 프라이머리 Ops Manager 인스턴스 에 대한 연결 문자열 시크릿을 생성했는지 확인합니다.
kubectl get secret "${APPDB_CONNECTION_STRING_SECRET}" \ --context "${K8S_CTX}" -n "${MDB_NS}"
일반적인 외부 애플리케이션 데이터베이스 문제
MongoDB 리소스가 버전 오류를 보고합니다.
외부 애플리케이션 데이터베이스가 MongoDB 버전을 사용할 수 없다는 메시지와 함께 Failed를 보고하는 경우,spec.version를 관리 Ops Manager 인스턴스 가 제공하는 버전으로 설정하다 . Ops Manager 버전과 애플리케이션 데이터베이스 버전을 동일한 주요 버전으로 유지합니다. 관리 Ops Manager 인스턴스의 자체 내부 managed 애플리케이션 데이터베이스는 automation.versions.source를 mongodb로 설정하다 때 바이너리를 직접 다운로드하기 때문에 영향을 받지 않습니다.
외부 애플리케이션 데이터베이스는 보류 상태로 유지
외부 애플리케이션 데이터베이스가 Pending 단계에 있고 MongoDB Agent 자동화 구성을 수신하지 않는 경우, 관리 Ops Manager 공개 API 요청을 처리하기 전에 MongoDB 리소스 생성했을 수 있습니다. Kubernetes Operator에서 프로젝트 생성할 수 없습니다.API 준비 확인이 401를 반환하는지 확인한 다음 리소스 를 다시 조정합니다.
연산자가 외부 애플리케이션 데이터베이스 참조를 거부함
spec.externalApplicationDatabaseRef.name의 값은 정확히 <primary-om-name>-db이어야 하며, MongoDB 리소스 Ops Manager 리소스 와 동일한 네임스페이스 에 있어야 합니다.
다음 단계
외부 애플리케이션 데이터베이스를 백업하려면 관리 Ops Manager 인스턴스 가 관리하는 프로젝트 의 MongoDB 리소스 에서 백업 활성화 . 자세한 학습 은 MongoDB 데이터베이스 백업 구성을 참조하세요.