Sobes.tech
Middle

¿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.