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.