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

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

クイック スタートを使用して、GKE(Google Kubernetes Engine)と 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を リソースにリンクします。 リソースに対して常に という名前を付ける必要がある CA 証明書ファイルを指定します。ca-pemMongoDBMultiCluster

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プラグインは次のようになります。

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 でサイドカーインジェクションを有効にするには、次のコマンドを使用して、各ノードクラスターのistio-injection=enabled mongodb名前空間に ラベルを追加します。別のサービス キャッシュを使用する場合は、作成された名前空間内のネットワーク トラフィックを処理するように構成します。

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_NAME
kubectl 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
8
9

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

注意

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

kubectl apply -f - <<EOF
apiVersion: mongodb.com/v1
kind: MongoDBMultiCluster
metadata:
name: multi-replica-set
spec:
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: 3
EOF

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 に接続できるようにします。 「データベースユーザーの管理 」を参照してください。