Sobes.tech
Middle

Wie verteilt man die Pods gleichmäßig in den Verfügbarkeitszonen?

sobes.tech KI

Antwort von AI

Verwenden Sie topologySpreadConstraints im Manifest der Pod- oder Deployment-Konfiguration.

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 # Schlüssel, der die Verteilung in Zonen definiert
        whenUnsatisfiable: DoNotSchedule # Wenn die Verteilung nicht möglich ist, wird der Pod nicht geplant
        labelSelector:
          matchLabels:
            app: my-app # Die Einschränkung gilt für Pods mit diesem Label

maxSkew legt die maximale Anzahl an Pods fest, die in einer Topologie-Domäne (Zone) die durchschnittliche Anzahl überschreiten dürfen. In diesem Fall bedeutet maxSkew: 1, dass die Differenz in der Anzahl der Pods zwischen beliebigen Zonen 1 nicht übersteigen darf.

topologyKey: topology.kubernetes.io/zone gibt an, dass die Verteilung anhand der Labels der Zonen auf den Knoten erfolgen soll.

whenUnsatisfiable: DoNotSchedule bedeutet, dass der Scheduler den Pod nicht plant, wenn die Einschränkung nicht erfüllt werden kann. Alternativ kann ScheduleAnyway verwendet werden, um den Pod trotzdem zu planen, auch wenn die Einschränkung verletzt wird.

labelSelector definiert die Pods, auf die diese Einschränkung angewendet wird.

Für eine gleichmäßige Verteilung der Pods auf drei Zonen (z.B. us-east-1a, us-east-1b, us-east-1c) mit 9 Replikaten erhält jede Zone 3 Pods.

Diese Verteilung erhöht die Fehlertoleranz der Anwendung, da der Ausfall einer Zone nicht zum vollständigen Ausfall des Dienstes führt.