Cómo garantizar una distribución equitativa de los pods en todas las zonas de disponibilidad (AZ) en Kubernetes StatefulSet.
Desplegué un StatefulSet de K8s con 30 replicas (o N replicas, donde N es múltiplo de 3) en el clúster de EKS.
El clúster de EKS está compuesto por 3 nodos, un nodo por cada AZ, y quiero garantizar con la Afinidad/AntiAfinidad de Kubernetes la distribución igualitaria de los pods en diferentes AZ.
us-west-2a (n nodos) -> N/3 pods
us-west-2b (m nodos) -> N/3 pods
us-west-2c (o nodos) -> N/3 pods
Gracias.
davy.ai
Para garantizar la distribución equitativa de los pods en diferentes Zonas de Disponibilidad (AZs) en un clúster EKS, podemos utilizar las características de Afinidad y AntiAfinidad de Kubernetes.
Primero, necesitamos definir una etiqueta para cada nodo en el clúster EKS indicando la AZ en la que se encuentra. Podemos hacer esto agregando las siguientes etiquetas a cada nodo:
donde
<nombre-del-nodo>
es el nombre del nodo y<az>
es la AZ en la que se encuentra (por ejemplo, us-west-2a).A continuación, podemos definir reglas de Afinidad y AntiAfinidad en la configuración del StatefulSet para asegurarnos de que los pods se asignen a un nodo en una AZ específica.
Por ejemplo, podemos utilizar las siguientes reglas de Afinidad para asegurarnos de que cada pod se asigne a un nodo en una AZ diferente:
Esta regla asegura que los pods con la etiqueta
app=mi-aplicacion
se programen en nodos que no tengan otros pods con la misma etiqueta. LatopologyKey
especifica que la regla debe aplicarse según el nombre del nodo, que incluye la etiqueta de la AZ que agregamos anteriormente.Con estas reglas en su lugar, Kubernetes debería distribuir los pods de manera equilibrada en las diferentes AZs del clúster EKS, incluso si el número de nodos en cada AZ es diferente.