Sobes.tech
Middle

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.