Jak rovnoměrně rozdělit pody v dostupnostních zónách?
sobes.tech AI
Odpověď od AI
Použijte topologySpreadConstraints v manifestu podu nebo nasazení.
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 # Klíč, který určuje rozložení v zónách
whenUnsatisfiable: DoNotSchedule # Pokud rozložení není možné, pod nebude naplánován
labelSelector:
matchLabels:
app: my-app # Omezí se na podu s tímto štítkem
maxSkew určuje maximální počet podů, které mohou překročit průměr v jakékoli doméně topologie (zóně). V tomto případě maxSkew: 1 znamená, že rozdíl v počtu podů mezi jakoukoli dvojicí zón nebude přesahovat 1.
topologyKey: topology.kubernetes.io/zone označuje, že rozložení by mělo být založeno na štítcích zón dostupnosti uzlů.
whenUnsatisfiable: DoNotSchedule znamená, že pokud plánovač nemůže splnit omezení topologySpreadConstraints, pod nebude naplánován. Alternativně lze použít ScheduleAnyway, který se pokusí naplánovat pod, ale může porušit omezení.
labelSelector definuje sadu podů, na které se toto omezení vztahuje.
Pro rovnoměrné rozložení podů do tří zón (například us-east-1a, us-east-1b, us-east-1c) s 9 replikami, každá zóna obdrží 3 pod.
Takové rozložení zvyšuje odolnost aplikace, protože selhání jedné zóny nezpůsobí úplnou nedostupnost služby.