Kako ravnomerno rasporediti podove u zonama dostupnosti?
sobes.tech АИ
Одговор од АИ
Koristite topologySpreadConstraints u manifestu pod-a ili implementacije.
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 # Ključ koji definiše raspodelu u zonama
whenUnsatisfiable: DoNotSchedule # Ako raspodela nije moguća, pod neće biti planiran
labelSelector:
matchLabels:
app: my-app # Ograničenje se primenjuje na podove sa ovim etiketama
maxSkew definiše maksimalni broj podova koji mogu premašiti prosečan u bilo kojoj domeni topologije (zoni). U ovom slučaju, maxSkew: 1 znači da razlika u broju podova između bilo koje dve zone neće preći 1.
topologyKey: topology.kubernetes.io/zone ukazuje da se raspodela vrši na osnovu etiketa zona dostupnosti čvorova.
whenUnsatisfiable: DoNotSchedule znači da ako planifier ne može da ispuni ograničenje topologySpreadConstraints, pod neće biti planiran. Alternativno, može se koristiti ScheduleAnyway, koji će pokušati da planira pod, ali može prekršiti ograničenje.
labelSelector definiše skup podova na koje se primenjuje ovo ograničenje.
Za ravnomernu raspodelu podova u tri zone (npr. us-east-1a, us-east-1b, us-east-1c) sa 9 replika, svaka zona će dobiti po 3 podova.
Ovakva raspodela povećava otpornost aplikacije, jer pad jedne zone neće dovesti do potpune nedostupnosti servisa.