AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.

외부 애플리케이션 데이터베이스를 사용하여 MongoDB Ops Manager 배포

MongoDB Ops Manager 리소스를 배포할 수 있습니다. 이 리소스는 외부 애플리케이션 데이터베이스를 사용하며, spec.role이 AppDB(으)로 설정된 MongoDB 사용자 지정 리소스이며, 두 번째 MongoDB Ops Manager 인스턴스가 프로젝트로 관리합니다. 이렇게 하면 MongoDB Ops Manager는 애플리케이션 데이터베이스를 백업하고 복원할 수 있습니다. 더 자세히 알아보려면, Ops Manager 애플리케이션 데이터베이스 백업을 참조하세요.

이 절차는 새로운 MongoDB Ops Manager 인스턴스를 배포합니다. 내부적으로 managed되는 Application Database를 사용하는 기존 MongoDB Ops Manager 인스턴스를 변환하려면 Application Database를 외부 배포서버로 마이그레이션을 참조하세요.

이 절차는 다음 리소스를 배포합니다.

  • 고유의 내부적으로 managed 된 애플리케이션 데이터베이스를 가진 관리 MongoDB Ops Manager 인스턴스 이 인스턴스는 외부 애플리케이션 데이터베이스를 포함하는 프로젝트를 관리합니다.

  • 외부 애플리케이션 데이터베이스: spec.role이(가) AppDB(으)로 설정된 MongoDB 복제본 세트(이름: <primary-om-name>-db).

  • spec.externalApplicationDatabaseRef를 생략하고 와 함께 외부 애플리케이션 데이터베이스를 참조하는 프라이머리 MongoDB spec.applicationDatabase Ops Manager 인스턴스입니다.

시작하기 전에 다음 작업을 완료하세요.

  • 기본값 StorageClass을 사용하여 Kubernetes 클러스터 배포.

  • kubectl과 helm을 설치하고 해당 클러스터에 맞게 구성합니다.

  • Kubernetes 연산자 Helm 차트에 대한 액세스 권한을 얻습니다.

Ops Manager 버전과 애플리케이션 데이터베이스 버전을 일관적인 쌍으로 설정합니다. 관리 MongoDB Ops Manager 인스턴스는 외부 애플리케이션 데이터베이스를 관리하므로 애플리케이션 데이터베이스 버전은 관리 MongoDB Ops Manager 인스턴스가 버전 매니페스트에서 제공하는 MongoDB 버전이어야 합니다. 예시, 8.0.x MongoDB Ops Manager 인스턴스는 8.0.x를 제공합니다. MongoDB 버전이지만 7.0.x MongoDB Ops Manager 인스턴스는 그렇지 않습니다. 호환되는 쌍을 찾으려면 애플리케이션 데이터베이스 호환성 매트릭스를 참조하세요.

1
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에서 파생됩니다.

2
kubectl create namespace "${MDB_NS}" --context "${K8S_CTX}"
3
helm upgrade --install --kube-context "${K8S_CTX}" \ --namespace "${MDB_NS}" --create-namespace \ mongodb-kubernetes "${OPERATOR_HELM_CHART}" kubectl rollout status deployment/mongodb-kubernetes-operator \ --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=300s
4

양쪽의 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}"
5
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBOpsManagermetadata: 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.2EOF

mms.* 메일 설정이 필요합니다. mms.ignoreInitialUiSetup이(가) true인 경우, mms.fromEmailAddr 및 관련 메일 설정이 없으면 MongoDB Ops Manager 사전 검사에서 MongoDB Ops Manager가 시작되지 않습니다.

6
  1. 내부적으로 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
  2. MongoDB Ops Manager 공개 API가 요청에 응답하는지 확인하세요. opsManager.phase 의 Running는 MongoDB Ops Manager 팟이 작동 중이지만 Kubernetes 연산자가 애플리케이션 데이터베이스 프로젝트를 만들때 사용하는 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 10done
  3. Kubernetes 연산자가 관리 MongoDB Ops Manager 인스턴스용 프로그래밍 방식 API 키 보안 비밀을 생성했는지 확인합니다.

    kubectl get secret "${MANAGEMENT_OM_ADMIN_KEY_SECRET}" \ --context "${K8S_CTX}" -n "${MDB_NS}"
7
kubectl create configmap "${APPDB_PROJECT_CONFIGMAP}" \ --context "${K8S_CTX}" -n "${MDB_NS}" \ --from-literal=baseUrl="${MANAGEMENT_OM_URL}" \ --from-literal=projectName="${APPDB_PROJECT_NAME}" \ --from-literal=orgId=""
8
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBmetadata: 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: trueEOF 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를 참조하세요.

9

이 리소스는 spec.applicationDatabase를 생략하고 대신 외부 애플리케이션 데이터베이스를 참조합니다.

kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBOpsManagermetadata: 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.2EOF

MongoDB 배포서버의 백업을 활성화하려면, 이 리소스에서 spec.backup.enabled를 true으로 설정하고 스냅샷 저장을 구성합니다. 자세한 학습 은 Kubernetes 연산자로 파일 시스템 백업 저장 구성을 참조하세요.

10
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이(가) 보고됩니다. 이것은 예상되는 동작이며 오류가 아닙니다.

11
  1. 관리 MongoDB Ops Manager 포드, 외부 애플리케이션 데이터베이스 포드 및 프라이머리 MongoDB Ops Manager 포드가 실행 중인지 확인합니다.

    kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"
  2. MongoDB 리소스가 애플리케이션 데이터베이스 StatefulSet을 소유하고 있으며, 프라이머리 MongoDB 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}을(를) 반환합니다.

  3. Kubernetes Operator가 프라이머리 Ops Manager 인스턴스용 연결 문자열 보안 비밀을 생성했는지 확인합니다.

    kubectl get secret "${APPDB_CONNECTION_STRING_SECRET}" \ --context "${K8S_CTX}" -n "${MDB_NS}"

외부 애플리케이션 데이터베이스가 MongoDB 버전을 사용할 수 없다는 메시지와 함께 Failed을(를) 보고하는 경우, spec.version을(를) 관리 MongoDB Ops Manager 인스턴스가 제공하는 버전으로 설정하세요. MongoDB Ops Manager 버전과 애플리케이션 데이터베이스 버전을 동일한 메이저 버전으로 유지하세요. 관리 MongoDB Ops Manager 인스턴스 자체의 내부적으로 managed되는 애플리케이션 데이터베이스는 영향을 받지 않습니다. automation.versions.source을(를) mongodb(으)로 설정하면 바이너리를 직접 다운로드하기 때문입니다.

외부 애플리케이션 데이터베이스가 Pending 단계에 머물러 있고 MongoDB Agent가 자동화 구성을 받지 못하는 경우, 관리 MongoDB Ops Manager 공개 API가 요청을 처리하고 있기 전에 MongoDB 리소스를 만들었을 수 있습니다. Kubernetes 연산자가 프로젝트를 만들 수 없습니다. API 준비 확인이 401을(를) 반환하는지 확인한 다음 리소스를 다시 재조정합니다.

spec.externalApplicationDatabaseRef.name의 값은 정확히 <primary-om-name>-db이어야 하며, MongoDB 리소스는 MongoDB Ops Manager 리소스와 동일한 네임스페이스에 있어야 합니다.

외부 애플리케이션 데이터베이스를 백업하려면 관리 MongoDB Ops Manager 인스턴스가 관리하는 프로젝트의 MongoDB 리소스에서 백업을 활성화합니다. 자세한 내용은 MongoDB 데이터베이스 백업 구성을 참조하세요.