KubernetesCXVIII · Kubernetes Troubleshooting MethodologyTroubleshooting methodology
The 11-step methodology — the canonical troubleshooting workflow
What you'll learn
- Apply the canonical 11-step Kubernetes troubleshooting methodology
- Distinguish the steps that gather evidence from the steps that act on it
- Identify the failure modes of skipping a step
- Build a personal troubleshooting playbook from the methodology
Prerequisites
Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16
The canonical 11-step Kubernetes troubleshooting methodology converts a panic into a procedure. The steps are: define symptom → determine impact → inspect object → events → logs → dependencies → identify component → hypothesis → test → restore → validate. The discipline is the same scale-free: every incident runs the same workflow; the depth scales with the complexity.
The 11 steps in order
The methodology is a sequence. Each step has a single output that feeds the next step. Skipping a step is what turns a recoverable incident into a multi-hour outage.
flowchart TD
A[1. Define symptom] --> B[2. Determine impact]
B --> C[3. Inspect object]
C --> D[4. Events]
D --> E[5. Logs]
E --> F[6. Dependencies]
F --> G[7. Identify component]
G --> H[8. Hypothesis]
H --> I[9. Test]
I --> J[10. Restore]
J --> K[11. Validate]
K --> L[Post-incident review]
The output of each step is the input to the next. The discipline is to never skip a step.
Step 1: Define the symptom
The symptom is the observable fact. The symptom is not the cause; the symptom is the thing the user sees. A CrashLoopBackOff is a symptom; “the new image is broken” is a hypothesis. The discipline is to write the symptom down in one sentence:
- “The pod
billing-7d8fhas restarted 12 times in the last 5 minutes.” - “The Service
billing-apireturns 503 from synthetic traffic.” - “The node
node-03reportsDiskPressure.”
The symptom is the input to step 2.
Step 2: Determine the impact
The impact is the business consequence. The impact is not the technical detail; the impact is the customer-visible consequence. The impact is what drives the urgency:
- “5% of
billingrequests are failing; the customer-facing status is degraded.” - “The
billing-apiService is unreachable from thecheckoutworkload; checkout is failing.” - “The cluster has 12 nodes; one is in
DiskPressureand is rejecting new Pods.”
The impact is the input to step 3. The impact also decides whether the operator should stop and ship a mitigation, or continue investigating.
Step 3: Inspect the object
The object is the Kubernetes resource that is misbehaving. The
inspection is kubectl get and kubectl describe:
kubectl get pod billing-7d8f -n prod -o yaml
kubectl describe pod billing-7d8f -n prod
The output is the object’s spec, status, conditions, and events. The output is the input to step 4.
Step 4: Events
The events are the cluster’s history of the object. Events
are time-ordered, scoped to the namespace, and have a
type (Normal, Warning) and a reason. The events are the
narrative of how the object got to its current state.
kubectl get events -n prod --sort-by=.lastTimestamp \
--field-selector involvedObject.name=billing-7d8f
The events are the input to step 5.
Step 5: Logs
The logs are the container’s history. The logs are ordered by line, scoped to the container, and contain the application’s output. The logs are the narrative of how the container got to its current state.
kubectl logs -n prod billing-7d8f -c billing --previous
kubectl logs -n prod billing-7d8f -c billing --tail=200
The --previous flag is the key: it shows the logs of the
previous container instance, which is the one that crashed
before the current restart. The logs are the input to step 6.
Step 6: Dependencies
The dependencies are the other objects the misbehaving object relies on. The dependencies are the cluster’s relationships: the Service that routes to the Pod, the EndpointSlice that lists the Pods, the ConfigMap that the Pod mounts, the Secret that the Pod reads, the PersistentVolume that the Pod claims.
kubectl get pod billing-7d8f -n prod -o json | \
jq '.spec.volumes[]?, .spec.containers[].env[]?, .spec.containers[].envFrom[]?'
The dependencies are the input to step 7.
Step 7: Identify the component
The component is the piece of software that is failing. The component is not the cluster; the component is the Kubernetes control plane, the kubelet, the CNI, the CSI, the workload, or the user’s application. The identification is the moment when the operator decides which component is the source of the symptom.
flowchart TD
A[Symptom] --> B{Where?}
B -->|Pod| C[Workload, container]
B -->|Node| D[Kubelet, runtime, kernel]
B -->|Service| E[Service, EndpointSlice, kube-proxy]
B -->|Control plane| F[API server, scheduler, controller]
B -->|Storage| G[CSI, PV, PVC]
B -->|Network| H[CNI, DNS, NetworkPolicy]
The identification is the input to step 8.
Step 8: Hypothesis
The hypothesis is the proposed cause. The hypothesis is a single sentence that explains the symptom and predicts the outcome of the next test. The hypothesis is the moment when the operator stops gathering evidence and proposes a candidate.
The hypothesis is testable. A hypothesis that is not testable is a guess. The discipline is to write the hypothesis down in the form “If X, then Y.”
- “If the container is crashing because the new image is
missing a library, then
kubectl logs --previouswill showImportError: No module named 'requests'.” - “If the Service is returning 503 because the EndpointSlice
is empty, then
kubectl get endpointsliceswill show no addresses.”
Step 9: Test
The test is the experiment that confirms or refutes the hypothesis. The test is the only step that changes the cluster’s state. The test is the moment when the methodology produces evidence.
kubectl describe pod billing-7d8f -n prod
kubectl logs -n prod billing-7d8f -c billing --previous
kubectl get endpointslices -n prod -l kubernetes.io/service-name=billing-api
The test is the input to step 10.
Step 10: Restore
The restore is the mitigation that brings the cluster back to a working state. The restore is not the fix; the restore is the rollback or the workaround. The fix is the follow-up that the post-incident review schedules.
The restore is mechanical. The restore is the documented procedure that the operator runs. The restore is the moment when the cluster’s state is restored.
Step 11: Validate
The validate is the evidence that the restore worked. The validate is the same mechanical checks that the post-change validation runs: KPIs, PDBs, synthetic traffic, workload Ready. The validate is the moment when the operator knows the incident is over.
Production discipline
The 11-step methodology is the cluster’s troubleshooting playbook. The discipline is to run the steps in order, never skip a step, and use the same template for every incident. The post-incident review is the artefact that pays down the lesson.
- Write the symptom down. A panic without a symptom is a panic without a playbook.
- Hypothesise before testing. A test without a hypothesis is a guess.
- Restore, then fix. The restore is the rollback; the fix is the follow-up.
- Validate, then close. The validation is the evidence that the incident is over.
Quiz
Knowledge check · 4 questions
Q1. Which of the following is the correct order of the 11-step methodology?
Q2. Skipping the 'define symptom' step is acceptable when the operator is familiar with the cluster.
Q3. An operator is paged for a Pod in CrashLoopBackOff. Apply the 11-step methodology.
The Pod is `billing-7d8f-abcde` in namespace `prod`. The workload is a 6-replica Deployment. The PDB is `minAvailable=4`. The operator's pager is the only context they have.
Q4. Name three steps of the methodology that gather evidence and three that act on it.
Passing score: 75%. Answers are checked in this browser.