Sobes.tech
Middle

Cum distribuiți uniform pod-urile în zonele de disponibilitate?

sobes.tech AI

Răspuns de la AI

Utilizați topologySpreadConstraints în manifestul podului sau al implementării.

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 # Cheia care definește distribuția în zone
        whenUnsatisfiable: DoNotSchedule # Dacă distribuția nu este posibilă, podul nu va fi programat
        labelSelector:
          matchLabels:
            app: my-app # Restricția se aplică podurilor cu acest etichetă

maxSkew determină numărul maxim de poduri care pot depăși media în orice domeniu de topologie (zonă). În acest caz, maxSkew: 1 înseamnă că diferența în numărul de poduri între orice pereche de zone nu va depăși 1.

topologyKey: topology.kubernetes.io/zone indică faptul că distribuția trebuie să se bazeze pe etichetele zonelor de disponibilitate ale nodurilor.

whenUnsatisfiable: DoNotSchedule înseamnă că dacă planificatorul nu poate satisface restricția topologySpreadConstraints, podul nu va fi programat. O altă opțiune este ScheduleAnyway, care va încerca să programeze podul, dar poate încălca restricția.

labelSelector definește setul de poduri asupra cărora se aplică această restricție.

Pentru o distribuție uniformă a podurilor pe trei zone (de exemplu, us-east-1a, us-east-1b, us-east-1c) cu 9 replici, fiecare zonă va primi câte 3 poduri.

Această distribuție crește reziliența aplicației, deoarece defectul unei zone de disponibilitate nu va duce la indisponibilitatea completă a serviciului.