Как равномерно да разпределите подовете в зоните за достъпност?
sobes.tech AI
Отговор от AI
Използвайте topologySpreadConstraints в манифест на пода или разгръщане.
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 # Ключ, който определя разпределението в зони
whenUnsatisfiable: DoNotSchedule # Ако разпределението е невъзможно, подът няма да бъде планиран
labelSelector:
matchLabels:
app: my-app # Ограничението се прилага към подове с този етикет
maxSkew определя максималния брой подове, които могат да превишават средното в който и да е домейн на топологията (зона). В този случай, maxSkew: 1 означава, че разликата в броя подове между всяка двойка зони няма да надвишава 1.
topologyKey: topology.kubernetes.io/zone указва, че разпределението трябва да се базира на етикетите на зоните за достъп на възлите.
whenUnsatisfiable: DoNotSchedule означава, че ако планировчикът не може да изпълни ограничението topologySpreadConstraints, подът няма да бъде планиран. Друг вариант е ScheduleAnyway, който ще се опита да планира пода, но може да наруши ограничението.
labelSelector определя набора от подове, към които се прилага това ограничение.
За равномерно разпределение на подовете в три зони (например, us-east-1a, us-east-1b, us-east-1c) с 9 реплики, всяка зона ще получи по 3 пода.
Тази разпределение увеличава устойчивостта на приложението, тъй като отказът на една зона не ще доведе до пълна недостъпност на услугата.