Jak równomiernie rozłożyć pody w strefach dostępności?
sobes.tech AI
Odpowiedź od AI
Użyj topologySpreadConstraints w manifeście poda lub wdrożenia.
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 # Klucz określający strefę rozkładu (strefa dostępności)
whenUnsatisfiable: DoNotSchedule # Jeśli rozkład jest niemożliwy, pod nie zostanie zaplanowany
labelSelector:
matchLabels:
app: my-app # Ograniczenie dotyczy podów z tym etykietą
maxSkew określa maksymalną liczbę podów, które mogą przekraczać średnią w dowolnej domenie topologii (strefie dostępności). W tym przypadku, maxSkew: 1 oznacza, że różnica w liczbie podów między dowolną parą stref nie przekroczy 1.
topologyKey: topology.kubernetes.io/zone wskazuje, że rozkład ma być oparty na etykietach stref dostępności węzłów.
whenUnsatisfiable: DoNotSchedule oznacza, że jeśli planista nie może spełnić ograniczenia topologySpreadConstraints, pod nie zostanie zaplanowany. Alternatywnie można użyć ScheduleAnyway, który spróbuje zaplanować pod, ale może naruszyć ograniczenie.
labelSelector określa zestaw podów, do których odnosi się to ograniczenie.
Aby równomiernie rozłożyć pody na trzy strefy (np. us-east-1a, us-east-1b, us-east-1c) z 9 replikami, każda strefa otrzyma po 3 pody.
Taki rozkład zwiększa odporność aplikacji na awarie, ponieważ awaria jednej strefy nie spowoduje całkowitej niedostępności usługi.