AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDB Ops Manager を外部アプリケーションデータベースで配置する

外部アプリケーションデータベースを使用する Ops Manager リソースを配置する。これは、spec.role が AppDB に設定された MongoDB カスタム リソースであり、2 番目の Ops Manager インスタンスがプロジェクトとしてマネージドします。これにより、Ops Manager はアプリケーションデータベースをバックアップおよび復元することができます。詳細については、MongoDB Ops Manager アプリケーションデータベースのバックアップ。を参照してください。

この手順では、新しいMongoDB Ops Managerインスタンスを配置します。内部でマネージドされているアプリケーションデータベースを使用する既存のOps Managerインスタンスを変換するには、「アプリケーションデータベースを外部配置に移行する」を参照してください。

この手順では、以下のリソースを配置します。

  • **マネジメント** MongoDB Ops Manager インスタンスで、独自の内部マネージドアプリケーションデータベースを持つもの。このインスタンスは、外部アプリケーションデータベースを含むプロジェクトを管理します。

  • 外部アプリケーションデータベース: spec.role が AppDB に設定された、<primary-om-name>-db という名前の MongoDB レプリカセット。

  • spec.externalApplicationDatabaseRefを省略し、 で外部アプリケーションデータベースを参照するspec.applicationDatabase プライマリ MongoDB Ops Managerインスタンス。

始める前に、次のタスクを完了してください。

  • Kubernetes クラスターをデフォルトの StorageClass で配置する。

  • kubectl と helm をインストールし、そのクラスターに合わせて構成します。

  • Kubernetes 演算子 Helmチャートへのアクセスを取得します。

MongoDB Ops Managerのバージョンとアプリケーションデータベースのバージョンをコンシステントなペアに設定します。マネジメントMongoDB Ops Managerインスタンスは外部アプリケーションデータベースをマネージドするため、アプリケーションデータベースのバージョンは、マネジメントMongoDB Ops Managerインスタンスがバージョンマニフェストで提供するMongoDBバージョンである必要があります。例として、8.0.xMongoDB Ops Managerインスタンスは8.0.xを提供しますが、.xMongoDBバージョンは提供しませんが、7.0.xMongoDB 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 演算子では、外部のアプリケーションデータベースの名前を<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. 内部でマネージドされているアプリケーションデータベースと 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 演算子がマネジメント 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

外部アプリケーションデータベースを使用する MongoDB Ops Manager リソースに対して、Kubernetes 演算子は内部アプリケーションデータベースを管理しません。そのため、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 演算子がプライマリ MongoDB 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インスタンス独自の内部でマネージドされているアプリケーションデータベースは影響を受けません。これは、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 データベース バックアップの設定を参照してください。