MongoDB Ops Manager 리소스를 배포할 수 있습니다. 이 리소스는 외부 애플리케이션 데이터베이스를 사용하며, spec.role이 AppDB(으)로 설정된 MongoDB 사용자 지정 리소스이며, 두 번째 MongoDB Ops Manager 인스턴스가 프로젝트로 관리합니다. 이렇게 하면 MongoDB Ops Manager는 애플리케이션 데이터베이스를 백업하고 복원할 수 있습니다. 더 자세히 알아보려면, Ops Manager 애플리케이션 데이터베이스 백업을 참조하세요.
이 절차에서는 새 Ops Manager 인스턴스 배포합니다. 내부적으로 managed 애플리케이션 데이터베이스를 사용하는 기존 Ops Manager 인스턴스 변환하려면 애플리케이션 데이터베이스를 외부 배포로 마이그레이션을 참조하세요.
이 절차에서는 다음 리소스를 배포합니다.
고유의 내부적으로 managed 된 애플리케이션 데이터베이스를 가진 관리 MongoDB 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 관리자 시크릿을 생성합니다.
양쪽의 MongoDB 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}"
관리 MongoDB 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 시작하지 않습니다.
관리 MongoDB Ops Manager 인스턴스가 준비될 때까지 기다리세요.
내부적으로 managed 애플리케이션 데이터베이스 및 MongoDB 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 연산자는 리소스에 대해 SCRAM 인증을 구성합니다. 자세한 내용은 spec.role를 참조하세요.
프라이머리 MongoDB 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 배포서버의 백업을 활성화하려면, 이 리소스에서 spec.backup.enabled를 true으로 설정하고 스냅샷 저장을 구성합니다. 자세한 학습 은 Kubernetes 연산자로 파일 시스템 백업 저장 구성을 참조하세요.
프라이머리 MongoDB 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 연산자는 외부 애플리케이션 데이터베이스를 사용하는 MongoDB 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 데이터베이스 백업 구성을 참조하세요.