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

マルチ Kubernetes クラスター クイック スタート

クイック スタートを使用して、ノード クラスター、GKE(Google Kubernetes エンジン)、およびIstioサービス メッシュを使用して、3 つのKubernetesノード クラスターにMongoDBレプリカセットを配置します。

始める前に:

注意

次の手順では、複数の Kubernetes クラスターMongoDBデプロイを名前空間 mongodb という名前の単一の名前空間にスコープを設定します。MongoDBデプロイを構成して、複数の名前空間またはすべての名前空間のリソースを監視できます。

このビデオ チュートリアルでは、マルチ Kubernetes クラスター MongoDB 配置を作成する方法を紹介します。

所要時間: 12 分

複数の Kubernetes クラスターにわたる MongoDB レプリカセットの配置

クイック スタートを使用してマルチ Kubernetes クラスター MongoDB 配置を作成する前に、次のタスクを完了してください。

続行する前に、一般的な前提条件を満たしていることを確認してください。 詳細については、「一般的な前提条件 」を参照してください。

この例のように、クラスター名と、クラスターを配置する利用可能な GKE ゾーンを含む環境変数を設定します。

export MDB_GKE_PROJECT={GKE project name} export MDB_CENTRAL_CLUSTER_ZONE="us-west1-a" export MDB_CLUSTER_1_ZONE="us-west1-b" export MDB_CLUSTER_2_ZONE="us-east1-b" export MDB_CLUSTER_3_ZONE="us-central1-a" export MDB_CENTRAL_CLUSTER_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CENTRAL_CLUSTER_ZONE}_${MDB_CENTRAL_CLUSTER}" export MDB_CLUSTER_1_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_1_ZONE}_${MDB_CLUSTER_1}"export MDB_CLUSTER_2_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_2_ZONE}_${MDB_CLUSTER_2}"export MDB_CLUSTER_3_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_3_ZONE}_${MDB_CLUSTER_3}"

GKE(Google Kubernetes Engine)クラスターを設定します。

1

まだ行っていない場合は、Google Cloud Platformプロジェクトを作成し、プロジェクトでの請求を有効にして、アーティファクト レジストリと GKE API を有効にして、Google Cloud PlatformドキュメントのGoogle Kubernetes Engine クイックスタートの関連手順に従って Cloud シェルを起動します。 。

2

次の例のように、GKE ゾーン、ノード数、インスタンスタイプを指定して、 1 つの中央クラスターと 1 つ以上の ノード クラスター を作成します。

gcloud container clusters create $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"

中央およびノードの Kubernetes クラスターのユーザー認証情報を取得し、認証情報を保存します。 後でこれらの認証情報を使用して、これらのクラスターでkubectlコマンドを実行します。

次のコマンドを実行します。

gcloud container clusters get-credentials $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE

TLS証明書を使用して MongoDB のマルチ Kubernetes クラスターでレプリカセット接続を暗号化するかどうかに応じて、適切なタブを選択します。

このTLS-Encrypted Connectionsタブでは、次の手順を使用できます。

  • MongoDBMultiClusterリソースを配置

  • MongoDBMultiClusterリソースの TLS 証明書を更新する

これらの手順では、レプリカセット内の MongoDB ホスト間、およびクライアント アプリケーションと MongoDB 配置間で、 TLSで暗号化された接続を確立します。

開始する前に、 TLS暗号化の有効な証明書が必要です。

1

kubectlコマンドを実行して、 MongoDBMultiClusterリソース証明書を保存する新しいシークレットを作成します。

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-cert \ --cert=<resource-tls-cert> \ --key=<resource-tls-key>

注意

シークレットの前に<prefix>-<metadata.name>を付ける必要があります。

例として、配置を my-deployment と呼び出し、プレフィックスを mdb に設定した場合、クライアント TLS 通信用の TLS シークレットに mdb-my-deployment-cert という名前を付ける必要があります。 また、内部クラスター認証用の TLS シークレットには名前を付ける必要があります (有効にしている場合) mdb-my-deployment-clusterfile。

2

kubectl コマンドを実行して、CA を MongoDBMultiCluster リソースにリンクします。MongoDBMultiCluster リソースに対して、常に ca-pem と呼ばなければならない CA 証明書ファイルを指定します。

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create configmap custom-ca -from-file=ca-pem=<your-custom-ca-file>
3

デフォルトでは、Kubernetes 演算子のスコープはmongodb名前空間に限定されています。 次のコマンドを実行すると、 kubectl mongodbプラグインは次のようになります。

  • 中央クラスター 1 つ、メンバー クラスター 3 つ、各クラスターに mongodbというラベルの付いた名前空間を作成します。

  • すべてのノードクラスターを含むデフォルトの ConfigMap をハードコードされた名前mongodb-kubernetes-operator-member-listで作成します。 ConfigMap の名前を変更することはできません。

  • ノード クラスターでデータベースワークロードの実行中に必要なサービス アカウントとロールを作成します。

kubectl mongodbプラグインを実行します。

kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
4

Istio を使用している場合は、中央クラスターで次のコマンドを実行し、配置内の各メンバー クラスターのコンテキストを指定します。Istio でサイドカーインジェクションを有効にするには、次のコマンドを使用して、各ノードクラスターの mongodb 名前空間に istio-injection=enabled ラベルを追加します。別のサービス キャッシュを使用する場合は、作成された名前空間内のネットワーク トラフィックを処理するように構成します。

kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
5

まだ実行していない場合は、次のコマンドを実行して、デフォルトの名前空間の中央クラスターですべてのkubectlコマンドを実行します。

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAMEkubectl config set-context $(kubectl config current-context) \ --namespace=mongodb
6

Helm または kubectl を使用して、mongodb名前空間の中央クラスターにKubernetes演算子用のMongoDBコントロールを配置します。

  1. MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. Kubernetes用のMongoDB Helm Charts を使用して、 Kubernetes演算子を配置します。

    helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
7
  1. シークレットを作成すると、 Kubernetes Operator がMongoDB Ops Managerプロジェクト内のオブジェクトを作成および更新できるようになります。 詳細については、「 Kubernetes Operator の認証情報の作成 」を参照してください。

8
9

spec.credentials、spec.opsManager.configMapRef.name、およびセキュリティ設定を設定し、MongoDBMultiClusterリソースを配置します。次のコードサンプルでは、Istio でDNS プロキシを有効にするために duplicateServiceObjects が true に設定されています。

注意

Istio サービス メトリクスによるクラスター間での DNS 解決を有効にするために、このチュートリアルでは Kubernetes ポッドごとに 1 つの ClusterIP アドレスを持つサービス オブジェクトを作成します。

kubectl apply -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBMultiClustermetadata: name: multi-replica-setspec: version: 8.0.0 type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3EOF

Kubernetes Operator は、前の手順で作成したCAを含む ConfigMap を各ノード クラスターにコピーし、連結されたPEMシークレットを生成し、それをノード クラスターに配布します。

10
  1. ノードクラスターの場合は、次のコマンドを実行して、MongoDB ポッドが実行状態であることを確認します。

    kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb
    kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb
    kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb
  2. 中央クラスターで次のコマンドを実行し、 MongoDBMultiClusterリソースが実行状態であることを確認します。

    kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w

次の手順で、 TLS証明書を定期的に更新します。

1

次のkubectl コマンドを実行して、MongoDBMultiCluster リソースの証明書を保存する既存のシークレットを更新します。

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \--namespace=<metadata.namespace> \create secret tls <prefix>-<metadata.name>-cert \--cert=<resource-tls-cert> \--key=<resource-tls-key> \--dry-run=client \-o yaml |kubectl apply -f -

MongoDB レプリカセットを 3 つの Kubernetes ノード クラスターに配置した後、データベースユーザーを追加して、MongoDB database に接続できるようにします。 「データベースユーザーの管理 」を参照してください。