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

Kubernetes の MongoDB Database アーキテクチャ

項目一覧

  • MongoDBカスタム リソース定義
  • MongoDBカスタム リソースの調整
  • MongoDBUserカスタム リソースの調整

重要

このセクションは、単一の Kubernetes クラスターの配置のみを対象としています。 Kubernetes クラスター MongoDB のマルチ配置については、「 アーキテクチャ、機能、制限 」を参照してください。

Kubernetes Operator とCloud ManagerまたはMongoDB Ops Managerを使用して、 MongoDBデータベースリソースをKubernetesクラスターに配置できます。 既存のCloud Manager またはMongoDB Ops Manager MongoDB Ops ManagerKubernetesを使用するか、 に配置してデータベースを管理できます。

Kubernetes Operator は、 Cloud ManagerまたはMongoDB Ops Managerを使用して、次のMongoDBデータベース カスタム リソースを管理します。

  • MongoDB

  • MongoDBUser

カスタム リソース 仕様は、Kubernetes Operator でこれらのリソースを定義します。Kubernetes Operator はこれらのリソースを監視します。 リソースの仕様を更新すると、 Kubernetes Operator はこれらの変更をCloud ManagerまたはMongoDB Ops Managerにプッシュし、 MongoDB配置の構成が変更されます。

Kubernetes Operator は、MongoDB カスタム リソースによって定義される MongoDB database 配置を管理します。

MongoDB データベース カスタム リソース 仕様では、MongoDB データベースのカスタム リソースの次のタイプが定義されます。

  • Standalone

  • ReplicaSet

  • ShardedCluster

次の図は、Kubernetes 演算子 内の MongoDB リソースの各タイプの構成を示しています。

MongoDB Enterprise Kubernetes Operator 内の MongoDB リソースの高レベルのアーキテクチャを示す図
クリックして拡大します

警告

StandaloneMongoDB データベース リソースの タイプの場合、Kubernetes Operator は、単一のノードを含むレプリカセットをステートメントセットとして Kubernetes クラスターに配置します。

Kubernetes Operator は、作成する ポッドの数を含む ポッド仕様を含むステートフルセットを作成します。 Kubernetes Operator は、このスタンドアロンの MongoDB データベース インスタンス用のポッドを作成するために Kubernetes StateftableSet コントロール に依存しています。

重要

Kubernetes では、 Standaloneリソースは 1 つのノードのみを持つReplicaSetリソースと同等です。 レプリカセットを使用すると将来的にノードを追加できるため、 Standaloneではなく 1 つのノードでReplicaSetを配置することをお勧めします。

ReplicaSetMongoDB リソースの タイプの場合、Kubernetes Operator はレプリカセットをステートメントとして Kubernetesspec.members クラスターに配置します。 、 の値は と等しいノード数を持ちます。

Kubernetes Operator は、レプリカセットの各ノードに対して ステートメントに 1 つのポッドを作成するために Kubernetes AtlasStatusAtlas コントロール に依存します。

ステートフルセット 内の各ポッドはMongoDB Agentインスタンスを実行します。

MongoDB リソースのShardedClusterタイプは、1 つ以上のコンフィギュレーションサーバー、 mongosインスタンス、およびシャード ノードで構成されています。

ShardedClusterリソースに対して、Kubernetes Operator は次を配置します。

  • すべてのコンフィギュレーションサーバーに 1 つのステートメントセット

  • すべてのmongosインスタンスに対して 1 つのステートメントセット

  • 各シャード ノードごとに 1 つのステートメントセット

Kubernetes Operator は、シャーディングされたクラスター用に作成された各 StatefluSet に 1 つのポッドを作成するために、 Kubernetes StatefunctionSet コントロール に依存しています。

MongoDBカスタム リソース仕様を適用すると、Kubernetes Operator は各リソースを ステートフルセット Kubernetesとして配置します。 使用でき 。

Kubernetes 演算子:

  • カスタム リソースの仕様と関連する ConfigMap を監視 シークレット ストレージ ツールに保存されている または シークレット。

  • 仕様ファイル、ConfigMap、またはシークレットが変更されたときに変更を検証します。

  • Kubernetes クラスター内の MongoDB database リソースに適切な更新を行います。

  • Cloud ManagerまたはMongoDB Ops Managerに変更をプッシュし、 MongoDB配置の構成が変更されます。

次の図では、レプリカセットの に変更を加えた場合の Kubernetes Operator の動作を説明します。

MongoDB Enterprise Kubernetes OperatorがレプリカセットのMongoDBカスタム リソース定義に変更を加える方法を説明する図
クリックして拡大します

以下の図では、シャーディングされたクラスターの に変更を加えた場合の Kubernetes Operator の動作を説明しています。

MongoDB Enterprise Kubernetes OperatorがシャーディングされたクラスターのMongoDBカスタム リソース定義を変更する方法を説明する図
クリックして拡大します

MongoDB リソース仕様を作成または変更する場合、または関連付けられている ConfigMap に変更を加える場合 または シークレットがない場合、Kubernetes Operator は変更を調整するために次のアクションを実行します。

  1. Kubernetes Operator でプロジェクトを作成または接続するために使用したConfigMapから、必要な組織とプロジェクトの構成を読み取ります。

    リソース仕様を変更すると、Kubernetes Operator は変更が行われたことを識別し、 spec.opsManager.configMapRef.nameで指定された ConfigMap の仕様を確認します。

    注意

    リソース用にKubernetes OperatorMongoDB を構成すると、 または プロジェクトを接続または作成する ための ConfigMapCloud Manager MongoDB Ops Managerが作成されます。MongoDB Agent はこの ConfigMap を使用して、MongoDB リソースの配置を開始または変更します。

  2. 次のいずれかに指定されたシークレットから、 Cloud ManagerまたはMongoDB Ops Managerの認証構成を読み取ります。

    このシークレットには、Cloud ManagerAPI MongoDB Ops ManagerAPIKubernetesOperator がCloud Manager または に認証するために必要な キー または キーMongoDB Ops Manager が保存されています。

    注意

    MongoDB リソース用に Kubernetes Operator を構成するときは、Kubernetesでこのシークレットを作成するか、このシークレットをシークレット ストレージ ツールに保存します。

  3. Kubernetes Operator はCloud ManagerまたはMongoDB Ops Managerに接続し、次のアクションを実行します。

    • ConfigMap のorgIdフィールドから組織を読み取ります。 orgIdフィールドに値を指定する必要があります。

    • ConfigMap の projectName フィールドで指定されたプロジェクト名を読み取ります。または、この任意フィールドに値を指定しなかった場合、 はCloud ManagerまたはMongoDB Ops Managerにこのプロジェクトを作成します(存在しない場合)。

    • MongoDB Agent 用に Kubernetes 演算子によって作成された<project-id>-group-secretシークレットが存在することを確認します。 Kubernetes Operator は、シークレット ストレージ ツールからシークレットを読み取るか、 MongoDB Ops Manager APIキーまたはCloud Manager APIキーを使用してシークレットを作成します。

    • は、自分自身を ConfigMap とこのシークレットの監視者として登録します。 これにより、 Kubernetes演算子は、 Reactまたはシークレットに加えられた変更に対応できるようになります。

  4. Kubernetes Operator は、 TLS および X.509 証明書を検証します。

  5. Kubernetes Operator は、必要なステートメントセットを検索して更新し、存在しない場合は新しいステートメントセットを作成します。 ステートメントセットの数は、MongoDB リソースのタイプによって異なります。

    • ReplicaSetまたはStandaloneリソースの場合、Kubernetes Operator は単一のStatulSet を作成します。

    • Kubernetes Operator はShardedClusterリソースの場合、次のアイテムを作成します。

      • すべてのコンフィギュレーションサーバーに対して 1 つのステートメントセット。

      • すべてのmongosインスタンスに対して 1 つのステートメントセット。

      • 各シャード ノードごとに 1 つのステートメントセット。

      この時点で、各ポッドは少なくとも 1 つの MongoDB Agent インスタンスを実行していますが、 mongodインスタンスはまだ含まれていません。

    • MongoDB Agent各Cloud Manager MongoDB Ops ManagerMongoDBインスタンスは、 オートメーション構成を受信するために または のポーリングを開始します。

      注意

      非静的コンテナ: MongoDB AgentMongoDBspec.versionは初めて構成を受信すると、 で指定されたバージョンの バイナリをインターネットから、またはMongoDB Ops Manager MongoDB Agentが ローカル モード で構成されている場合は からダウンロードします。

      Static containers: Static containers do not download binaries at runtime. 詳細については、「静的コンテナ(パブリック プレビュー) 」を参照してください。

    • MongoDB Agent が自動化構成を受信すると、対応するポッドでmongodインスタンスが起動されます。

    • MongoDB カスタム リソースが作成する各ステートメントセットの各ポッド( ステートメントセットを除く)に対して、Kubernetesmongos 演算子は 永続的なボリューム要求 を生成します 。この動作は、リソース仕様でspec.persistentfalseに設定することで上書きできます。

  6. Kubernetes Operator は、 MongoDB Agentから受信したオートメーション構成を 仕様の変更で更新し、 Cloud ManagerまたはMongoDB Ops Managerに送信します。

    • 各ポッドの各MongoDB AgentはCloud ManagerまたはMongoDB Ops Managerを再度ポーリングし、更新されたオートメーション構成を受け取ります。

    • 仕様のフィールドを変更すると、Kubernetes Operator は ローリング アップデート を実行します ステートフルセットの )コマンドを使用して、新しい仕様に一致する新しい ポッド を起動します。

    • Kubernetes Operator は、各 MongoDB Agent が準備完了状態に達したことを報告するまで待機します。

    注意

    データベースリソースの セキュリティ構成 を変更する場合、または スケールダウンした 場合、 既存の ステートメントセットの場合、Kubernetes 演算子はステップ を実行する前にステップ6 5を実行します。

  7. Kubernetes Operator は、Kubernetes サービスを更新、または新しい MongoDB リソースの場合、新しい Atlas App Services ごとに必要なサービスを作成します。

    サービスタイプの場合ClusterIP の場合、Kubernetes OperatorClusterIP は をNone に設定し、次のアクションを実行します。

    • このサービスが存在しない場合は、 が作成します。

    • ReplicaSetまたはStandaloneリソースの場合、Kubernetes Operator はカスタム リソースの名前に-svcを付けたサービスに名前を付けます。

    • ShardedClusterリソースの場合、Kubernetes 演算子は次の命名規則を使用します。

      • mongosインスタンスの場合、Kubernetes Operator はspec.serviceで指定された名前、または-svcが追加されたリソースの名前を使用します。

      • コンフィギュレーションサーバーの場合、Kubernetes Operator は、 -csが追加されたリソースの名前を使用します。

      • Kubernetes Operator は、各シャードに対して、 -shが追加されたリソースの名前を使用します。

    • ポートには、Kubernetes Operator はデフォルトのポート27017 または で指定された .net.port spec.additionalMongodConfigを使用します。

ユーザー認証方法がSCRAMに設定されている場合、 MongoDB ユーザーリソース仕様は、ユーザー認証情報を保存するシークレット ストレージ ツールによって異なります。 Kubernetes secret を使用している場合spec.passwordSecretKeyRefMongoDBUser リソース仕様の 設定でシークレットを指定します。

Kubernetes Operator は、シークレットの変更を監視します。 シークレットの構成に変更を加えると、Kubernetes Operator は変更を調整します。 次のアクションが必要です。

  1. MongoDB ユーザー リソース仕様 のspec.MongoDBResourceRef.name設定で指定された値に基づいて、MongoDB ユーザーのリソースを決定します。

  2. Cloud ManagerまたはMongoDB Ops Managerに接続します。

  3. Cloud ManagerまたはMongoDB Ops Managerでユーザーの認証情報を更新し、ユーザーが存在しない場合は新しいユーザーを作成します。

    • ユーザー認証方法がSCRAMの場合、 はシークレットからパスワードを読み取ります。

    • ユーザー名を読み取ります。 ユーザー名が変更された場合、Kubernetes Operator は古い名前を削除し、新しい名前を追加します。

    • ユーザーがCloud ManagerまたはMongoDB Ops Managerに存在することを確認します。

次の図は、ユーザーシークレットまたはMongoDB ユーザー リソース仕様を変更した場合の Kubernetes Operator の動作を示しています。

MongoDB Enterprise Kubernetes Operator が MongoDBUser カスタム リソース定義への変更を調整する方法を説明する図
クリックして拡大します

戻る

MongoDB Database リソースの配置