AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

Considerations

このページでは、本番環境で実行中場合のMongoDB Controls for Kubernetes Operator のベストプラクティスとシステム構成の推奨事項について詳しく説明します。

MongoDB レプリカセットの配置および管理には、Kubernetes Operator の単一のインスタンスを使用することをお勧めします。

10を超える MongoDB レプリカセットを並列に配置するには、Kubernetes Operator インスタンスのスレッド数を増やすことができます。

注意

次の考慮事項が適用されます。

  • このセクションの Kubernetes Operator による一般的な MongoDB 配置のすべてのサイズ設定とパフォーマンスの推奨事項は、変更される可能性があります。 これらの推奨事項をあらゆる種類の保証または制限として扱わないでください。

  • これらの推奨事項はパフォーマンス テストの結果を反映し、本番環境への配置に対する提案を表します。 タイプ t2.2xlarge の 7 つのAmazon Web Services EC2インスタンスと タイプ t2.medium のマスター ノードで構成されるクラスターでテストを実行しました。

  • このセクションの推奨事項では、特定の配置の特性については説明しません。 配置の特性は、これらの推奨事項を作成するために行われた前提と異なる場合があります。 サイズ設定の詳細については、 MongoDB サポートにお問い合わせください。

Kubernetesでは、各 ポッド には、ポッド内の各コンテナの CPU リソースとメモリ リソースを指定できるパラメーターが含まれています。

リソースの限界を示すために、 Kubernetes はリクエストと制限 パラメーターを使用します。ここでは、次のようにします。

  • リクエストは、リソースの下限を示します。

  • limitはリソースの上限を示します。

次のセクションでは、次の方法を説明します。

MongoDB Ops Managerをホストしているポッドには、デフォルトのリソース制限 構成を使用します。

次の推奨事項は、MongoDB 配置とMongoDB Ops Manager KubernetesOperator によって管理される アプリケーションデータベース配置に適用されます。

注意

  • MongoDB はレプリカセットまたはシャードのメンバー間でデータを自動的に複製するため、ストレージ クラスの冗長性は必要ありません。

  • レプリカセットまたはシャードのノード間でストレージを共有することはできません。

静的コンテナは、非静的コンテナよりも簡単で安全です。 静的コンテナは実行時に不変であるため、コンテナの作成に使用されるイメージから変更されることはありません。 さらに、

  • 静的コンテナは実行中、バイナリをダウンロードしたり、ネットワーク接続を介してスクリプトやその他のユーティリティを実行したりしません。 静的コンテナはランタイム構成ファイルのみをダウンロードします。

  • 静的コンテナは実行中、ストレージ ボリュームのマウント以外のファイルを変更しません。

  • コンテナ イメージでセキュリティ スキャンを実行して、ライブ コンテナとして実際に実行されるものを判断できます。 を実行するコンテナは、イメージに定義されているもの以外のバイナリは実行しません。

  • 静的コンテナでは、MongoDB MongoDB Ops Managerまたは別の HTTPS サーバーで バイナリをホストする必要はありません。これは、空の環境がある場合に特に便利です。

  • 静的コンテナでは大量のCMDスクリプトを実行できません。

  • initContainerを使用して静的コンテナ間でファイルをコピーすることはできません。

注意

静的コンテナとして配置する場合、 Kubernetes Operator の配置は、mongodb-agentコンテナと mongodb-enterprise-serverコンテナの 2 つのコンテナで構成されます。MongoDBデータベースのカスタムリソースは、静的コンテナ配置で mongod プロセスを実行する mongodb-agentコンテナからリソース制限の定義を継承します。MongoDBデータベースリソースのリソース制限を変更するには、mongodb-agentコンテナに必要なリソース制限を指定する必要があります。

詳細については、「静的コンテナ(パブリック プレビュー) 」を参照してください。

mongosMongoDBを使用して、アプリと同じノードで軽量の インスタンスを実行できます。Kubernetes Operator は、標準のKubernetes ノードのアフィニティと非アフィニティ 機能をサポートしています。これらの機能を使用すると、アプリケーションと同じノードに mongos を強制的にインストールできます。

次の省略された例は、アフィニティと複数のアベイラビリティーゾーンの構成を示しています。

podAffinityキーは、アプリケーションを別のアプリケーションと同じポッド、ノード、またはデータセンターにインストールするかどうかを決定します。

ポッドのアフィニティを指定するには

  1. 配置にタグを付けるために、spec.podSpec.podTemplate.metadata.labels YAML コレクションにラベルと値を追加します。spec.podSpec.podTemplate.metadata、およびKubernetes PodSpec v1 Core API。を参照してください。

  2. spec.mongosPodSpec.podAffinity .requiredDuringSchedulingIgnoredDuringExecution.labelSelector YAML コレクションで mongos が使用するラベルを指定します。matchExpressions コレクションは、Kubernetes 演算子が mongos をホストする Pod を識別するために使用する label を定義します。

例

apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: my-replica-setspec: members: 3 version: 8.0.0 service: my-service ... podTemplate: spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: failure-domain.beta.kubernetes.io/zone nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2 podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: topologyKey: nodeId

アフィニティ サンプルディレクトリの レプリカセット -になり例。

このディレクトリには、シャーディングされたクラスターとスタンドアロンの MongoDB 配置向けのサンプルアフィニティと複数のゾーン構成も含まれています。

次の例に示すように、この配置の目的を識別する値にspec.serviceパラメータを設定します。

apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: my-replica-setspec: members: 3 version: "8.0.0" service: drilling-pumps-geosensors featureCompatibilityVersion: "8.0"

ポッドのアフィニティ Kubernetes機能を使用して、次の操作を行います。

  • test 、 staging 、 production環境などの異なる MongoDB リソースを分離します。

  • SSDサポートなどの機能を活用するには、特定のノードにポッドを配置します。

mongosPodSpec: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: failure-domain.beta.kubernetes.io/zone

Kubernetes Operator が監視するカスタム リソースを指定できます。 これにより、Kubernetes Operator で管理するリソースのみに CustomResourceDefinition をインストールできます。

指定したカスタム リソースのみを監視するように Kubernetes Operator を構成するには、 helmを使用する必要があります。 関連するhelmインストール手順に従いますが、次の調整を行います。

  1. インストールする CustomResourceDefinitions を決定します。 次のものは任意の数インストールできます。

    値
    説明

    mongodb

    データベース リソースの CustomResourceDefinitions をインストールし、それらのリソースを監視します。

    mongodbusers

    MongoDB ユーザー リソース用に CustomResourceDefinitions をインストールし、それらのリソースを監視します。

    opsmanagers

    MongoDB Ops Managerリソース用の CustomResourceDefinitions をインストールし、それらのリソースを監視します。

  2. Helm Chart をインストールし、Kubernetes Operator が監視する CustomResourceDefinitions を指定します。

    各カスタム リソースは次のようにカンマで区切ります。

    helm install <deployment-name> mongodb/mongodb-kubernetes \ --set operator.watchedResources="{mongodb,mongodbusers}" \ --skip-crds

Kubernetes Operator によってオーケストレーションされるKubernetes配置はステートフルです。Kubernetesコンテナは永続ボリュームを使用して再起動間でクラスターの状態を維持します。

ステートメント要件を満たすために、Kubernetes Operator は次のアクションを実行します。

  • ストレージ デバイスを マウント ポイントと呼ばれる 1 つ以上のディレクトリにマウントします。

  • MongoDB マウント ポイントごとに 1 つの永続ボリュームを作成します。

  • 各 Kubernetes コンテナ内のデフォルト パスを/dataに設定します。

MongoDB クラスターのストレージ ニーズを満たすには、Kubernetes Operator を使用して配置された各レプリカセットの構成を次のように変更します。

次の省略された例は、推奨される永続ストレージ サイズを示しています。

apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: my-replica-clusterspec: ... persistent: true shardPodSpec: ... persistence: multiple: data: storage: "20Gi" logs: storage: "4Gi" storageClass: standard

永続ボリューム構成の完全な例については、 永続ボリューム サンプルディレクトリの レプリカ-セット-永続-ボリューム .YAML を参照してください。このディレクトリには、シャーディングされたクラスターとスタンドアロン配置のサンプル永続ボリューム構成も含まれています。

Kubernetes Operator を使用して MongoDB レプリカセットを配置すると、最初の調整プロセスによって Kubernetes Operator を実行しているポッドの CPU 使用量が増加します。 ただし、レプリカセットの配置プロセスが完了すると、Kubernetes Operator による CPU 使用率は大幅に減少します。

注意

Kubernetes Operator における CPU 使用率の急増は、Kubernetes Operatorのスレッド数に直接影響します。スレッド数( MDB_MAX_CONCURRENT_RECONCILES値で定義) は、任意の場合に並列実行可能な調整プロセスの数と等しいためです。時間。

実稼働環境で最大 50 個の MongoDB レプリカセットまたはシャーディングされたクラスターを Kubernetes Operator と並行して配置するには、Kubernetes Operator ポッドの CPU とメモリ リソースと制限を次のように設定します。

  • spec.template.spec.containers.resources.requests.cpu から 500m

  • spec.template.spec.containers.resources.limits.cpu から 1100m

  • spec.template.spec.containers.resources.requests.memory から 200Mi

  • spec.template.spec.containers.resources.limits.memory から 1Gi

Helm を使用してリソースを配置する場合は、 values.YAML ファイルでこれらの値を定義します。

次の省略された例は、50 のレプリカセットまたはシャーディングされたクラスターの配置における Kubernetes Operator ポッドに推奨される CPU とメモリが含まれる構成を示しています。 配置する MongoDB クラスターが 50 未満の場合は、Kubernetes Operator ポッドの構成ファイルでより低い数値を使用できます。

例

apiVersion: apps/v1kind: Deploymentmetadata: name: mongodb-kubernetes-operator namespace: mongodbspec: replicas: 1 selector: matchLabels: app.kubernetes.io/component: controller app.kubernetes.io/name: mongodb-kubernetes-operator app.kubernetes.io/instance: mongodb-kubernetes-operator template: metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: mongodb-kubernetes-operator app.kubernetes.io/instance: mongodb-kubernetes-operator spec: serviceAccountName: mongodb-kubernetes-operator securityContext: runAsNonRoot: true runAsUser: 2000 containers: - name: mongodb-kubernetes-operator image: quay.io/mongodb/mongodb-kubernetes-operator:1.9.2 imagePullPolicy: Always args: - "-watch-resource=mongodb" - "-watch-resource=opsmanagers" - "-watch-resource=mongodbusers" command: - "/usr/local/bin/mongodb-kubernetes-operator" resources: limits: cpu: 1100m memory: 1Gi requests: cpu: 500m memory: 200Mi

最大50 MongoDBレプリカセットの並列配置を満たすKubernetes Operator ポッドの CPU およびメモリ使用率のリソースと制限の完全な例については、 mongodb-kubernetes.YAMLファイル を参照してください。

レプリカセットまたはシャーディングされたクラスターをホストしているポッドの値は、作成されたポッドの CPU およびメモリのリクエストフィールドにマップされます。これらの値は、 MongoDBホストに記載されている考慮事項と一致します。

Kubernetes Operator は、割り当てられたメモリを処理、WiredTiger キャッシュ、および配置中のパッケージの保存に使用します。

本番環境には、MongoDB ポッドの CPU とメモリのリソースと制限を次のように設定します。

  • spec.podSpec.podTemplate.spec.containers.resources.requests.cpu から 0.25

  • spec.podSpec.podTemplate.spec.containers.resources.limits.cpu から 0.25

  • spec.podSpec.podTemplate.spec.containers.resources.requests.memory から 512M

  • spec.podSpec.podTemplate.spec.containers.resources.limits.memory から 512M

Helm を使用してリソースを配置する場合は、 values.YAML ファイルでこれらの値を定義します。

次の省略された例は、配置内で MongoDB レプリカセット ノードをホストしている各ポッドに推奨される CPU とメモリが含まれる構成を示しています。

例

apiVersion: mongodb.com/v1kind: MongoDBmetadata:name: my-replica-setspec: members: 3 version: 8.0.0 service: my-service ... persistent: true podSpec: podTemplate: spec: containers: - name: mongodb-enterprise-database resources: limits: cpu: "0.25" memory: 512M

MongoDBレプリカセットノードをホストしているポッドの CPU およびメモリ使用率のリソースと制限の完全な例については、 MongoDB Podspec サンプルディレクトリの replica-set-podspec.YAMLファイルを参照してください。

このディレクトリには、次の目的で使用されるポッドのサンプル CPU とメモリ制限の構成も含まれています。

Kubernetes Operator と StateftSets を設定して、1 つのレプリカセットのすべてのメンバーを異なる ノード に分散し、高可用性を確保します。

次の省略された例は、アフィニティと複数のアベイラビリティーゾーンの構成を示しています。

例

apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: my-replica-setspec: members: 3 version: 8.0.0 service: my-service ... podAntiAffinityTopologyKey: nodeId podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: failure-domain.beta.kubernetes.io/zone nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/e2e-az-name operator: In values: - e2e-az1 - e2e-az2

この例では、Kubernetes Operator は、 e2e-az1またはe2e-az2アベイラビリティーゾーン内のラベルkubernetes.io/e2e-az-nameを持つノードへのポッドの配置をスケジュールします。 目的のアベイラビリティーゾーンへのポッドの配置をスケジュールするには、 nodeAffinityを変更します。

アフィニティ サンプルディレクトリの レプリカ-セット-アフィニティ.YAML による複数のアベイラビリティーゾーン構成の完全な例を参照してください。

このディレクトリには、シャーディングされたクラスターとスタンドアロンの MongoDB 配置向けのサンプルアフィニティと複数のゾーン構成も含まれています。

10MongoDBを超えるKubernetes レプリカセットを並行して配置する予定の場合は、 Operator Kubernetesの配置で MDB_MAX_CONCURRENT_RECONC ファイルHelm values.yamlファイルの フィールドを使用して、より高いスレッド数を設定します。

Kubernetes Operator のスレッド数を増やすと、Kubernetes Operator の配置を Kubernetes クラスター内で実行されている数百のMongoDBリソースに垂直にスケーリングし、CPU 使用率を最適化できます。

Kubernetes API サーバーと Kubernetes Operator のリソース使用状況を監視し、必要に応じてそれぞれのリソース割り当てを調整してください。

注意

  • MDB_MAX_CONCURRENT_RECONCILESを10よりも増やす場合は注意が必要です。 特に、Kubernetes Operator と Kubernetes API を厳密に監視して、これらのコンポーネントの負荷増加によるダウンタイムを回避する必要があります。

    配置のニーズに合ったスレッド数を決定するには、次のガイドラインを使用します。

    • 多くのリソースを調整するときに Kubernetes Operator がどの程度応答する必要があるかについての要件

    • Kubernetes 環境内で利用可能なコンピューティング リソースと、Kubernetes コンピューティング リソースが実行されている合計処理負荷(MongoDB とは無関係なリソースを含む)

  • 単一の Kubernetes Operator インスタンスのスレッド数を増やしながら、Kubernetes クラスターでサポートできるMongoDBリソースの数を増やす代わりに、Kubernetes クラスター内に複数の Kubernetes Operator インスタンスを配置します。 ただし、複数の Kubernetes Operator インスタンスを配置するには、2 つの Kubernetes Operator インスタンスが同じMongoDBリソースを監視していないようにする必要があります。

    Kubernetes Operator の複数のインスタンスを実行する場合は注意が必要です。多くの Kubernetes Operator インスタンス(特に並列調整が有効になっている場合)では、API サーバーが負荷されるリスクが大きくなります。

  • Kubernetes API サーバーのスケーリングは、Kubernetes Operator の複数のインスタンスを実行する有効な理由にはなりません。 API サーバーのパフォーマンスが影響を受ける場合、Kubernetes 演算子のインスタンスを追加すると、問題が複合化される可能性があります。

このページを評価