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.
Puedes implementar labelSelector la afinidad de nodos aplicando etiquetas a nodos específicos dentro de tu clúster de Kubernetes y definiendo campos con etiquetas correspondientes en tu CustomResourceDefinition de MongoDB. Al aplicar etiquetas y labelSelector valores coincidentes, Kubernetes solo implementa una CustomResourceDefinition de MongoDB determinada en los nodos que especifiques dentro de tu clúster. Implementar reglas de afinidad de nodos puede ser útil al implementar recursos de MongoDB en grupos de nodos heterogéneos, ya que te permite implementar recursos específicos en variedades de nodos específicas.
De forma similar, puedes implementar labelSelector la afinidad de Pods aplicando etiquetas a los Pods que se ejecutan en tu clúster y alineando esos valores de etiqueta con los valores definidos en tu CustomResourceDefinition de MongoDB.labelSelector Al aplicar etiquetas y valores coincidentes, Kubernetes colocaliza los Pods de MongoDB gestionados por recursos personalizados con los Pods que tienen etiquetas coincidentes. Al colocar Pods, puedes mejorar el rendimiento del sistema y reducir la latencia entre Pods que se comunican regularmente. También puedes definir reglas de antiafinidad de Pods que te permiten especificar los Pods que no deben colocarse.
Para implementaciones independientes y de conjuntos de réplicas, puede aplicar estas reglas de afinidad a la secciónspec.podSpecde su definición de recurso personalizado de MongoDB. Para implementaciones de clúster fragmentado, puede aplicar estas reglas de afinidad a las seccionesspec.configSrvPodSpec, spec.shardPodSpecyspec.mongosPodSpecde su definición de recurso personalizado de MongoDB.
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 ...