RunningButNotReady
KubernetesWARNINGNotablePod StateHIGH confidence

Pod is running but readiness probe is failing

Production Risk

Pod receives no traffic; effective replica count is reduced, increasing load on healthy pods.

What this means

A pod in Running state with READY showing 0/1 (or fewer containers ready than total) means the container process is alive but the readiness probe is failing. Kubernetes removes such pods from Service endpoints, so they receive no traffic. This is a safety mechanism — the pod is running but not considered healthy enough to serve requests.

Why it happens
  1. 1Application is still starting up and not yet ready to handle requests
  2. 2Readiness probe endpoint returns non-2xx HTTP status or times out
  3. 3Readiness probe configuration (path, port, delay) does not match the application
  4. 4Downstream dependency (database, cache) is unavailable causing the health check to fail
How to reproduce

Deployment rollout appears stuck; pods show Running but READY column shows 0/N.

trigger — this will error
trigger — this will error
kubectl get pods
# NAME    READY   STATUS    RESTARTS   AGE
# mypod   0/1     Running   0          5m

kubectl describe pod mypod | grep -A 20 "Readiness:"

expected output

NAME    READY   STATUS    RESTARTS   AGE
mypod   0/1     Running   0          5m

Fix 1

Check readiness probe events and configuration

WHEN Pod is Running but not Ready

Check readiness probe events and configuration
kubectl describe pod mypod | grep -A 10 "Readiness:"
kubectl get events --field-selector involvedObject.name=mypod | grep -i readiness

Why this works

Shows the probe configuration and any recent failure events.

Fix 2

Test the readiness endpoint manually

WHEN Probe path or port may be misconfigured

Test the readiness endpoint manually
kubectl exec mypod -- wget -qO- http://localhost:8080/healthz
# or for TCP probes
kubectl exec mypod -- nc -z localhost 8080

Why this works

Directly tests the readiness endpoint from inside the container.

Fix 3

Increase initialDelaySeconds

WHEN Application needs more time to start before probing begins

Increase initialDelaySeconds
readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  failureThreshold: 3

Why this works

Delays the first probe attempt, giving the application time to initialize.

What not to do

Sources
Official documentation ↗

Kubernetes Documentation

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All Kubernetes errors