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

レプリカセットの配置

項目一覧

  • Considerations
  • 前提条件
  • レプリカセットの配置

注意

このページのMongoDB Ops Managerが表示されている場所では、 Cloud Managerを置き換えることができます。

重要

  • Kubernetes演算子を使用して、MongoDB Cloud ManagerMongoDB Ops Managerおよび バージョン6.0 .x 以降で リソースを配置できます。

  • Atlas 演算子を使用して MongoDB リソースを Atlas に配置できます。

警告

レプリカセットは、同じデータセットを保持する MongoDB 配置のグループです。 レプリカセットは冗長性と高可用性を提供し、すべての配置環境の基盤となります。

レプリカセットの詳細については、MongoDB マニュアルの 「レプリケーションの概要」を参照してください。

MongoDB Ops Managerが管理する新しいレプリカセットを配置するには、次の手順を使用します。 配置後は、 MongoDB Ops Managerを使用して、ノードの追加、削除、再構成などの操作を含むレプリカセットを管理します。

Kubernetes Operator 経由でレプリカセットを配置する場合、 TLS証明書を使用して接続を暗号化するかどうかを選択する必要があります。

TLS-Encrypted接続の次の手順:

  • レプリカセット内の MongoDB ホスト間でTLS暗号化接続を確立します。

  • クライアント アプリケーションと MongoDB 配置間でTLS暗号化接続を確立します。

  • TLS暗号化の有効な証明書が必要です。

Non-Encrypted Connectionsの次の手順:

  • レプリカセット内の MongoDB ホスト間の接続を暗号化しません。

  • クライアント アプリケーションと MongoDB 配置間の接続を暗号化しません。

  • TLS暗号化接続を使用した配置よりもセットアップ要件が少なくなります。

注意

Kubernetes クラスターでは MongoDB のスタンドアロン インスタンスを保護することはできません。

シャーディングされたクラスターのTLS暗号化を設定するには、「 シャーディングされたクラスターの配置 」を参照してください

TLSを使用してレプリカセット接続を暗号化するかどうかに応じて、適切なタブを選択します。

オブジェクト を使用してレプリカセットを配置するには に設定されている場合は、以下を行う必要があります。

注意

単一クラスターの Kubernetes 配置でシークレットが保存されないようにするには、すべての シークレット を移行します シークレット ストレージ ツール に渡す追加オプション。複数の Kubernetes クラスターでの配置では、 HashiCorp Vault などのシークレット ストレージ ツールへのシークレットの保存はサポートされていません。 。

  • 次のコンポーネントごとに 1 つのTLS証明書を生成します。

    • レプリカセット。 レプリカセットのノードをホストする各 Kubernetes ポッドのSANを証明書に追加することを確認します。

      TLS証明書では、各ポッドのSANは次の形式を使用する必要があります。

      <pod-name>.<metadata.name>-svc.<namespace>.svc.cluster.local

      重要

      let の暗号 化などの AME ベースのサービスプロバイダーを使用している場合 TLS 証明書を発行するには、プロバイダーがポッドのデフォルトの FQDN*.svc.cluster.local )を証明書に SAN に追加することを禁止する場合があります。

      ACMEベースの証明書を使用するには、レプリカセット リソースの証明書を構成する必要があります。 詳細については、手順の 「 ACMEベースのTLS証明書」 に関するステップを参照してください

    • プロジェクトの MongoDB Agent。 MongoDB Agent 証明書については、次の要件を満たしていることを確認してください。

      • TLS証明書のコモン ネームが空ではない。

      • TLS証明書内の組織と組織単位の組み合わせは、レプリカセット ノードのTLS証明書内の組織と組織単位とは異なります。

  • CA証明書ファイルが必要で、それにca-pemという名前を付けます。

  • TLS証明書の署名に使用したキーが必要です。

重要

Kubernetes 演算子は kubernetes.io/tls を使用しますMongoDB Ops Manager と MongoDB リソースのTLS証明書と秘密キーを保存するためのシークレット。 Kubernetes Operator バージョン1 以降。17 。0 、Kubernetes Operator は Opaque シークレット として保存される連結 PEM ファイルをサポートしていません。

オブジェクト を使用してレプリカセットを配置するには に設定されている場合は、以下を行う必要があります。

注意

単一クラスターの Kubernetes 配置でシークレットが保存されないようにするには、すべての シークレット を移行します シークレット ストレージ ツール に渡す追加オプション。複数の Kubernetes クラスターでの配置では、 HashiCorp Vault などのシークレット ストレージ ツールへのシークレットの保存はサポートされていません。 。

1

まだ作成していない場合は、次のコマンドを実行して、作成した名前空間ですべてのkubectlコマンドを実行します

注意

MongoDB Ops Manager リソースを複数の Kubernetes クラスター MongoDB デプロイメントに配置している場合、次の手順に従います。

  • contextを中央クラスターの名前に設定します(例: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"

  • MongoDB のマルチ配置に使用したのと同じスコープ(例: kubectl config --namespace "mongodb"--namespaceを設定します。

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

このkubectl コマンドを実行して新しい シークレット を作成します レプリカセットの証明書を保存する

kubectl create secret tls <prefix>-<metadata.name>-cert \
--cert=<replica-set-tls-cert> \
--key=<replica-set-tls-key>

注意

シークレットの前に<prefix>-<metadata.name>を付ける必要があります。

たとえば、配置をmy-deployment mdbと呼び出し、プレフィックスを に設定する場合は、クライアント TLS 通信の TLS シークレットにmdb-my-deployment-cert という名前を付ける必要があります。また、内部クラスター認証用のTLSシークレット(有効になっている場合) mdb-my-deployment-clusterfileに名前を付ける必要があります。

HashiCorp Vault を使用している場合 シークレット ストレージ ツール として使用する場合は、代わりに Vault シークレットを作成 できます。

シークレット ストレージのオプションの詳細については、「シークレット ストレージの構成 」を参照してください。

3

このkubectl コマンドを実行して新しい シークレット を作成します エージェントの TLS 証明書を保存する:

kubectl create secret tls <prefix>-<metadata.name>-agent-certs \
--cert=<agent-tls-cert> \
--key=<agent-tls-key>

HashiCorp Vault を使用している場合 シークレット ストレージ ツール として使用する場合は、代わりに Vault シークレットを作成 できます。

4

このkubectlコマンドを実行してCAをレプリカセットにリンクし、 CA証明書ファイルを指定します。

重要

Kubernetes Operator では、ConfigMap でMongoDBリソースの証明書がca-pemという名前を持つ必要があります。

kubectl create configmap custom-ca --from-file=ca-pem=<your-custom-ca-file>
5

このYAMLファイルの設定を、必要なレプリカセット構成に合わせて変更します。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "4.2.2-ent"
9 opsManager:
10 configMapRef:
11 # Must match metadata.name in ConfigMap file
12 name: <configMap.metadata.name>
13 credentials: <mycredentials>
14 type: ReplicaSet
15 persistent: true
16...
16 security:
17 tls:
18 ca: <custom-ca>
19 certsSecretPrefix: <prefix>
20...
6

希望のテキストエディタを開き、 オブジェクト を貼り付けます 指定されたドキュメントを新しいテキストファイルに置き換えます。

7
キー
タイプ
説明
string

この Kubernetes レプリカセット オブジェクト のラベル 。

リソース名は 44 文字以下にする必要があります。

詳しくは、metadata.name 名前 に関する と Kubernetes のドキュメントを参照してください。

myproject
integer
3
string

このレプリカセットが実行する MongoDB のバージョン。

形式は、 MongoDB Community Editionでは X.Y.Z、Enterprise エディションでは X.Y.Z-ent です。

重要

互換性のある MongoDB Server バージョンを選択していることを確認してください。

互換性のあるバージョンは、MongoDB database リソースが使用する基本イメージによって異なります。

MongoDB のバージョン管理の詳細については、MongoDB マニュアルの「 MongoDBのバージョン管理 」を参照してください。

6.0.0-ent
spec
.opsManager
.configMapRef
string

ConfigMap MongoDB Ops Managerの名前 接続構成の場合spec.cloudManager.configMapRef.name設定はこの設定のエイリアスであり、代わりに使用できます。

この値は、作成するリソースと同じ名前空間に存在する必要があります。

重要

演算子が ConfigMap への変更を管理

Kubernetes 演算子は、ConfigMap への変更を追跡し、 MongoDBリソースの状態を調整します。

<myconfigmap>
string

Operator が と通信するための MongoDB Ops ManagerAPI認証情報として 作成KubernetesMongoDB Ops Manager したシークレットの名前。

認証情報を保持するMongoDB Ops Manager Kubernetes Secretオブジェクトは、作成するリソースと同じ名前空間に存在する必要があります。

重要

演算子がシークレットへの変更を管理

Kubernetes Operator は、シークレットへの変更を追跡し、 MongoDBリソースの状態を調整します。

<mycredentials>
string
作成するMongoDBリソースのタイプ。
ReplicaSet
string

任意。

このMongoDB リソースが 永続的なボリューム を使用するかどうかを示すフラグ ストレージ用。MongoDBリソースを停止または再起動しても、永続的なボリュームは削除されません。

この値がtrueの場合、 spec.podSpec.persistence.singleはデフォルト値の16Giに設定されます。

永続的なボリュームクレーム を変更するには 構成では、配置の要件を満たすように次のコレクションを構成します。

警告: コンテナに 永続ボリューム への書込み (write) 権限を付与 。Kubernetes 演算子は、 securityContextfsGroup = 2000runAsUser = 2000runAsNonRoot = trueを設定します。 Kubernetes Operator は、 fsgrouprunAsUserと等しく設定して、コンテナでメイン プロセスを実行するユーザーがボリュームを書込み可能にします。 詳細については、「 ポッドまたはコンテナのセキュリティ コンテキストの構成 」を参照してください および関連する ディスカッション (Kubernetes ドキュメント)。リソースを再デプロイしても永続ボリュームの問題が修正されない場合は、 MongoDB サポートにお問い合わせください。

永続的なボリューム を使用しない場合 では、この配置Disk Usage Disk IOPSProcessesDeploymentMetricsのデータ を確認するときに、 ページまたは ページの は表示されません。

true
8

配置でTLSを有効にするには、Kubernetes オブジェクトで次の設定を構成します。

キー
タイプ
必要性
説明
spec.security
string
必須
ConfigMap を追加する 配置の TLS 証明書に署名するために使用したカスタム CA を保存する の名前。
<custom-ca>
spec.security
string
必須

MongoDB 配置のTLS証明書を含むシークレット名の<prefix>を追加します。

たとえば、配置をmy-deployment mdbと呼び出し、プレフィックスを に設定する場合は、クライアント TLS 通信の TLS シークレットにmdb-my-deployment-cert という名前を付ける必要があります。また、内部クラスター認証用のTLSシークレット(有効になっている場合) mdb-my-deployment-clusterfileに名前を付ける必要があります。

devDb
9

let の暗号 化などの AME ベースのサービスプロバイダーを使用している場合 TLS 証明書を発行するには、プロバイダーがポッドのデフォルトの FQDN*.svc.cluster.local )を証明書に SAN に追加することを禁止する場合があります。

ポッドのFQDNを含まない証明書を設定するには、次の手順に従います。

  1. 外部ドメインの証明書を発行します。 詳細については、 let の暗号化 に関するドキュメント を参照してください。 または プロバイダーのドキュメント を参照してください。

  2. 証明書にレプリカセットに配置するすべてのホスト名が含まれていることを確認します。 あるいは、 *.<externalDomain>の ワイルドカード 証明書を発行することもできます。

  3. レプリカセットの配置で外部ドメインのみを含む証明書を使用するには、レプリカセットで使用されるデフォルトのホスト名を変更する必要があります。

    • Kubernetes クラスターの作成中にホスト名を設定する場合は、 デフォルトのドメイン を変更します cluster.localKubernetes クラスターを作成または再作成する際に、 から外部ドメインに接続する必要があります。次に、 spec.clusterDomain設定を使用して MongoDB リソースでこのドメインを設定します。

    • それ以外の場合は、Kubernetes オブジェクトで構成されている次の設定を使用して MongoDB 配置を作成します。

キー
タイプ
必要性
説明
spec.externalAccess
string
必須

レプリカセットの配置を外部で公開するために使用される外部ドメイン。

デフォルトでは、各レプリカセット ノードは Kubernetes ポッドのFQDN*.svc.cluster.local )をデフォルトのホスト名として使用します。 ただし、この設定に外部ドメインを追加すると、レプリカセットは代わりに、指定されたドメインのサブドメインであるホスト名を使用します。 このホスト名は、次の形式を使用します。

<replica-set-name>-<pod-idx>.<externalDomain>

以下に例を挙げます。

replica-set-1.example.com

この設定でレプリカセットを配置すると、 Kubernetes Operator は外部ドメインを含むホスト名を使用して、 MongoDB Ops Managerオートメーション構成processes[n].hostname フィールドを上書きします。 次に、MongoDB Agent はこのホスト名を使用してmongodに接続します。

レプリカセットに接続するための他のホスト名を指定するには、 spec.connectivity.replicaSetHorizons設定を使用できます。 ただし、次の接続では、外部ドメインを含むホスト名は引き続き使用されます。

  • mongodに接続する MongoDB Agent

  • mongodを使用して他のmongodインスタンスに接続します。

警告:このフィールドを指定すると、 MongoDB Ops Managerがmongodプロセスを登録する方法が変更されます。 このフィールドは、Kubernetes Operator バージョン1.19以降の新しいレプリカセット配置でのみ指定できます。 実行中のレプリカセット配置のMongoDB Ops Manager自動化構成で、このフィールドまたは任意の processes[n].hostname フィールドの値を変更することはできません。

spec.externalAccess
コレクション
任意

ServiceSpec の構成。

spec.externalAccess設定を設定すると、Kubernetes Operator はデフォルト値の外部ロード バランサー サービスを自動的に作成します。 ニーズに応じて、特定の値を上書きしたり、新しい値を追加したりできます。 たとえば、 NodePort サービス を作成しようとすると、 で、ロード バランサーが必要ない場合は、Kubernetes 仕様でオーバーライドを構成する必要があります。

externalAccess:
externalService:
annotations:
# cloud-specific annotations for the service
spec:
type: NodePort # default is LoadBalancer
# you can specify other spec overrides if necessary

Kubernetes 仕様の詳細については、 ServiceSpec を参照してください (Kubernetes ドキュメント)。

spec.externalAccess
コレクション
任意

配置内のすべてのクラスターにクラウドプロバイダー固有の構成設定を追加できるキーと値のペア。 詳細については、 注釈 を参照してください Kubernetes クラウドプロバイダーのドキュメントとドキュメントを参照してください。

プレースホルダー値を指定して注釈をカスタマイズできます。 詳しくは、 spec.externalAccess.externalService.annotationsを参照してください。

10

また、次の任意設定のいずれかを オブジェクト に追加できます。 レプリカセット 配置の仕様ファイル。

警告

Kubernetes クラスターに デフォルトのドメインspec.clusterDomain がある場合は、 を設定する必要があります デフォルトのcluster.local 以外。デフォルトを使用せず、 spec.clusterDomainオプションを設定しない場合、Kubernetes 演算子が期待どおりに機能しない可能性があります。

11
12

任意のディレクトリで、次の Kubernetes コマンドを呼び出してレプリカセットを作成します。

kubectl apply -f <replica-set-conf>.yaml
13

MongoDBリソースのステータスを確認するには、次のコマンドを使用します。

kubectl get mdb <resource-name> -o yaml -w

-w (監視)フラグが設定されている場合、構成が変更されると、ステータスフェーズがRunning状態に達するまで出力が直ちに更新されます。 リソース配置ステータスの詳細については、 「 Kubernetes 演算子のトラブルシューティング 」を参照してください。

TLSを使用してデータベース リソースを暗号化すると、以下を保護できます。

次の手順で、 TLS証明書を定期的に更新します。

1

まだ作成していない場合は、次のコマンドを実行して、作成した名前空間ですべてのkubectlコマンドを実行します

注意

MongoDB Ops Manager リソースを複数の Kubernetes クラスター MongoDB デプロイメントに配置している場合、次の手順に従います。

  • contextを中央クラスターの名前に設定します(例: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"

  • MongoDB のマルチ配置に使用したのと同じスコープ(例: kubectl config --namespace "mongodb"--namespaceを設定します。

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

既存の シークレット を更新するには、このkubectl コマンドを実行します レプリカセットの証明書を保存する

kubectl create secret tls <prefix>-<metadata.name>-cert \
--cert=<replica-set-tls-cert> \
--key=<replica-set-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
1

まだ作成していない場合は、次のコマンドを実行して、作成した名前空間ですべてのkubectlコマンドを実行します

注意

MongoDB Ops Manager リソースを複数の Kubernetes クラスター MongoDB デプロイメントに配置している場合、次の手順に従います。

  • contextを中央クラスターの名前に設定します(例: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"

  • MongoDB のマルチ配置に使用したのと同じスコープ(例: kubectl config --namespace "mongodb"--namespaceを設定します。

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

このYAMLファイルの設定を、必要なレプリカセット構成に合わせて変更します。

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "4.2.2-ent"
9 opsManager:
10 configMapRef:
11 # Must match metadata.name in ConfigMap file
12 name: <configMap.metadata.name>
13 credentials: <mycredentials>
14 type: ReplicaSet
15 persistent: true
16...
3

希望のテキストエディタを開き、 オブジェクト を貼り付けます 指定されたドキュメントを新しいテキストファイルに置き換えます。

4
キー
タイプ
説明
string

この Kubernetes レプリカセット オブジェクト のラベル 。

リソース名は 44 文字以下にする必要があります。

詳しくは、metadata.name 名前 に関する と Kubernetes のドキュメントを参照してください。

myproject
integer
3
string

このレプリカセットが実行する MongoDB のバージョン。

形式は、 MongoDB Community Editionでは X.Y.Z、Enterprise エディションでは X.Y.Z-ent です。

重要

互換性のある MongoDB Server バージョンを選択していることを確認してください。

互換性のあるバージョンは、MongoDB database リソースが使用する基本イメージによって異なります。

MongoDB のバージョン管理の詳細については、MongoDB マニュアルの「 MongoDBのバージョン管理 」を参照してください。

6.0.0-ent
spec
.opsManager
.configMapRef
string

ConfigMap MongoDB Ops Managerの名前 接続構成の場合spec.cloudManager.configMapRef.name設定はこの設定のエイリアスであり、代わりに使用できます。

この値は、作成するリソースと同じ名前空間に存在する必要があります。

重要

演算子が ConfigMap への変更を管理

Kubernetes 演算子は、ConfigMap への変更を追跡し、 MongoDBリソースの状態を調整します。

<myconfigmap>
string

Operator が と通信するための MongoDB Ops ManagerAPI認証情報として 作成KubernetesMongoDB Ops Manager したシークレットの名前。

認証情報を保持するMongoDB Ops Manager Kubernetes Secretオブジェクトは、作成するリソースと同じ名前空間に存在する必要があります。

重要

演算子がシークレットへの変更を管理

Kubernetes Operator は、シークレットへの変更を追跡し、 MongoDBリソースの状態を調整します。

<mycredentials>
string
作成するMongoDBリソースのタイプ。
ReplicaSet
string

任意。

このMongoDB リソースが 永続的なボリューム を使用するかどうかを示すフラグ ストレージ用。MongoDBリソースを停止または再起動しても、永続的なボリュームは削除されません。

この値がtrueの場合、 spec.podSpec.persistence.singleはデフォルト値の16Giに設定されます。

永続的なボリュームクレーム を変更するには 構成では、配置の要件を満たすように次のコレクションを構成します。

警告: コンテナに 永続ボリューム への書込み (write) 権限を付与 。Kubernetes 演算子は、 securityContextfsGroup = 2000runAsUser = 2000runAsNonRoot = trueを設定します。 Kubernetes Operator は、 fsgrouprunAsUserと等しく設定して、コンテナでメイン プロセスを実行するユーザーがボリュームを書込み可能にします。 詳細については、「 ポッドまたはコンテナのセキュリティ コンテキストの構成 」を参照してください および関連する ディスカッション (Kubernetes ドキュメント)。リソースを再デプロイしても永続ボリュームの問題が修正されない場合は、 MongoDB サポートにお問い合わせください。

永続的なボリューム を使用しない場合 では、この配置Disk Usage Disk IOPSProcessesDeploymentMetricsのデータ を確認するときに、 ページまたは ページの は表示されません。

true
5

また、次の任意設定のいずれかを オブジェクト に追加できます。 レプリカセット 配置の仕様ファイル。

警告

Kubernetes クラスターに デフォルトのドメインspec.clusterDomain がある場合は、 を設定する必要があります デフォルトのcluster.local 以外。デフォルトを使用せず、 spec.clusterDomainオプションを設定しない場合、Kubernetes 演算子が期待どおりに機能しない可能性があります。

6
7

任意のディレクトリで、次の Kubernetes コマンドを呼び出してレプリカセットを作成します。

kubectl apply -f <replica-set-conf>.yaml
8

MongoDBリソースのステータスを確認するには、次のコマンドを使用します。

kubectl get mdb <resource-name> -o yaml -w

-w (監視)フラグが設定されている場合、構成が変更されると、ステータスフェーズがRunning状態に達するまで出力が直ちに更新されます。 リソース配置ステータスの詳細については、 「 Kubernetes 演算子のトラブルシューティング 」を参照してください。

戻る

スタンドアロンの MongoDB インスタンスの配置