Sachin Chaurasiya

Toolbox · Kubernetes

Kubernetes Troubleshooting

Symptom-driven diagnosis for pods that will not start, services that will not route and nodes that misbehave.

Last reviewed
2026-09-18
On this page

Pod will not start

Symptom (kubectl get pods)First commandUsual cause
Pendingkubectl describe pod <p> | tail -20No node with enough resources; unschedulable taints; PVC not bound
ImagePullBackOffkubectl describe pod <p> | grep -A3 FailedWrong tag/digest, missing imagePullSecrets, registry auth
CrashLoopBackOffkubectl logs <p> --previousApp exits on startup: config, secrets, permissions
CreateContainerConfigErrorkubectl describe pod <p>Referenced ConfigMap/Secret key missing
OOMKilled (in describe)kubectl top pod <p>Memory limit too low or a leak
Init:Errorkubectl logs <p> -c <init-container>Init container failing (migrations, waits)
Rejected at admissionkubectl apply … 2>&1 messagePod Security or Kyverno policy violation

Service not reachable

kubectl get endpoints <svc>                    # empty? selector does not match pod labels
kubectl get svc <svc> -o yaml | grep -A3 selector
kubectl run -it --rm net --image=nicolaka/netshoot -- bash    # then: curl -v http://<svc>.<ns>.svc:80
kubectl get networkpolicy -n <ns>              # default-deny without allow rules?
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50      # DNS issues

Node problems

CommandPurpose
kubectl get nodes -o wideReady state, versions, IPs
kubectl describe node <n> | grep -A10 ConditionsMemoryPressure, DiskPressure, PIDPressure
kubectl describe node <n> | grep -A20 "Allocated resources"Requests vs capacity
kubectl cordon <n> / kubectl drain <n> --ignore-daemonsets --delete-emptydir-dataCaution cordon the node and evict eligible workloads; emptyDir data is deleted
kubectl get pods -A --field-selector spec.nodeName=<n>Pods on a node

Control plane and API

kubectl get --raw='/readyz?verbose'            # component health
kubectl get componentstatuses 2>/dev/null       # deprecated but still informative on some clusters
kubectl get apiservices | grep -v True          # broken aggregated APIs (metrics-server)
kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations   # webhooks that can block everything

Storage

CommandPurpose
kubectl get pvc -ABound / Pending claims
kubectl describe pvc <c>Provisioning errors
kubectl get storageclassDefault class present?

See also