MongoDB リソースのクラスタートポロジーの構成
NodeAffinity
とPodAffinity
を定義することで、Kubernetes 内で MongoDB リソースの配置トポロジーを構成できます。 NodeAffinity
とPodAffinity
は、Kubernetes が Kubernetes クラスターに MongoDB カスタム リソースを配置する場所を指定します。
ノードのアフィニティ を実装できます ノード ラベルの labelSelector
適用による Kubernetes クラスター内の特定のノードに接続し、MongoDB CustomResourceDefinition で対応するラベルを持つ フィールドを定義する 。ノード ラベル を適用する場合 およびlabelSelector
値に一致する場合、Kubernetes は指定された MongoDB CustomResourceDefinition のみを配置します。 Kubernetes クラスター内で指定したノード上。ノード アフィニティ ルールを実装すると、特定のノードタイプに特定のリソースを配置できるため、異種ノードグループに MongoDB リソースを配置する際に便利です。
同様に、 ラベル を適用して PodlabelSelector
アフィニティを実装できます クラスターで実行されているポッドに接続し、それらのラベル値を MongoDB CustomResourceDefinition で定義された 値と整合させます 。ラベル を適用する場合 とlabelSelector
値に一致する場合、Kubernetes は MongoDB カスタム リソースが管理する ポッドと、一致するラベルが適用されたポッドを照合します。ポッドを照合することで、システムのパフォーマンスが向上し、定期的に通信するポッド間のレイテンシが軽減されます。 また、照合してはなりません。
スタンドアロンとレプリカセットの配置では、これらのアフィニティ ルールをspec.podSpec
MongoDB CustomResourceDefinition の に適用できます 。シャーディングされたクラスター配置の場合、これらのアフィニティ ルールは MongoDBspec.configSrvPodSpec
CustomResourceDefinitionspec.mongosPodSpec
の 、spec.shardPodSpec
、 セクションに適用できます 。
シャーディングされたクラスター に配置する場合、 mongos
、シャード、コンフィギュレーションサーバーなどの MongoDB リソースは、MongoDB リソースと同じ名前空間に配置する必要があります。 ただし、その名前空間内で、 CustomResourceDefinition で 、シャード、コンフィギュレーションサーバーのリソースタイプに対して と を構成できます 。
nodeAffinity
podAffinity
mongos
ShardedCluster
前提条件
MongoDB 配置の配置トポロジーを構成するには、MongoDB Kubernetes Operator を通じて配置された MongoDB レプリカセットlabelSelectors
と、MongoDB CustomResourceDefinition で定義された と一致する Kubernetes リソースに適用されたラベルが必要です。 または 次の前提条件を満たす必要があります。
MongoDB CustomResourceDefinition
で定義された と一致する Kubernetes リソースに適用されるラベル
labelSelectors
。
手順
MongoDB CRD マニフェストを更新します。
次の例に示すように、MongoDB シャーディングされたクラスター定義のpodTemplate.affinity
セクションに入力します。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: my-sharded-cluster 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: 6.0.0 12 service: my-service 13 14 opsManager: 15 configMapRef: 16 name: my-project 17 credentials: my-credentials 18 type: ShardedCluster 19 20 persistent: true 21 configSrvPodSpec: 22 podTemplate: 23 spec: 24 affinity: 25 podAffinity: 26 requiredDuringSchedulingIgnoredDuringExecution: 27 - labelSelector: 28 matchExpressions: 29 - key: security 30 operator: In 31 values: 32 - S1 33 topologyKey: failure-domain.beta.kubernetes.io/zone 34 nodeAffinity: 35 requiredDuringSchedulingIgnoredDuringExecution: 36 nodeSelectorTerms: 37 - matchExpressions: 38 - key: kubernetes.io/e2e-az-name 39 operator: In 40 values: 41 - e2e-az1 42 - e2e-az2 43 podAntiAffinity: 44 requiredDuringSchedulingIgnoredDuringExecution: 45 - podAffinityTerm: 46 topologyKey: nodeId 47 mongosPodSpec: 48 podTemplate: 49 spec: 50 affinity: 51 podAffinity: 52 requiredDuringSchedulingIgnoredDuringExecution: 53 - labelSelector: 54 matchExpressions: 55 - key: security 56 operator: In 57 values: 58 - S1 59 topologyKey: failure-domain.beta.kubernetes.io/zone 60 nodeAffinity: 61 requiredDuringSchedulingIgnoredDuringExecution: 62 nodeSelectorTerms: 63 - matchExpressions: 64 - key: kubernetes.io/e2e-az-name 65 operator: In 66 values: 67 - e2e-az1 68 - e2e-az2 69 podAntiAffinity: 70 requiredDuringSchedulingIgnoredDuringExecution: 71 - podAffinityTerm: 72 topologyKey: nodeId 73 shardPodSpec: 74 podTemplate: 75 spec: 76 affinity: 77 podAffinity: 78 requiredDuringSchedulingIgnoredDuringExecution: 79 - labelSelector: 80 matchExpressions: 81 - key: security 82 operator: In 83 values: 84 - S1 85 topologyKey: failure-domain.beta.kubernetes.io/zone 86 nodeAffinity: 87 requiredDuringSchedulingIgnoredDuringExecution: 88 nodeSelectorTerms: 89 - matchExpressions: 90 - key: kubernetes.io/e2e-az-name 91 operator: In 92 values: 93 - e2e-az1 94 - e2e-az2 95 podAntiAffinity: 96 requiredDuringSchedulingIgnoredDuringExecution: 97 - podAffinityTerm: 98 topologyKey: nodeId 99 ...