Topology Spread — evenly distribute Pods across topology domains.
1apiVersion: apps/v12kind: Deployment3metadata:4 name: myapp5spec:6 replicas: 67 template:8 spec:9 topologySpreadConstraints:10 - maxSkew: 111 topologyKey: topology.kubernetes.io/zone12 whenUnsatisfiable: DoNotSchedule13 labelSelector:14 matchLabels:15 app: myapp16 - maxSkew: 217 topologyKey: kubernetes.io/hostname18 whenUnsatisfiable: ScheduleAnyway19 labelSelector:20 matchLabels:21 app: myapp22 matchLabelKeys:23 - pod-template-hash24 nodeAffinityPolicy: Honor25 nodeTaintsPolicy: Honor26 containers:27 - name: app28 image: myapp:latest
1# Commands2kubectl get pods -o wide # Check Pod distribution34# Check zone distribution5kubectl get pods -o json | jq '.items[] | {name: .metadata.name, node: .spec.nodeName}'67# Verify node zones8kubectl get nodes -o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone910# Check constraint status11kubectl get deployment myapp -o jsonpath='{.spec.template.spec.topologySpreadConstraints}' | jq1213# View unschedulable Pods14kubectl get events --field-selector reason=FailedScheduling
Parameters:
Use cases: