¿Cómo distribuir uniformemente los pods en las zonas de disponibilidad?
sobes.tech AI
Respuesta de la IA
Usar topologySpreadConstraints en el manifiesto del pod o despliegue.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 9
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app:latest
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone # Clave que define la zona de distribución (zona de disponibilidad)
whenUnsatisfiable: DoNotSchedule # Si la distribución no es posible, el pod no será programado
labelSelector:
matchLabels:
app: my-app # La restricción se aplica a los pods con esta etiqueta
maxSkew define el número máximo de pods que se permite exceder en cualquier dominio de topología (zona de disponibilidad). En este caso, maxSkew: 1 significa que la diferencia en el número de pods entre cualquier par de zonas de disponibilidad no excederá 1.
topologyKey: topology.kubernetes.io/zone indica que la distribución debe basarse en las etiquetas de las zonas de disponibilidad de los nodos.
whenUnsatisfiable: DoNotSchedule significa que si el planificador no puede cumplir con la restricción topologySpreadConstraints, el pod no será programado. Otra opción es ScheduleAnyway, que intentará programar el pod pero puede violar la restricción.
labelSelector define el conjunto de pods al que se aplica esta restricción.
Para distribuir uniformemente los pods en tres zonas (por ejemplo, us-east-1a, us-east-1b, us-east-1c) con 9 réplicas, cada zona recibirá 3 pods.
Este tipo de distribución aumenta la resistencia a fallos de la aplicación, ya que la falla de una zona de disponibilidad no provocará la inaccesibilidad total del servicio.