Sobes.tech
Middle

Come distribuire uniformemente i pod nelle zone di disponibilità?

sobes.tech AI

Risposta dell'AI

Utilizzare topologySpreadConstraints nel manifesto del pod o del deployment.

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 # Chiave che definisce la distribuzione in zone
        whenUnsatisfiable: DoNotSchedule # Se la distribuzione non è possibile, il pod non verrà pianificato
        labelSelector:
          matchLabels:
            app: my-app # La restrizione si applica ai pod con questa etichetta

maxSkew definisce il numero massimo di pod che può superare la media in qualsiasi dominio di topologia (zona). In questo caso, maxSkew: 1 significa che la differenza nel numero di pod tra qualsiasi coppia di zone non supererà 1.

topologyKey: topology.kubernetes.io/zone indica che la distribuzione si basa sulle etichette delle zone di disponibilità dei nodi.

whenUnsatisfiable: DoNotSchedule significa che se il pianificatore non può soddisfare la restrizione topologySpreadConstraints, il pod non verrà pianificato. Un'altra opzione è ScheduleAnyway, che tenterà di pianificare il pod ma potrebbe violare la restrizione.

labelSelector definisce l'insieme di pod a cui si applica questa restrizione.

Per distribuire uniformemente i pod su tre zone (ad esempio, us-east-1a, us-east-1b, us-east-1c) con 9 repliche, ogni zona riceverà 3 pod.

Questo tipo di distribuzione aumenta la tolleranza ai guasti dell'applicazione, poiché il fallimento di una zona di disponibilità non renderà il servizio completamente inaccessibile.