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

Considerations

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

Kubernetes Operator の単一のインスタンスを使用して、最大 20 のレプリカセットを並列に配置することをお勧めします。

この数50 に増やすと、Kubernetes Operator によるリソースのダウンロード、インストール、配置、調整にかかる時間がかなりの増加が予想されます。

レプリカセット 50 の場合、配置にかかる時間はさまざまで、最大 40 分かかる場合があります。 この時間は、Kubernetes クラスターのネットワーク帯域幅と、各 MongoDB Agent が各 MongoDB クラスター ノードの MongoDB インストール バイナリをインターネットからダウンロードするのにかかる時間によって異なります。

50 を超える MongoDB レプリカセットを並列に配置するには、Kubernetes 演算子の複数のインスタンスを使用します。

注意

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

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

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

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

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

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

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

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

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

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

静的コンテナは、非静的コンテナよりも安全で簡単です。 静的コンテナは実行時に不変です。 さらに、

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

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

  • 静的コンテナでは、コンテナのセキュリティ脆弱性についてコンテナをスキャンする必要はありません。これは、コンテナのセキュリティスキャンが必要な非静的コンテナとは対照的です。 静的コンテナを使用する場合、セキュリティ スキャンはコンテナ イメージ自体に対してのみ実行できますが、そのコンテナに対しては実行できません。

  • 静的コンテナでは、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.metadataKubernetes PodSpec v1 Core APIを参照してください。

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

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-set
5spec:
6 members: 3
7 version: 4.2.1-ent
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 配置向けのサンプルアフィニティと複数のゾーン構成も含まれています。

Tip

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

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

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

  • teststagingproduction環境などの異なる 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/enterprise-operator \
    --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 を使用してレプリカセットを配置すると、Kubernetes Operator のホストに使用される ポッドの CPU 使用率は最初は高くなっていますが、配置が完了するまでに低下します。

実稼働環境で最大 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

CPU の測定単位を含めない場合、 Kubernetes はそれをコア数として解釈します。たとえば、500m のように m を指定すると、 Kubernetes はそれを millis として解釈します。詳しくは、「 CPU の意味 」を参照してください。

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

注意

モニタリング ツールは、コンテナの実際のサイズではなく、ノードのサイズを報告します。

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: mongodb-enterprise-operator
5 namespace: mongodb
6spec:
7 replicas: 1
8 selector:
9 matchLabels:
10 app.kubernetes.io/component: controller
11 app.kubernetes.io/name: mongodb-enterprise-operator
12 app.kubernetes.io/instance: mongodb-enterprise-operator
13 template:
14 metadata:
15 labels:
16 app.kubernetes.io/component: controller
17 app.kubernetes.io/name: mongodb-enterprise-operator
18 app.kubernetes.io/instance: mongodb-enterprise-operator
19 spec:
20 serviceAccountName: mongodb-enterprise-operator
21 securityContext:
22 runAsNonRoot: true
23 runAsUser: 2000
24 containers:
25 - name: mongodb-enterprise-operator
26 image: quay.io/mongodb/mongodb-enterprise-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-enterprise-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-enterprise.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

CPU の測定単位を含めない場合、 Kubernetes はそれをコア数として解釈します。たとえば、500m のように m を指定すると、 Kubernetes はそれを millis として解釈します。詳しくは、「 CPU の意味 」を参照してください。

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

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4name: my-replica-set
5spec:
6 members: 3
7 version: 4.0.0-ent
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 とメモリ制限の構成も含まれています。

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

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

1apiVersion: mongodb.com/v1
2kind: MongoDB
3metadata:
4 name: my-replica-set
5spec:
6 members: 3
7 version: 4.2.1-ent
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 配置向けのサンプルアフィニティと複数のゾーン構成も含まれています。

戻る

配置範囲を設定する