Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 演算子
/

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

項目一覧

クイック スタートを使用して、 GKE(Google Kubernetes Engine) を使用して、3 つの Kubernetes ノード クラスターに MongoDB レプリカセットを配置 Istio 最大数。

始める前に:

  • のマルチ Kubernetes クラスター配置の詳細

  • マルチKubernetesクラスターのサービスとツールのリストを確認する

  • 前提条件を完了する

注意

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

このビデオ チュートリアルでは、マルチ 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 APIshell を有効にして、 GoogleKubernetes Engine クイックスタート の関連手順に従って CloudGoogle Cloud Platform を起動します。 のドキュメントを参照してください。

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証明書を使用して、複数の Kubernetes クラスター MongoDB 配置でレプリカセット接続を暗号化するかどうかに応じて、適切なタブを選択します。

この 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コマンドを実行して、 CAMongoDBMultiClusterリソースにリンクします。 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プラグインは次のようになります。

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 名前空間の中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。

  1. Kubernetes 用の MongoDB Helm Charts の 追加 Helm へのリポジトリを使用します。

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 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
  1. Kubernetes Operator カスタム リソースを適用します。

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

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

    Kubernetes Operator のインストール設定の詳細については、「 MongoDB Enterprise Kubernetes Operator kubetl 」を参照してください。 および OC 設定をインストールします。

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

    kubectl apply -f operator.yaml
  5. 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 リソースを削除する必要があります。

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

  2. ConfigMap を作成して、 Kubernetes Operator をMongoDB Ops Managerプロジェクトにリンクします。 詳しくは、「 ConfigMap を使用してプロジェクトを 1 つ作成する 」を参照してください。

8
9

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

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 ホスト間、およびクライアント・アプリケーションと 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

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
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 名前空間の中央クラスターにMongoDB Enterprise Kubernetes Operatorを配置します。

  1. Kubernetes 用の MongoDB Helm Charts の 追加 Helm へのリポジトリを使用します。

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 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
  1. Kubernetes Operator カスタム リソースを適用します。

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

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

    Kubernetes Operator のインストール設定の詳細については、「 MongoDB Enterprise Kubernetes Operator kubetl 」を参照してください。 および OC 設定をインストールします。

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

    kubectl apply -f operator.yaml
  5. 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 リソースを削除する必要があります。

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

  2. ConfigMap を作成して、 Kubernetes Operator をMongoDB Ops Managerプロジェクトにリンクします。 詳しくは、「 ConfigMap を使用してプロジェクトを 1 つ作成する 」を参照してください。

6
7

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

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

戻る

前提条件

項目一覧