クイック スタートを使用して、GKE(Google Kubernetes Engine)と Istio サービス キャッシュを使用して、3 つのKubernetesノード クラスターにMongoDBレプリカセットを配置します。
始める前に:
- Kubernetes クラスターのマルチ配置について学ぶ 
- マルチKubernetesクラスターのサービスとツールのリストを確認する 
- 前提条件を完了する 
注意
実際に見て学びたい方に
このビデオ チュートリアルでは、マルチ Kubernetes クラスター MongoDB 配置を作成する方法を紹介します。
所要時間: 12 分
前提条件
クイック スタートを使用してマルチ Kubernetes クラスター MongoDB 配置を作成する前に、次のタスクを完了してください。
一般的な前提条件の確認
続行する前に、一般的な前提条件を満たしていることを確認してください。 詳細については、「一般的な前提条件 」を参照してください。
環境変数と GKE ゾーンを設定する
この例のように、クラスター名と、クラスターを配置する利用可能な 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 クラスターを設定する
GKE(Google Kubernetes Engine)クラスターを設定します。
Google Cloud Platformアカウントを設定します。
まだ行っていない場合は、Google Cloud Platformプロジェクトを作成し、プロジェクトでの請求を有効にして、アーティファクト レジストリと GKE API を有効にして、Google Cloud PlatformドキュメントのGoogle Kubernetes Engine クイックスタートの関連手順に従って Cloud シェルを起動します。 。
演算子クラスターとノードクラスターを作成します。
次の例のように、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 
MongoDB MultiCluster リソースの配置
TLS証明書を使用して、複数の Kubernetes クラスター MongoDB 配置でレプリカセット接続を暗号化するかどうかに応じて、適切なタブを選択します。
この TLS-Encrypted Connectionsタブでは、次の手順を使用できます。
- MongoDBMultiClusterリソースを配置
- MongoDBMultiClusterリソースの TLS 証明書を更新する
これらの手順では、レプリカセット内の MongoDB ホスト間、およびクライアント アプリケーションと MongoDB 配置間で、 TLSで暗号化された接続を確立します。
開始する前に、 TLS暗号化の有効な証明書が必要です。
リソースの TLSMongoDBMultiCluster 証明書のシークレットを作成します。
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に名前を付ける必要があります。
ConfigMap を作成して、CA をMongoDBMultiCluster リソースにリンクします。
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> 
kubectl mongodbプラグインを実行します。
デフォルトでは、Kubernetes 演算子のスコープはmongodb名前空間に限定されています。 次のコマンドを実行すると、 kubectl mongodbプラグインは次のようになります。
- 1 つの演算子クラスター、3 つのメンバークラスター、および各クラスターに - mongodbというラベルの付いた名前空間を作成します。
- すべてのノードクラスターを含むデフォルトの ConfigMap をハードコードされた名前 - mongodb-enterprise-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 
オプション: 各ノード クラスターで Istio インジェクション Webhook を設定します。
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 
演算子クラスターにMongoDB Enterprise Kubernetes演算子 を配置します。
Helm または kubectl を使用して、mongodb名前空間の演算子クラスターにMongoDB Enterprise Kubernetes演算子を配置します。
- MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。 - helm repo add mongodb https://mongodb.github.io/helm-charts 
- Kubernetes用のMongoDB Helm Charts を使用して、 Kubernetes演算子を配置します。 - helm upgrade \ - --install \ - mongodb-enterprise-operator-multi-cluster \ - mongodb/enterprise-operator \ - --namespace mongodb \ - --set namespace=mongodb \ - --version <mongodb-kubernetes-operator-version> \ - --set operator.name=mongodb-enterprise-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 
- Kubernetes Operator カスタム リソースを適用します。 - kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml 
- Kubernetes Operator YAML テンプレートをダウンロードします。 - curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 
- オプション: Kubernetes Operator YAML テンプレートをカスタマイズします。 - Kubernetes Operator のインストール設定の詳細については、 「 MongoDB Enterprise Kubernetes Operator kubernetes Operator kubernetes Operator および oc インストール設定 」を参照してください。 
- Kubernetes Operator YAML ファイルを適用します。 - kubectl apply -f operator.yaml 
- Kubernetes Operator が配置されていることを確認します。 - Kubernetes Operator が正しくインストールされたことを確認するには、次のコマンドを実行し、出力を確認します。 - kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> - oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> - デフォルトでは、配置は - mongodb名前空間に存在します。 次のエラー メッセージが表示される場合は、正しい名前空間を使用していることを確認してください。- Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found - Kubernetes Operator のトラブルシューティングについては、「 Kubernetes Operator からのログの確認 」やその他のトラブルシューティング トピックを参照してください。 - 重要- Kubernetes Operator または名前空間を削除する必要がある場合は、まずMongoDB リソースを削除する必要があります。 
MongoDB Ops Managerで使用するシークレットを作成し、ConfigMap を作成します。
- シークレットを作成すると、 Kubernetes Operator がMongoDB Ops Managerプロジェクト内のオブジェクトを作成および更新できるようになります。 詳細については、「 Kubernetes Operator の認証情報の作成 」を参照してください。 
- ConfigMap を作成して、 Kubernetes Operator をMongoDB Ops Managerプロジェクトにリンクします。 詳しくは、「 ConfigMap を使用してプロジェクトを 1 つ作成する 」を参照してください。 
MongoDBMultiClusterリソースます。
spec.credentials、spec.opsManager.configMapRef.name、およびセキュリティ設定を設定し、MongoDBMultiClusterリソースを配置します。次のコードサンプルでは、Istio でDNS プロキシを有効にするために duplicateServiceObjects が true に設定されています。
注意
Istio サービス メトリクスによるクラスター間での DNS 解決を有効にするために、このチュートリアルでは Kubernetes ポッドごとに 1 つの ClusterIP アドレスを持つサービス オブジェクトを作成します。
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata:  name: multi-replica-set spec:  version: 6.0.0-ent  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シークレットを生成し、それをノード クラスターに配布します。
MongoDBMultiClusterリソースがを実行中していることを確認します。
- ノードクラスターの場合は、次のコマンドを実行して、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 
- 演算子クラスターで次のコマンドを実行し、 - MongoDBMultiClusterリソースが実行中状態であることを確認します。- kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ - --namespace mongodb \ - get mdbmc multi-replica-set -o yaml -w 
MongoDB MultiCluster リソースの TLS 証明書の更新
次の手順で、 TLS証明書を定期的に更新します。
MongoDBMultiClusterリソースのシークレットを更新します。
次の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 ホスト間、およびクライアント・アプリケーションと MongoDB 配置間の接続は暗号化されません。
kubectl mongodbプラグインを実行します。
デフォルトでは、Kubernetes 演算子のスコープはmongodb名前空間に限定されています。 次のコマンドを実行すると、 kubectl mongodbプラグインは次のようになります。
- 1 つの演算子クラスター、3 つのメンバークラスター、および各クラスターに - mongodbというラベルの付いた名前空間を作成します。
- すべてのノードクラスターを含むデフォルトの ConfigMap をハードコードされた名前 - mongodb-enterprise-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 
オプション: 各ノード クラスターで Istio インジェクション Webhook を設定します。
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 
演算子クラスターにMongoDB Enterprise Kubernetes演算子 を配置します。
Helm または kubectl を使用して、mongodb名前空間の演算子クラスターにMongoDB Enterprise Kubernetes演算子を配置します。
- MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。 - helm repo add mongodb https://mongodb.github.io/helm-charts 
- Kubernetes用のMongoDB Helm Charts を使用して、 Kubernetes演算子を配置します。 - helm upgrade \ - --install \ - mongodb-enterprise-operator-multi-cluster \ - mongodb/enterprise-operator \ - --namespace mongodb \ - --set namespace=mongodb \ - --version <mongodb-kubernetes-operator-version> \ - --set operator.name=mongodb-enterprise-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 
- Kubernetes Operator カスタム リソースを適用します。 - kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml 
- Kubernetes Operator YAML テンプレートをダウンロードします。 - curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 
- オプション: Kubernetes Operator YAML テンプレートをカスタマイズします。 - Kubernetes Operator のインストール設定の詳細については、 「 MongoDB Enterprise Kubernetes Operator kubernetes Operator kubernetes Operator および oc インストール設定 」を参照してください。 
- Kubernetes Operator YAML ファイルを適用します。 - kubectl apply -f operator.yaml 
- Kubernetes Operator が配置されていることを確認します。 - Kubernetes Operator が正しくインストールされたことを確認するには、次のコマンドを実行し、出力を確認します。 - kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> - oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> - デフォルトでは、配置は - mongodb名前空間に存在します。 次のエラー メッセージが表示される場合は、正しい名前空間を使用していることを確認してください。- Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found - Kubernetes Operator のトラブルシューティングについては、「 Kubernetes Operator からのログの確認 」やその他のトラブルシューティング トピックを参照してください。 - 重要- Kubernetes Operator または名前空間を削除する必要がある場合は、まずMongoDB リソースを削除する必要があります。 
MongoDB Ops Managerで使用するシークレットを作成し、ConfigMap を作成します。
- シークレットを作成すると、 Kubernetes Operator がMongoDB Ops Managerプロジェクト内のオブジェクトを作成および更新できるようになります。 詳細については、「 Kubernetes Operator の認証情報の作成 」を参照してください。 
- ConfigMap を作成して、 Kubernetes Operator をMongoDB Ops Managerプロジェクトにリンクします。 詳しくは、「 ConfigMap を使用してプロジェクトを 1 つ作成する 」を参照してください。 
MongoDBMultiClusterリソースます。
spec.credentials、spec.opsManager.configMapRef.name、およびセキュリティ設定を設定し、MongoDBMultiClusterリソースを配置します。次のコードサンプルでは、Istio でDNS プロキシを有効にするために duplicateServiceObjects が true に設定されています。
注意
Istio サービス メトリクスによるクラスター間での DNS 解決を有効にするために、このチュートリアルでは Kubernetes ポッドごとに 1 つの ClusterIP アドレスを持つサービス オブジェクトを作成します。
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata:  name: multi-replica-set spec:  version: 6.0.0-ent  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シークレットを生成し、それをノード クラスターに配布します。
MongoDBMultiClusterリソースがを実行中していることを確認します。
- ノードクラスターの場合は、次のコマンドを実行して、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 
- 演算子クラスターで次のコマンドを実行し、 - MongoDBMultiClusterリソースが実行中状態であることを確認します。- kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ - --namespace mongodb \ - get mdbmc multi-replica-set -o yaml -w 
次のステップ
MongoDB レプリカセットを 3 つの Kubernetes ノード クラスターに配置した後、データベースユーザーを追加して、MongoDB database に接続できるようにします。 「データベースユーザーの管理 」を参照してください。