Skip to main content
In this lesson you’ll practice diagnosing and repairing worker node failures by inspecting the cluster from the control plane, SSHing into the worker, and resolving kubelet-related issues until the node returns to Ready. Prerequisites:
  • Access to the control plane and worker node via SSH.
  • Root or sudo on the nodes.
  • Basic familiarity with systemd, journalctl, and kubelet configuration files.
Quick alias for convenience:

1) First symptom: node01 is NotReady

From the control plane, check node status:
node01 is NotReady. The kubelet is the primary node agent to investigate. SSH to the worker and inspect the kubelet service:
Here the kubelet is inactive. Start it and verify the service becomes active:
Back on the control plane, confirm the node is now Ready:
This resolved the first occurrence. The lab will now present new failure scenarios for further troubleshooting.

2) Second symptom: kubelet repeatedly fails (exit code 255)

Later, node01 becomes NotReady again:
SSH to node01 and inspect kubelet status — it is auto-restarting with an exit code:
Gather kubelet logs to see why it’s failing:
The log shows the kubelet configuration points to a non-existent client CA file. Inspect the kubelet config file where additional options are read:
The clientCAFile points to /etc/kubernetes/pki/WRONG-CA-FILE.crt. The correct CA on kubeadm clusters is typically /etc/kubernetes/pki/ca.crt. Update the config and restart kubelet:
Verify the control plane — the node may become Ready again until the next failure.

3) Third symptom: kubelet cannot register with API server (connection refused)

When the node becomes NotReady again, check the kubelet logs:
On node01, view recent kubelet logs:
The kubelet is failing to connect to the API server at port 6553. The kubelet’s kubeconfig (/etc/kubernetes/kubelet.conf) defines the API server server URL. Inspect the kubeconfig:
The server is set to https://controlplane:6553 which is incorrect — the kube-apiserver listens on port 6443 by default. Update the kubeconfig to the correct port and restart kubelet:
Confirm the node re-registers on the control plane:

Common causes and quick fixes

Useful references:
When a worker node shows NotReady, follow this prioritized checklist:
  1. From the control plane, identify the affected node: kubectl get nodes.
  2. SSH into the worker and check the kubelet service: systemctl status kubelet or service kubelet status.
  3. Inspect logs for immediate clues: journalctl -u kubelet -xe or journalctl -u kubelet -n 200.
  4. Verify kubelet configuration files:
    • /var/lib/kubelet/config.yaml (e.g. x509.clientCAFile)
    • /etc/kubernetes/kubelet.conf (API server server URL)
  5. Fix obvious misconfigurations (correct file paths, ports, or certificates), restart kubelet, and re-check node status: kubectl get nodes.
  6. If the issue persists, confirm network connectivity to the API server and validate certificate validity.
That’s the end of this lesson.

Watch Video