1) Inspect pod status and locationbash
kubectl get pod my-pod -n svc-namespace -o wide
Reveals pod phase, IP, node. If STATUS!=Running or RestartCount>0, suspect crashes or OOMs; node shows where to continue.2) Detailed pod info + eventsbash
kubectl describe pod my-pod -n svc-namespace
kubectl get events -n svc-namespace --sort-by='.lastTimestamp' | tail -n 20
Describe shows conditions, container state, restart reasons, resource requests/limits, mounting issues. Events show recent scheduling/eviction/throttle messages.3) Pod logs (container and previous)bash
kubectl logs my-pod -n svc-namespace -c app
kubectl logs my-pod -n svc-namespace -c app --previous
Shows application errors, GC pauses, long requests. Previous helps if container restarted.4) Live check of pod CPU/memorybash
kubectl top pod my-pod -n svc-namespace
If CPU equals or is near limit -> CPU throttling likely; if low but service slow, check latency inside app.5) Check controller & HPAbash
kubectl get deployment,statefulset -l app=svc -n svc-namespace -o yaml
kubectl get hpa -n svc-namespace
Ensures replicas and autoscaling config; missing HPA or insufficient replicas explains saturation.6) Exec into container for process-level viewbash
kubectl exec -it my-pod -n svc-namespace -c app -- /bin/bash
top -b -n1
ps aux --sort=-%cpu | head
Shows which process threads consume CPU, spin loops, or blocked syscalls.7) Inspect node health (from control plane)bash
kubectl describe node node-1
kubectl top node node-1
Shows node capacity, allocatable, kubelet conditions, and if other pods are contending for CPU.8) SSH to node for system-level diagnostics (if allowed)bash
ssh core@node-1
sudo journalctl -u kubelet -n 200
sudo dmesg | tail -n 50
sudo top -H -p $(pgrep -d, -f kubelet|true) # threads if investigating kubelet
sudo sar -u 1 5 # or vmstat 1 5
Reveals host CPU saturation, kernel issues, throttling, OOM killer, or disk/IO waits causing apparent CPU issues.9) Container runtime / cgroup metricsbash
sudo crictl stats $(kubectl get pod my-pod -n svc-namespace -o jsonpath='{.status.containerStatuses[0].containerID}' | cut -d'/' -f3)
Confirms container-level CPU/cgroup usage and throttling stats.Interpretation guidance:- Pod CPU ~= limit and throttling: raise limit/requests or scale horizontally; check HPA.- High node CPU with multiple pods high: node capacity issue — drain or scale nodes.- Single process hot loop: fix app code or add concurrency controls.- Low CPU but high latency: investigate blocking IO, GC, thread pool starvation, or networking.- Frequent restarts/OOM: increase memory or fix leak.Prioritize: pod describe/logs/top -> exec/ps -> node-level top/journalctl -> container runtime stats; take snapshot (metrics/logs) for postmortem.