Kubernetes Status Conditions

Pod, Node, Deployment and PVC condition types with meaning and fix hints.

Reference for common Kubernetes resource status conditions — PodScheduled, Ready, Available, Progressing, MemoryPressure, Bound and more — explaining the True/False/Unknown semantics and how to fix each. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What does a False Ready condition on a pod mean?

Ready=False means the pod is not serving traffic and is excluded from its Service endpoints. It usually follows ContainersReady=False, so check the container's readiness probe and logs. The pod may still be starting or crash-looping.

Read Kubernetes conditions like a pro

Kubernetes objects report their health through an array of status.conditions. Each condition has a type, a status of True, False or Unknown, plus a reason and message. This reference explains the everyday conditions across Pods, Nodes, Deployments, PVCs and Jobs, what each status means, and how to remediate it.

How it works

A condition is a standardised latch describing one aspect of an object’s state. The triad of values matters: True and False are deliberate assertions (for example PodScheduled=True means a node was assigned), while Unknown means the controller could not determine the answer — frequently because the component that reports it went silent.

Conditions also chain. A pod progresses through PodScheduled, then Initialized (init containers done), then ContainersReady, and finally Ready. A failure earlier in that chain blocks the later ones, so always read the first False condition rather than the last. View them with:

kubectl get pod my-pod -o jsonpath='{.status.conditions}'
kubectl describe pod my-pod

The reason and message fields shown by describe are where the actionable detail lives — Unschedulable, ProgressDeadlineExceeded, CrashLoopBackOff and so on.

Common condition reference

Pod conditions

ConditionTrue meansFalse/Unknown means
PodScheduledA node was selectedNo schedulable node found (resource pressure, taints)
InitializedAll init containers completedAn init container failed or is still running
ContainersReadyEvery container passed its readiness probeAt least one container is not ready
ReadyPod can serve trafficFollows from ContainersReady; excluded from Service endpoints

Deployment conditions

ConditionTrue meansFalse means
AvailableEnough ready replicas to satisfy minReadySecondsToo few replicas are running
ProgressingRollout is moving forwardDeadline exceeded; check new ReplicaSet pods

Node conditions

ConditionTrue meansAction needed
ReadyKubelet is healthy and accepting podsUnknown: check kubelet, node networking
MemoryPressureAvailable memory below eviction thresholdReduce pod memory footprint or add capacity
DiskPressureDisk space below eviction thresholdClear images, logs, or add storage
PIDPressureProcess count near node limitCheck runaway processes or increase PID limits

PVC conditions

ConditionMeaning
BoundVolume found and attached
PendingNo matching PV or provisioner; check StorageClass and capacity request

Diagnostic commands

Sort cluster events to see condition transitions in time order:

kubectl get events --sort-by=.lastTimestamp

Inspect a pod’s exact condition JSON for the machine-readable reason:

kubectl get pod my-pod -o jsonpath='{.status.conditions}' | python3 -m json.tool

Check a deployment’s rollout status:

kubectl rollout status deployment/my-app

Tips and notes

  • For nodes, Ready=Unknown almost always points at the kubelet or node networking rather than the workloads — check that the node is reachable and the kubelet service is running.
  • For deployments, watch both Available (enough ready replicas) and Progressing (rollout moving) — a healthy rollout ends with both True and Progressing.reason=NewReplicaSetAvailable.
  • Treat node pressure conditions as capacity signals: tune requests/limits, enable cluster autoscaling, or add nodes before the kubelet starts evicting pods.
  • The first False condition in the chain is usually the root cause — reading from PodScheduled downward prevents chasing symptoms.