Warning FailedScheduling: 0/N nodes are available: N node(s) had untolerated taint {key: value}
ID: kubernetes/taint-toleration-not-matched
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 8 | active | — | — | — |
Root Cause
Pod cannot be scheduled because all nodes have taints that the pod doesn't tolerate. Common with dedicated node pools (GPU, spot instances), master/control-plane taints, or after cluster upgrades that add taints.
genericWorkarounds
-
95% success Add the matching toleration to the pod spec
spec: tolerations: - key: "dedicated" operator: "Equal" value: "gpu" effect: "NoSchedule"Sources: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
-
92% success Check which taints exist on nodes and match tolerations accordingly
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints # Or for a specific node: kubectl describe node <node-name> | grep -A5 Taints
Sources: https://kubernetes.io/docs/reference/kubectl/cheatsheet/
Dead Ends
Common approaches that don't work:
-
Removing taints from all nodes to get the pod scheduled
70% fail
Taints exist for a reason (e.g., control-plane isolation, GPU reservation). Removing them allows any pod to schedule on specialized nodes, causing resource contention and security issues.
-
Setting nodeSelector without tolerations
90% fail
nodeSelector selects nodes by label but doesn't bypass taints. The pod will target the right nodes but still be rejected by their taints.