マルチ Kubernetes クラスター クイック スタート
項目一覧
クイック スタートを使用して、 GKE(Google Kubernetes Engine) と Istio サービス キャッシュを使用して、3 つのKubernetesノード クラスターにMongoDBレプリカセットを配置します。
始める前に:
マルチKubernetesクラスターのサービスとツールのリストを確認する
前提条件を完了する
注意
次の手順では、マルチ Kubernetes クラスター MongoDB 配置のスコープを単一の 名前空間 に限定します という名前のmongodb
。MongoDB のマルチ 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 APIshell を有効にして、 GoogleKubernetes Engine クイックスタート の関連手順に従って CloudGoogle Cloud Platform を起動します。 のドキュメントを参照してください。
中央クラスターとメンバークラスターを作成します。
次の例のように、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 では、次のコマンドを使用して、各ノードクラスターの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
中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。
Helm または kubectl
を使用して、mongodb
名前空間の中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。
Kubernetes 用の MongoDB Helm Charts の 追加 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 kubetl 」を参照してください。 および 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
リソースを配置します。 次のコード例では、 DNS プロキシ を有効にするために duplicateServiceObjects
を に設定していますtrue
Istio の。
注意
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 では、次のコマンドを使用して、各ノードクラスターの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
中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。
Helm または kubectl
を使用して、mongodb
名前空間の中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。
Kubernetes 用の MongoDB Helm Charts の 追加 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 kubetl 」を参照してください。 および 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
リソースを配置します。 次のコード例では、 DNS プロキシ を有効にするために duplicateServiceObjects
を に設定していますtrue
Istio の。
注意
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 に接続できるようにします。 「データベースユーザーの管理 」を参照してください。