Puedes configurar la topología de implementación de tus recursos de MongoDB dentro de Kubernetes definiendo NodeAffinity y PodAffinity. NodeAffinity y PodAffinity especifican dónde Kubernetes despliega los recursos personalizados de MongoDB en su clúster de Kubernetes.
You can implement node affinity by applying node labels to specific nodes within your Kubernetes cluster and defining labelSelector fields with corrosponding labels in your MongoDB CustomResourceDefinition. When you apply node labels and matching labelSelector values, Kubernetes only deploys a given MongoDB CustomResourceDefinition on the nodes you specify within your Kubernetes cluster. Implementing node affinity rules can be useful when deploying MongoDB resources in heterogeneous node groups, as it allows you to deploy specific resources on specific node varieties.
Similarly, you can implement Pod affinity by applying labels to Pods that are running in your cluster and aligning those label values with labelSelector values defined in your MongoDB CustomResourceDefinition. When you apply labels and matching labelSelector values, Kubernetes colocates MongoDB custom resource-managed Pods with Pods with matching labels applied. By collocating Pods, you can improve system performance and reduce latency between Pods that communicate regularly. You can also define Pod antiaffinity rules which allow you to specify Pods which should not be colocated.
For Standalone and Replica Set deployments, you can apply these affinity rules to the spec.podSpec of your MongoDB CustomResourceDefinition. For Sharded Cluster deployments, you can apply these affinity rules to the spec.configSrvPodSpec, spec.shardPodSpec, and spec.mongosPodSpec sections of your MongoDB CustomResourceDefinition.
Debes implementar los recursos de MongoDB, como mongos, particiones y servidores de configuración en el caso de una implementación de Sharded Cluster, en el mismo namespace que el recurso de MongoDB. Sin embargo, dentro de ese namespace, puedes configurar nodeAffinity y podAffinity para mongos, particiones y tipos de recursos del servidor de configuración en la ShardedCluster CustomResourceDefinition.
Requisitos previos
Para configurar la topología de la implementación para tu implementación de MongoDB, debes tener un set de réplicas de MongoDB implementado a través de MongoDB Kubernetes operador con etiquetas aplicadas a los recursos de Kubernetes que se alinearán con labelSelectors definido en la MongoDB CustomResourceDefinition o cumplir con los siguientes requisitos previos:
Etiquetas aplicadas a los recursos de Kubernetes que se alinearán con
labelSelectorsdefinidas en la MongoDB CustomResourceDefinition.
Procedimiento
Actualiza tu manifiesto CRD de MongoDB.
Rellena las secciones podTemplate.spec.affinity de tu definición de MongoDB clúster como se muestra en el siguiente ejemplo:
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: 8.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 ...