It’s the most famous (and frustrating) status in the Kubernetes world. You run kubectl get pods, and there it is: 0/1 CrashLoopBackOff.
Despite the scary name, CrashLoopBackOff isn’t actually the error—it’s Kubernetes telling you: "I tried to start your app, it died, I waited, and I’m about to try again."
Here is the "Triple Post" finale to get your cluster healthy before the weekend.
1. The "First 3" Commands
Before you start guessing, run these three commands in order. They tell you 90% of what you need to know.
| Command | Why run it? |
kubectl describe pod <name> | Look at the Events section at the bottom. It often says why it failed (e.g., OOMKilled). |
kubectl logs <name> --previous | Crucial. This shows the logs from the failed instance before it restarted. |
kubectl get events --sort-by=.metadata.creationTimestamp | Shows a timeline of cluster-wide issues (like Node pressure). |
2. The Usual Suspects
If the logs are empty (a common headache!), the issue is likely happening before the app even starts.
OOMKilled: Your container exceeded its memory limit.
Fix: Increase
resources.limits.memory.
Config Errors: You referenced a Secret or ConfigMap that doesn't exist, or has a typo.
Fix: Check the
describe podoutput for "MountVolume.SetUp failed".
Permissions: Your app is trying to write to a directory it doesn't own (standard in hardened images).
Fix: Check your
securityContextor DockerfileUSERpermissions.
Liveness Probe Failure: Your app is actually running fine, but the probe is checking the wrong port.
Fix: Double-check
livenessProbe.httpGet.port.
3. The Pro-Tip: The "Sleeper" Debug
If you still can't find the bug because the container crashes too fast to inspect, override the entrypoint.
Update your deployment YAML to just run a sleep loop:
Now the pod will stay "Running," and you can kubectl exec -it <pod> -- /bin/sh to poke around the environment manually!


