NodeAffinity
とPodAffinity
を定義することで、Kubernetes 内で MongoDB リソースの配置トポロジーを構成できます。 NodeAffinity
とPodAffinity
は、Kubernetes が Kubernetes クラスターに MongoDB カスタム リソースを配置する場所を指定します。
Kubernetesクラスター内の特定のノードにノードラベルを適用し、labelSelector
MongoDB CustomResourceDefinition で対応するラベルを持つ フィールドを定義することで、ノードアフィニティを実装できます。ノードラベルを適用し、 値と一致すると、labelSelector
Kubernetes は、 Kubernetesクラスター内で指定されたノードに特定のMongoDB CustomResourceDefinition のみを配置します。ノードアフィニティ ルールを実装すると、特定のノードノードにMongoDBリソースを配置する際に便利です。
同様に、クラスター内で実行中いるポッドにラベルを適用し、それらのラベル値をMongoDB CustomResourceDefinition で定義された 値と整合させることで、PedlabelSelector
アフィニティを実装できます。ラベルを適用し、 labelSelector
値と一致させると、 Kubernetes は、一致するラベルが適用されたポッドとMongoDBカスタム リソースが管理するポッドとを照合します。ポッドを照合することで、システムのパフォーマンスが向上し、定期的に通信するポッド間のレイテンシが軽減されます。また、照合してはなりません。
スタンドアロンおよびレプリカセットの配置では、これらのアフィニティspec.podSpec
ルールをMongoDB CustomResourceDefinition の に適用できます。シャードクラスタ配置の場合、これらのアフィニティ ルールはMongoDBspec.configSrvPodSpec
spec.mongosPodSpec
CustomResourceDefinitionspec.shardPodSpec
の 、 、および セクションに適用できます。
シャードクラスタを配置する場合、mongos
、シャード、コンフィギュレーションサーバーなどの MongoDB リソースは、 MongoDBリソースと同じ名前空間に配置する必要があります。ただし、その名前空間内では、nodeAffinity
podAffinity
mongos
ShardedCluster
CustomResourceDefinition で、 、シャード、コンフィギュレーションサーバーのリソースタイプに対して と を構成できます。
前提条件
MongoDBデプロイの配置トポロジーを構成するには、 MongoDB Kubernetes Operator を通じて配置されたMongoDBレプリカセットと、labelSelectors
MongoDB CustomResourceDefinition で定義された と一致するKubernetesリソースに適用されたラベルが必要です。または、次の前提条件を満たす必要があります。
MongoDB CustomResourceDefinition で定義された
labelSelectors
と一致するKubernetesリソースに適用されるラベル。
手順
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 ...