Kaip tolygiai paskirstyti podus prieinamumo zonose?
sobes.tech AI
Atsakymas iš AI
Naudokite topologySpreadConstraints podui ar diegimo manifeste.
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 # Raktas, apibrėžiantis paskirstymo sritį
whenUnsatisfiable: DoNotSchedule # Jei paskirstymas neįmanomas, pod'as nebus suplanuotas
labelSelector:
matchLabels:
app: my-app # Apribojimas taikomas šiam žymekliui priklausantiems podams
maxSkew nustato maksimalų leidžiamą podų skaičiaus viršijimą vidutiniame skaičiuje bet kurioje topologijos srityje (zonoje). Šiuo atveju, maxSkew: 1 reiškia, kad zonų skirtumas podų skaičiuje neviršys 1.
topologyKey: topology.kubernetes.io/zone nurodo, kad paskirstymas turi būti atliekamas pagal zonų žymas.
whenUnsatisfiable: DoNotSchedule reiškia, kad jei planuotojas negali patenkinti topologySpreadConstraints apribojimo, pod'as nebus suplanuotas. Kitas variantas yra ScheduleAnyway, kuris bandys suplanuoti pod'ą, bet gali pažeisti apribojimą.
labelSelector apibrėžia podų rinkinį, kuriems taikomas šis apribojimas.
Norint tolygiai paskirstyti podus per tris zonas (pavyzdžiui, us-east-1a, us-east-1b, us-east-1c) su 9 replikomis, kiekviena zona gaus po 3 podus.
Toks paskirstymas padidina programos atsparumą gedimams, nes viena zonos išjungimas nesukels viso paslaugos nepasiekiamumo.