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

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はリソースの上限を示します。

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

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

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

注意

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

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

  • 制約に応じて最高のパフォーマンスを提供するストレージ クラスを使用してください。 詳細については、「 配置のスケーリング」を参照してください。

  • ReadWriteOnceストレージクラスに対して、 をサポートする永続的なボリュームをプロビジョニングします。

  • ワーカーノードレベルで、 Linux上のMongoDBのベストプラクティスを適用します。

  • データベースボリュームのサイズ変更を可能にするには、ボリューム展開をサポートするストレージクラスを使用するようにしてください。

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

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

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

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

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

  • 静的コンテナでは大量の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配置にタグを付けるには、spec.podSpec.podTemplate.metadata YAMLコレクションにラベルと値を追加します。 とKubernetes PodSpec v1 Core API を参照してください。

  2. が mongosspec.mongosPodSpec.podAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelectorYAMLコレクションで使用するラベルを指定します。 matchExpressionsコレクションは、label Kubernetes Operator が をホストするためのポッドを識別するために使用する を定義します。mongos

例

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-set
5spec:
6 members: 3
7 version: 8.0.0
8 service: my-service
9
10 ...
11 podTemplate:
12 spec:
13 affinity:
14 podAffinity:
15 requiredDuringSchedulingIgnoredDuringExecution:
16 - labelSelector:
17 matchExpressions:
18 - key: security
19 operator: In
20 values:
21 - S1
22 topologyKey: failure-domain.beta.kubernetes.io/zone
23 nodeAffinity:
24 requiredDuringSchedulingIgnoredDuringExecution:
25 nodeSelectorTerms:
26 - matchExpressions:
27 - key: kubernetes.io/e2e-az-name
28 operator: In
29 values:
30 - e2e-az1
31 - e2e-az2
32 podAntiAffinity:
33 requiredDuringSchedulingIgnoredDuringExecution:
34 - podAffinityTerm:
35 topologyKey: nodeId

アフィニティ サンプルディレクトリの レプリカノード-に例ます。

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

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

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-set
5spec:
6 members: 3
7 version: "8.0.0"
8 service: drilling-pumps-geosensors
9 featureCompatibilityVersion: "8.0"

ポッドのアフィニティ を使用する Kubernetes の機能:

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

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

1mongosPodSpec:
2 podAffinity:
3 requiredDuringSchedulingIgnoredDuringExecution:
4 - labelSelector:
5 matchExpressions:
6 - key: security
7 operator: In
8 values:
9 - S1
10 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 は次のアクションを実行します。

  • MongoDBデプロイの 永続的なボリュームを作成します 。

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

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

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

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

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

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-cluster
5spec:
6
7 ...
8 persistent: true
9
10
11 shardPodSpec:
12 ...
13 persistence:
14 multiple:
15 data:
16 storage: "20Gi"
17 logs:
18 storage: "4Gi"
19 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 ポッドの構成ファイルでより低い数値を使用できます。

例

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: mongodb-kubernetes-operator
5 namespace: mongodb
6spec:
7 replicas: 1
8 selector:
9 matchLabels:
10 app.kubernetes.io/component: controller
11 app.kubernetes.io/name: mongodb-kubernetes-operator
12 app.kubernetes.io/instance: mongodb-kubernetes-operator
13 template:
14 metadata:
15 labels:
16 app.kubernetes.io/component: controller
17 app.kubernetes.io/name: mongodb-kubernetes-operator
18 app.kubernetes.io/instance: mongodb-kubernetes-operator
19 spec:
20 serviceAccountName: mongodb-kubernetes-operator
21 securityContext:
22 runAsNonRoot: true
23 runAsUser: 2000
24 containers:
25 - name: mongodb-kubernetes-operator
26 image: quay.io/mongodb/mongodb-kubernetes-operator:1.9.2
27 imagePullPolicy: Always
28 args:
29 - "-watch-resource=mongodb"
30 - "-watch-resource=opsmanagers"
31 - "-watch-resource=mongodbusers"
32 command:
33 - "/usr/local/bin/mongodb-kubernetes-operator"
34 resources:
35 limits:
36 cpu: 1100m
37 memory: 1Gi
38 requests:
39 cpu: 500m
40 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 とメモリが含まれる構成を示しています。

例

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4name: my-replica-set
5spec:
6 members: 3
7 version: 8.0.0
8 service: my-service
9 ...
10
11 persistent: true
12 podSpec:
13 podTemplate:
14 spec:
15 containers:
16 - name: mongodb-enterprise-database
17 resources:
18 limits:
19 cpu: "0.25"
20 memory: 512M

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

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

  • シャーディングされたクラスター、sharded-cluster-podspec.yaml. 内の。

  • スタンドアロンのMongoDB配置(スタンドアロン-podspec.YAML)。

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

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

例

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-set
5spec:
6 members: 3
7 version: 8.0.0
8 service: my-service
9 ...
10 podAntiAffinityTopologyKey: nodeId
11 podAffinity:
12 requiredDuringSchedulingIgnoredDuringExecution:
13 - labelSelector:
14 matchExpressions:
15 - key: security
16 operator: In
17 values:
18 - S1
19 topologyKey: failure-domain.beta.kubernetes.io/zone
20
21 nodeAffinity:
22 requiredDuringSchedulingIgnoredDuringExecution:
23 nodeSelectorTerms:
24 - matchExpressions:
25 - key: kubernetes.io/e2e-az-name
26 operator: In
27 values:
28 - e2e-az1
29 - 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 演算子のインスタンスを追加すると、問題が複合化される可能性があります。

このページを評価