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.