Scenario
A node goes down due to hardware failure or kernel panic, causing pods on that node to become unreachable and affecting service availability.
Symptoms
kubectl get nodesshows a NotReady status for the node.- Affected pods are in Pending or Unknown state.
- Alerts fire (e.g., NodeDown, PodCrashLoopBackOff).
- Users report service degradation or outages.
Diagnosis
- Identify the unhealthy node:
kubectl get nodes. - Inspect node conditions:
kubectl describe node <node-name>— look forReady: Falseand the underlying reason (e.g.,KubeletNotReadyorNodeStatusUnknown). - Check recent cluster events:
kubectl get events --sort-by='.lastTimestamp'. - If possible, access the node (via SSH or out-of-band) and examine kubelet logs:
journalctl -u kubelet -n 100. - Verify control plane health (etcd, scheduler, etc.).
Commands
Cordon the node (prevent new pods)
kubectl cordon <node-name>
Drain the node (evict pods)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
Risk Notes:
- Drain will not recreate bare pods (those without a controller).
- Draining a StatefulSet with replicas=1 may cause data loss.
- Using --delete-emptydir-data deletes temporary data; ensure it is safe.
Uncordon after recovery
kubectl uncordon <node-name>
Risk Controls
- Configure PodDisruptionBudgets (PDBs) for critical workloads to limit disruptions during drainage.
- Use multiple replicas and anti-affinity for stateful applications.
- Regularly test drain procedures and backup etcd.
- Before draining, verify that any attached PVCs (especially RWO) can be reattached elsewhere.
Rollback
- If draining causes service issues, immediately run
kubectl uncordon <node-name>and interrupt the drain (Ctrl+C). - If the node is permanently dead, delete the node object:
kubectl delete node <node-name>— pod rescheduling will happen automatically.
Verification
- After node recovery, confirm node is Ready:
kubectl get nodes. - Ensure all pods are running on healthy nodes:
kubectl get pods -o wide. - Verify service endpoints and latency return to normal.
When to Submit an OpsGlobal Ticket
- Multiple nodes are failing or nodes keep flipping states.
- Control plane components are impacted (e.g., etcd unavailable).
- Risk of persistent data loss exists.
- Pods cannot be rescheduled after drain due to resource constraints or configuration issues.
- A root cause analysis is needed for recurring incidents.
Use cases
Useful for teams handling Kubernetes issues and needing a clear troubleshooting and delivery workflow.
Problem background
A practical guide to handling node failures in Kubernetes, covering scenarios, symptoms, diagnostic commands, risk controls, rollback, verification, and when to submit an OpsGlobal ticket.
Troubleshooting steps
Confirm impact and recent changes, collect logs, configuration and metrics, then apply fixes from low to high risk.
Command examples
Replace sample resource names with real values and store passwords, tokens and keys in environment variables.
Risks
Before production changes, confirm backups, access boundaries, change windows and rollback paths.
Rollback plan
Keep original configuration and release versions; roll back config, images or database changes if metrics degrade.
Deliverables
Root-cause notes, key commands, remediation steps, verification results and follow-up recommendations.
Need help with a similar technical issue?
If your servers, Kubernetes, Docker, CI/CD, databases or monitoring systems have similar issues, submit logs and config files for remote diagnosis.