Puede configurar la topología de implementación de sus recursos de MongoDB en Kubernetes definiendo NodeAffinity y PodAffinity. NodeAffinity y PodAffinity especifican dónde Kubernetes implementa los recursos personalizados de MongoDB en tu clúster de Kubernetes.
Puedes implementar afinidad de nodo aplicando etiquetas de nodo a nodos específicos dentro de tu clúster de Kubernetes y definiendo campos labelSelector con etiquetas correspondientes en tu MongoDB CustomResourceDefinition. Cuando se aplican etiquetas de nodo y valores labelSelector coincidentes, Kubernetes solo implementa un MongoDB CustomResourceDefinition dado en los nodos que especifiques dentro de tu clúster de Kubernetes. Implementar reglas de afinidad de nodos puede ser útil al implementar recursos de MongoDB en grupos de nodos heterogéneos, ya que permite implementar recursos específicos en variedades específicas de nodos.
De manera similar, puedes implementar la afinidad de Pods aplicando etiquetas a los Pods que se están ejecutando en tu clúster y alineando esos valores de etiqueta con los valores labelSelector definidos en tu MongoDB CustomResourceDefinition. Cuando aplicas etiquetas y valores coincidentes de labelSelector, Kubernetes coloca los Pods administrados por recursos personalizados de MongoDB junto a los Pods con etiquetas correspondientes aplicadas. Al ubicar los Pods en conjunto, puedes mejorar el rendimiento del sistema y reducir la latencia entre Pods que se comunican regularmente. También puede definir reglas de antiafinidad de Pods que le permitan especificar los Pods que no deben estar colocados juntos.
Para implementaciones independientes y de conjuntos de réplicas, puede aplicar estas reglas de afinidad a las spec.podSpec de tu MongoDB CustomResourceDefinition. Para implementaciones de Clúster Partitionado, puedes aplicar estas reglas de afinidad a las secciones spec.configSrvPodSpec, spec.shardPodSpec y spec.mongosPodSpec de tu CustomResourceDefinition de MongoDB.
Debe implementar recursos de MongoDB,mongos como, fragmentos y servidores de configuración en el caso de una implementación de clúster fragmentado, en el mismo espacio de nombres que el recurso de MongoDB. Sin embargo, dentro de ese espacio de nombres, puede configurar nodeAffinity y podAffinity para los mongos tipos de recurso, fragmentos y servidores de configuración en la ShardedCluster CustomResourceDefinition.
Requisitos previos
Para configurar la topología de implementación para su implementación de MongoDB, debe tener un conjunto de réplicas de MongoDB implementado a través del Operador Kubernetes de MongoDB junto con etiquetas aplicadas a los recursos de Kubernetes que se alinearán con labelSelectors definido en MongoDB CustomResourceDefinition o cumplir con los siguientes requisitos previos:
Una instancia de Ops Manager o una organización de Cloud Manager.
Credenciales para el Operador de Kubernetes o configura una herramienta de almacenamiento de secretos diferente.
Etiquetas aplicadas a los recursos de Kubernetes que se alinearán con
labelSelectorsdefinidas en la MongoDB CustomResourceDefinition.
Procedimiento
Actualiza tu manifiesto CRD de MongoDB.
Complete las secciones podTemplate.spec.affinity de su definición de clúster fragmentado de MongoDB 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 ...