Kubernetes "FailedScheduling: 0/N nodes available (taints)" in CI
Node taints repel pods that do not tolerate them. When every candidate node is tainted (dedicated pools, control-plane, GPU nodes) and the pod has no matching toleration, scheduling fails with an untolerated-taint message.
What this error means
kubectl describe pod Events show 0/N nodes are available: N node(s) had untolerated taint {key: value}. The pod stays Pending.
Warning FailedScheduling default-scheduler 0/3 nodes are available:
3 node(s) had untolerated taint {dedicated: gpu}.Common causes
Pod lacks the required toleration
The target nodes are tainted (e.g. dedicated=gpu:NoSchedule) and the pod spec has no matching toleration.
Wrong node pool targeting
A nodeSelector/affinity points the pod at a tainted pool it is not meant for, or general nodes were all tainted.
How to fix it
Read the taints and add a toleration
Match the taint key/value/effect exactly.
kubectl describe nodes | grep -i taint
# add to pod spec:
# tolerations:
# - key: "dedicated"
# operator: "Equal"
# value: "gpu"
# effect: "NoSchedule"Or target untainted nodes
- If the pod should not run on the tainted pool, fix its nodeSelector/affinity to land on general nodes.
- If the taint is unintended, remove it with
kubectl taint nodes <node> key-. - Re-apply and confirm scheduling.
How to prevent it
- Keep tolerations in sync with the node-pool taint scheme.
- Document which workloads belong on which tainted pools.
- Avoid blanket-tainting nodes general workloads need.