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

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

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

始める前に:

注意

The following procedures scope your multi-Kubernetes cluster MongoDB deployment to a single namespace named mongodb. You can configure your multi-Kubernetes cluster MongoDB deployment to watch resources in multiple namespaces or all namespaces.

このビデオ チュートリアルでは、マルチ 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>を付ける必要があります。

For example, if you call your deployment my-deployment and you set the prefix to mdb, you must name the TLS secret for the client TLS communications mdb-my-deployment-cert. Also, you must name the TLS secret for internal cluster authentication (if enabled) mdb-my-deployment-clusterfile.

2

Run the kubectl command to link your CA to your MongoDBMultiCluster resource. Specify the CA certificate file that you must always name ca-pem for the MongoDBMultiCluster resource:

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

If you're using Istio, run the following command on the operator cluster, specifying the context for each of the member clusters in the deployment. To enable sidecar injection in Istio, the following commands add the istio-injection=enabled labels to the mongodb namespaces on each member cluster. If you use another service mesh, configure it to handle network traffic in the created namespaces.

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
  1. Kubernetes Operator カスタム リソースを適用します。

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml
  2. Kubernetes Operator YAML テンプレートをダウンロードします。

    curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml
  3. オプション: Kubernetes Operator YAML テンプレートをカスタマイズします。

    任意のKubernetes Operator インストール設定については、 「 Kubernetes Operator kubernetes および oc インストール設定用のMongoDBコントロール 」を参照してください。

  4. Kubernetes Operator YAML ファイルを適用します。

    kubectl apply -f operator.yaml
  5. Kubernetes Operator が配置されていることを確認します。

    Kubernetes Operator が正しくインストールされたことを確認するには、次のコマンドを実行し、出力を確認します。

    kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace>
    oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace>

    デフォルトでは、配置はmongodb名前空間に存在します。 次のエラー メッセージが表示される場合は、正しい名前空間を使用していることを確認してください。

    Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found

    Kubernetes Operator のトラブルシューティングについては、「 Kubernetes Operator からのログの確認 」やその他のトラブルシューティング トピックを参照してください。

    重要

    Kubernetes Operator または名前空間を削除する必要がある場合は、まずMongoDB リソースを削除する必要があります。

7
  1. シークレットを作成すると、 Kubernetes Operator がMongoDB Ops Managerプロジェクト内のオブジェクトを作成および更新できるようになります。 詳細については、「 Kubernetes Operator の認証情報の作成 」を参照してください。

8
9

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

注意

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

Run this kubectl command to renew an existing secret that stores the certificates for the MongoDBMultiCluster resource:

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 ホスト間、およびクライアント・アプリケーションと MongoDB 配置間の接続は暗号化されません。

1

デフォルトでは、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
2

If you're using Istio, run the following command on the operator cluster, specifying the context for each of the member clusters in the deployment. To enable sidecar injection in Istio, the following commands add the istio-injection=enabled labels to the mongodb namespaces on each member cluster. If you use another service mesh, configure it to handle network traffic in the created namespaces.

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
3

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

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME
kubectl config set-context $(kubectl config current-context) \
--namespace=mongodb
4

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
  1. Kubernetes Operator カスタム リソースを適用します。

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml
  2. Kubernetes Operator YAML テンプレートをダウンロードします。

    curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml
  3. オプション: Kubernetes Operator YAML テンプレートをカスタマイズします。

    任意のKubernetes Operator インストール設定については、 「 Kubernetes Operator kubernetes および oc インストール設定用のMongoDBコントロール 」を参照してください。

  4. Kubernetes Operator YAML ファイルを適用します。

    kubectl apply -f operator.yaml
  5. Kubernetes Operator が配置されていることを確認します。

    Kubernetes Operator が正しくインストールされたことを確認するには、次のコマンドを実行し、出力を確認します。

    kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace>
    oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace>

    デフォルトでは、配置はmongodb名前空間に存在します。 次のエラー メッセージが表示される場合は、正しい名前空間を使用していることを確認してください。

    Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found

    Kubernetes Operator のトラブルシューティングについては、「 Kubernetes Operator からのログの確認 」やその他のトラブルシューティング トピックを参照してください。

    重要

    Kubernetes Operator または名前空間を削除する必要がある場合は、まずMongoDB リソースを削除する必要があります。

5
  1. シークレットを作成すると、 Kubernetes Operator がMongoDB Ops Managerプロジェクト内のオブジェクトを作成および更新できるようになります。 詳細については、「 Kubernetes Operator の認証情報の作成 」を参照してください。

6
7

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

注意

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シークレットを生成し、それをノード クラスターに配布します。

8
  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

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