Kubernetes の MongoDB Database アーキテクチャ
重要
このセクションは、単一の 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演算子でこれらのリソースを定義します。Kubernetes Operator はこれらのリソースを監視します。 リソースの仕様を更新すると、 KubernetesKubernetes Operator はこれらの変更をCloudCloud Manager MongoDB Ops ManagerManagerまたはMongoDBMongoDB Ops Managerにプッシュし、 MongoDB配置の構成が変更されます。
MongoDB
カスタム リソース定義
Kubernetes Operator は、MongoDB カスタム リソースによって定義される MongoDB database 配置を管理します。
MongoDB データベース カスタム リソース 仕様では、MongoDB データベースのカスタム リソースの次のタイプが定義されます。
Standalone
ReplicaSet
ShardedCluster
次の図は、Kubernetes 演算子 内の MongoDB リソースの各タイプの構成を示しています。
警告
Kubernetes Operator はアービタ ノードをサポートしていません。
スタンドアロン
Standalone
MongoDB データベース リソースの タイプの場合、Kubernetes Operator は、単一のノードを含むレプリカセットをステートメントセットとして Kubernetes クラスターに配置します。 。
Kubernetes Operator は、作成する ポッドの数を含む ポッド仕様を含むステートフルセットを作成します。 Kubernetes Operator は、このスタンドアロンの MongoDB データベース インスタンス用のポッドを作成するために Kubernetes StateftableSet コントロール に依存しています。
重要
Kubernetes では、 Standalone
リソースは 1 つのノードのみを持つReplicaSet
リソースと同等です。 レプリカセットを使用すると将来的にノードを追加できるため、 Standalone
ではなく 1 つのノードでReplicaSet
を配置することをお勧めします。
レプリカセット
ReplicaSet
MongoDB リソースの タイプの場合、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
MongoDBカスタム リソース仕様を適用すると、Kubernetes Operator は各リソースを ステートフルセット Kubernetesとして配置します。 使用でき 。
Kubernetes 演算子:
カスタム リソースの仕様と関連する ConfigMap を監視 シークレット ストレージ ツールに保存されている または シークレット。
仕様ファイル、ConfigMap、またはシークレットが変更されたときに変更を検証します。
Kubernetes クラスター内の MongoDB database リソースに適切な更新を行います。
Cloud ManagerまたはMongoDB Ops Managerに変更をプッシュし、 MongoDB配置の構成が変更されます。
レプリカセットの調整の図
次の図では、レプリカセットの に変更を加えた場合の Kubernetes Operator の動作を説明します。
MongoDB
カスタムリソース仕様関連 する ConfigMap
シークレット ストレージ ツールに保存されている関連するシークレット
シャーディングされたクラスターの調整の図
以下の図では、シャーディングされたクラスターの に変更を加えた場合の Kubernetes Operator の動作を説明しています。
MongoDB
カスタムリソース仕様関連 する ConfigMap
シークレット ストレージ ツールに保存されている関連するシークレット
調整ワークフロー
MongoDB リソース仕様を作成または変更する場合、または関連付けられている ConfigMap に変更を加える場合 または シークレットがない場合、Kubernetes Operator は変更を調整するために次のアクションを実行します。
Kubernetes Operator でプロジェクトを作成または接続するために使用したConfigMapから、必要な組織とプロジェクトの構成を読み取ります。
リソース仕様を変更すると、Kubernetes Operator は変更が行われたことを識別し、
spec.opsManager.configMapRef.name
で指定された ConfigMap の仕様を確認します。注意
リソース用にKubernetes OperatorMongoDB を構成すると、 または プロジェクトを接続または作成する ための ConfigMapCloud Manager MongoDB Ops Managerが作成されます。MongoDB Agent はこの ConfigMap を使用して、MongoDB リソースの配置を開始または変更します。
次のいずれかに指定されたシークレットから、 Cloud ManagerまたはMongoDB Ops Managerの認証構成を読み取ります。
spec.credentials
、リソース仕様内
このシークレットには、Cloud ManagerAPI MongoDB Ops ManagerAPIKubernetesOperator がCloud Manager または に認証するために必要な キー または キーMongoDB Ops Manager が保存されています。
注意
MongoDB リソース用に Kubernetes Operator を構成するときは、Kubernetesでこのシークレットを作成するか、このシークレットをシークレット ストレージ ツールに保存します。
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またはシークレットに加えられた変更に対応できるようになります。
Kubernetes Operator は、 TLS および X.509 証明書を検証します。
レプリカセットでTLSが有効になっている場合、Kubernetes Operator は、
<prefix>-<resource-name>-cert
シークレットまたはシークレット ストレージ ツールで提供されている証明書を検索します。シャーディングされたクラスターでTLSが有効になっている場合、Kubernetes Operator は次のシークレットで証明書を検索します。
<prefix>-<resource-name>-x-cert
を、各シャード ノードの<prefix>-<resource-name>-config-cert
(すべてのコンフィギュレーションサーバーに対して)。<prefix>-<resource-name>-mongos-cert
すべてのmongos
インスタンス
X.509またはX.509 と TLS による内部認証が有効になっている場合、Kubernetes Operator は証明書に必要な構成が含まれているかどうかを確認します。
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 AgentMongoDB
spec.version
は初めて構成を受信すると、 で指定されたバージョンの バイナリをインターネットから、またはMongoDB Ops Manager MongoDB Agentが ローカル モード で構成されている場合は からダウンロードします。Static containers: Static containers do not download binaries at runtime. 詳細については、「静的コンテナ(パブリック プレビュー) 」を参照してください。
MongoDB Agent が自動化構成を受信すると、対応するポッドで
mongod
インスタンスが起動されます。MongoDB カスタム リソースが作成する各ステートメントセットの各ポッド( ステートメントセットを除く)に対して、Kubernetes
mongos
演算子は 永続的なボリューム要求 を生成します 。この動作は、リソース仕様でspec.persistent
をfalse
に設定することで上書きできます。
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を実行します。
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
を使用します。
カスタム リソースの調整MongoDBUser
ユーザー認証方法がSCRAMに設定されている場合、 MongoDB ユーザーリソース仕様は、ユーザー認証情報を保存するシークレット ストレージ ツールによって異なります。 Kubernetes secret を使用している場合spec.passwordSecretKeyRef
、MongoDBUser
リソース仕様の 設定でシークレットを指定します。
Kubernetes Operator は、シークレットの変更を監視します。 シークレットの構成に変更を加えると、Kubernetes Operator は変更を調整します。 次のアクションが必要です。
MongoDB ユーザー リソース仕様 の
spec.MongoDBResourceRef.name
設定で指定された値に基づいて、MongoDB ユーザーのリソースを決定します。Cloud ManagerまたはMongoDB Ops Managerに接続します。
ConfigMap の
orgId
から組織を読み取ります。ConfigMap の
projectName
からプロジェクト名を読み取り、存在しない場合はCloud ManagerまたはMongoDB Ops Managerにこのプロジェクトを作成します。MongoDB Agent 用に Kubernetes 演算子によって作成された
<project-id>-group-secret
が存在することを確認します。 Kubernetes Operator は、シークレット ストレージ ツールからシークレットを読み取るか、 MongoDB Ops Manager APIキーまたはCloud Manager APIキーを使用してシークレットを作成します。
Cloud ManagerまたはMongoDB Ops Managerでユーザーの認証情報を更新し、ユーザーが存在しない場合は新しいユーザーを作成します。
ユーザー認証方法がSCRAMの場合、 はシークレットからパスワードを読み取ります。
ユーザー名を読み取ります。 ユーザー名が変更された場合、Kubernetes Operator は古い名前を削除し、新しい名前を追加します。
ユーザーがCloud ManagerまたはMongoDB Ops Managerに存在することを確認します。
次の図は、ユーザーシークレットまたはMongoDB ユーザー リソース仕様を変更した場合の Kubernetes Operator の動作を示しています。