Ako rovnomerne rozložiť pody v zónach dostupnosti?
sobes.tech AI
Odpoveď od AI
Použite topologySpreadConstraints v manifeste podu alebo nasadení.
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 # Kľúč, ktorý určuje rozloženie v zónach
whenUnsatisfiable: DoNotSchedule # Ak rozloženie nie je možné, pod nebude naplánovaný
labelSelector:
matchLabels:
app: my-app # Obmedzenie sa vzťahuje na pod-y s týmto štítkom
maxSkew určuje maximálny počet podov, ktoré môžu prekročiť priemerný v akomkoľvek doméne topológie (zóna). V tomto prípade, maxSkew: 1 znamená, že rozdiel v počte podov medzi akoukoľvek dvojicou zón nebude presahovať 1.
topologyKey: topology.kubernetes.io/zone indikuje, že rozloženie by malo byť založené na štítkoch zón dostupnosti uzlov.
whenUnsatisfiable: DoNotSchedule znamená, že ak plánovač nemôže splniť obmedzenie topologySpreadConstraints, pod nebude naplánovaný. Alternatívne môže byť použitý ScheduleAnyway, ktorý sa pokúsi naplánovať pod, ale môže porušiť obmedzenie.
labelSelector definuje množinu podov, na ktoré sa toto obmedzenie vzťahuje.
Pre rovnomerné rozloženie podov do troch zón (napríklad us-east-1a, us-east-1b, us-east-1c) s 9 replikami, každá zóna dostane po 3 podoch.
Takéto rozloženie zvyšuje odolnosť aplikácie, pretože zlyhanie jednej zóny nevedie k úplnej nedostupnosti služby.