Kubernetes "node(s) had untolerated taint" - Fix Scheduling in CI
Nodes carry taints to repel pods that do not explicitly tolerate them. Your pod has no matching toleration, so the scheduler skips every tainted node and the pod stays Pending.
What this error means
A pod is Pending with a FailedScheduling event: node(s) had untolerated taint {key: value}. Common taints include control-plane, node.kubernetes.io/not-ready, or custom pool taints like dedicated=gpu:NoSchedule.
Warning FailedScheduling default-scheduler 0/3 nodes are available:
1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: },
2 node(s) had untolerated taint {dedicated: gpu}.Common causes
Dedicated node pool taint
A taint like dedicated=gpu:NoSchedule reserves nodes for specific workloads. A pod without the matching toleration cannot land there.
Control-plane or condition taints
Control-plane nodes are tainted to keep workloads off, and condition taints (not-ready, disk-pressure) repel pods until the node recovers.
How to fix it
See the node taints
kubectl get nodes -o json | jq '.items[] | {name:.metadata.name, taints:.spec.taints}'Add a matching toleration (only if the pod belongs there)
Tolerate the specific taint so the pod can schedule onto the reserved nodes.
spec:
tolerations:
- key: "dedicated"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"How to prevent it
- Reserve special nodes with taints and give only the intended workloads matching tolerations.
- Pair tolerations with nodeSelector/affinity so pods land where you intend.
- Let condition taints (not-ready, disk-pressure) repel pods - fix the node, do not tolerate them blindly.