Diagnose Why a DaemonSet Skips the Control Plane Node
Scenario
A DaemonSet named fluentd-elasticsearch has been deployed in the kube-system namespace. Currently, its Pods are running only on the worker nodes, and no Pod is scheduled on the cplane-01 control plane node. Configure the DaemonSet so that a Pod is also scheduled and running on cplane-01.
The DaemonSet manifest is located at /home/laborant/daemonset.yaml on dev-machine.
Task
- Identify why the DaemonSet Pods are not running on the control plane node
- Update the DaemonSet manifest at
/home/laborant/daemonset.yamlondev-machineso that Pods are scheduled on all nodes, includingcplane-01 - Apply the updated manifest and verify all Pods are running
Hint 1 — Identify Why Pods Are Not on the Control Plane
Check the taint on the control plane node — this is what prevents DaemonSet Pods from being scheduled there:
kubectl describe node cplane-01 | grep -i taint
Then check whether the DaemonSet has any tolerations configured:
kubectl get daemonset fluentd-elasticsearch -n kube-system \
-o jsonpath='{.spec.template.spec.tolerations}'
If the output is empty, the DaemonSet has no toleration for the control-plane
taint — which is why no Pod is scheduled on cplane-01.
Documentation
Hint 2 — Add the Toleration to the DaemonSet Manifest
Edit the manifest at /home/laborant/daemonset.yaml and add a toleration
for the control-plane taint under spec.template.spec:
vi /home/laborant/daemonset.yaml
Add the following toleration:
spec:
template:
spec:
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
Then apply the updated manifest:
kubectl apply -f /home/laborant/daemonset.yaml
Documentation
Hint 3 — Verify All Pods Are Running
After applying the manifest, check that a Pod is now running on every node:
kubectl get pods -n kube-system -l name=fluentd-elasticsearch -owide
You should see one Pod per node — including cplane-01. All Pods should be
in Running state.
Documentation