🎯 Put Pods Where They Belong
Some nodes have GPUs. Some are in different zones. Node affinity schedules pods on specific nodes. Control placement precisely.
📝 Node Affinity
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: gpu
operator: In
values:
- "nvidia"
- "amd"
containers:
- name: app
image: myapp:latest
# Also supports:
# - requiredDuringScheduling: Hard requirement
# - preferredDuringScheduling: Soft preference
# - NotIn, Exists, DoesNotExist operators
🎯 Use Cases
# GPU workloads
affinity:
nodeAffinity:
requiredDuringScheduling:
nodeSelectorTerms:
- matchExpressions:
- key: gpu
operator: In
values: ["nvidia"]
# Zone affinity (high availability)
affinity:
nodeAffinity:
preferredDuringScheduling:
- preference:
matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values: ["us-east-1a"]
weight: 100
# Node with SSD
affinity:
nodeAffinity:
requiredDuringScheduling:
nodeSelectorTerms:
- matchExpressions:
- key: storage
operator: In
values: ["ssd"]
💡 Node Selector vs Node Affinity
- Node Selector: Simple (key: value)
- Node Affinity: Complex (operators, multiple terms)
- Both support required and preferred
- Use node selector for simple cases
- Use node affinity for complex conditions
“ML pods needed GPUs. Node affinity scheduled them on GPU nodes. No more wasted GPU resources. Essential for specialized workloads.”
