Kubernetes Pod Status Reference
In Kubernetes, pod health is tracked through a high-level Phase and more specific Container States. When you run kubectl get pods, the STATUS column provides a summary of these combined values.
1. The 5 Pod Phases
The phase is a high-level summary of where the Pod is in its lifecycle.
| Phase | Description |
| Pending | The Pod is accepted by the cluster, but one or more containers are not yet running. This includes time spent waiting to be scheduled and downloading images. |
| Running | The Pod has been bound to a node, all containers have been created, and at least one is still running (or is in the process of starting/restarting). |
| Succeeded | All containers in the Pod have terminated successfully (exit code 0). They will not restart. (Typical for CronJobs/Tasks). |
| Failed | All containers have terminated, but at least one container exited with a failure (non-zero exit code). |
| Unknown | The state of the Pod cannot be obtained, typically due to a communication error between the API server and the Node. |
2. Common Operational Statuses
These are the detailed strings you frequently see in the kubectl get pods output. They usually indicate specific errors.
Image & Configuration Issues
- ErrImagePull: The image name is wrong or the registry is unreachable.
- ImagePullBackOff: Kubernetes is waiting to retry pulling the image after a failure.
- CreateContainerConfigError: A referenced Secret or ConfigMap is missing.
Runtime Failures
- CrashLoopBackOff: The application started but crashed. Kubernetes is now in a cooling-off period before trying to start it again.
- OOMKilled: The container was terminated because it exceeded its defined memory limit.
- Error: The container crashed once with a non-zero exit code.
Node & Lifecycle Issues
- Terminating: The Pod is being deleted or moved; it is waiting for its grace period to end.
- Evicted: The Node ran out of resources (Disk/RAM), and the Pod was forced off to save the Node.
- NodeLost: The Node the Pod was running on is no longer reachable.
3. Pod Conditions
Conditions are “True/False” flags that explain the transition between phases. You can see these by running kubectl describe pod <name>.
- PodScheduled: Successfully assigned to a Node.
- Initialized: All
initContainershave completed successfully. - ContainersReady: All containers in the Pod are ready.
- Ready: The Pod is able to serve requests and should be added to the load balancing pools of matching Services.
Troubleshooting Commands
If a Pod is not in the Running state, use these commands to find out why:
Bash
# Get the high-level status kubectl get pods # Get detailed logs of events (Check the 'Events' section at the bottom) kubectl describe pod <pod-name> # Check the application logs for crashes kubectl logs <pod-name>


