The CKA is the one major cloud certification with no multiple choice at all — you get a broken or incomplete cluster and a terminal, and you fix it, live, against the clock. Troubleshooting is also the single largest domain on the exam at 30% weight, ahead of Cluster Architecture (25%), Services & Networking (20%), Workloads & Scheduling (15%), and Storage (10%). Most candidates who run out of time do not fail because they lack Kubernetes knowledge — they fail because they are slow to go from "something is wrong" to "here is the exact command that fixes it." This page is six labs built to close that gap: real symptoms, the diagnosis commands in the order you would actually run them, the root cause, and the fix.
Info: Exam Reality
The real CKA gives you 15–20 performance-based tasks over 2 hours in a live cluster, open-book (docs.kubernetes.io and kubectl are both allowed), with a 66% pass mark. Every lab below mirrors that format: a broken cluster state, not a concept quiz.
The Diagnosis Order That Saves You Time
Before the labs, one habit matters more than any single command: always read Events last in kubectl describe output before anything else — it is usually the fastest path to the real cause. Work top to bottom:
- 1kubectl get pods -A -o wide — scan for anything not Running/Ready, and note which node it landed on
- 2kubectl describe pod <name> -n <ns> — scroll straight to Events at the bottom
- 3kubectl logs <name> -n <ns> [--previous] [-c <container>] — --previous is essential for a pod that already restarted
- 4kubectl get events -n <ns> --sort-by=.lastTimestamp — cluster-level events the pod description will not show
- 5For node-level failures: kubectl describe node <name>, then ssh in and check systemctl status kubelet + journalctl -u kubelet
Quick Reference — 6 Failures at a Glance
1. CrashLoopBackOff — payment-api Won’t Stay Up
payment-api restarts every 30–40 seconds in prod. The container isn’t erroring out — it’s being killed.
The app is healthy — it just takes ~19 seconds to bind its port while the DB pool warms up. But initialDelaySeconds is 2, so kubelet probes at second 2, gets connection refused, and kills the container before it ever gets a chance. Restart, repeat, forever. This is a race condition, not a crash.
2. Pod Stuck Pending — batch-worker Never Schedules
batch-worker has sat at 0/1 Pending for six minutes. No CrashLoopBackOff, no ImagePullBackOff — it never even got a node.
batch-worker requests 4Gi memory per replica; every node in the cluster only has ~3.5Gi allocatable left. The scheduler is doing exactly its job — it will never place a pod on a node that cannot honor the request, no matter how long you wait.
Tip: Second Common Cause of Pending
If node resources look fine, check kubectl describe node | grep Taints next — a node tainted NoSchedule with no matching toleration on the pod produces the identical symptom (0/N nodes available), but for a completely different reason.
3. Node NotReady — worker-2 Drops Out of the Cluster
A cluster-architecture-flavored troubleshooting task: one node has gone NotReady and every pod scheduled on it is now unreachable.
The control plane has lost contact with kubelet on worker-2. That means SSH to the node itself — kubectl alone cannot fix a dead kubelet.
Classic CKA gotcha: the kubelet config and the container runtime disagree on which cgroup driver to use. It has to match on both sides.
4. Service Unreachable — Pods Are Healthy, Traffic Isn’t Arriving
Every frontend pod shows 1/1 Running. The Service in front of them still times out on every request. This is the pattern that sends people straight to network policies — check endpoints first instead.
A Service with healthy backing pods but empty Endpoints means exactly one thing: the selector doesn’t match the pod labels. The Service and its pods are living in two different worlds.
app: front-end on the Service, app: frontend on the pods — one hyphen, total outage.
5. DNS Resolution Fails Inside Pods
Pods can reach other pods by IP but not by service name — every internal call using a DNS name is timing out.
CoreDNS itself is crashing, and the reason is a forwarding loop: the node’s /etc/resolv.conf points at a local stub resolver that forwards straight back to CoreDNS, which forwards to the stub, forever. CoreDNS’s loop plugin detects this and deliberately crashes rather than spin the cluster network in circles.
6. ImagePullBackOff — A New Deploy Never Starts
inventory-svc was just deployed to staging. It has never run once — straight to ImagePullBackOff.
401 Unauthorized, not "not found" — the image exists, but the node has no credentials for this private registry. Secrets (including registry credentials) are namespace-scoped, so a regcred secret that exists in default does nothing for a pod in staging.
Tip: Practice Until It’s Muscle Memory
The real exam rewards speed, not just correctness. Rebuild each of these six failures yourself in a local cluster (kind or minikube both work) and re-run the diagnosis commands from memory before you book the exam.
These six patterns cover most of what shows up under the Troubleshooting domain, but they’re drills, not a substitute for cluster-architecture and networking fundamentals.
If you want the full comparison of what Kubernetes gets you over simpler orchestrators first, see Kubernetes vs Docker Swarm. Our 45-day live Kubernetes batch builds these exact debugging instincts through hands-on labs, from Docker fundamentals through production-grade multi-cluster setups.
Put These Labs to the Test
- CKA Free Mock Exam — 2 × 30 scenario questions
Instant results, per-question explanations, no account needed
- CKAD Free Mock Exam — application developer track
The developer-focused counterpart to CKA
- Live Kubernetes Training — CKA & CKAD in 45 days
Hands-on labs on real clusters, not slide decks
Ready to Start Your Cloud Journey?
Live batches Mon–Sat — Azure 9–10 AM IST (started 3 august 2026 — join in progress) · AWS 10:30–11:45 AM IST (starts 31 august 2026). Hands-on labs, exam prep, and community support.