KubernetesCXIX · Pod TroubleshootingPod troubleshooting
Probe failures — readiness, liveness, and startup
What you'll learn
- Apply the 11-step methodology to a probe failure
- Distinguish readiness, liveness, and startup probe failures
- Diagnose a workload that is running but not Ready
- Identify the production failure modes of misconfigured probes
Prerequisites
Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16
A probe failure is the kubelet removing the Pod from the
Service (readiness) or restarting the Pod (liveness). The
events and the probe configuration are the diagnostic. The
kubelet emits an Unhealthy event naming the probe and the
reason it returned — the HTTP status code, the exit code, or
the timeout.
The three probes
A Pod can have three probes:
- Readiness probe. Determines whether the Pod is ready to serve traffic. If the probe fails, the Pod is removed from the Service’s EndpointSlice.
- Liveness probe. Determines whether the Pod is alive. If the probe fails, the kubelet restarts the container.
- Startup probe. Determines whether the Pod has started. Until the startup probe succeeds, the readiness and liveness probes are not run.
flowchart TD
A[Pod starts] --> B{Startup probe?}
B -->|Configured| C{Startup passes?}
B -->|Not configured| D[Readiness + Liveness]
C -->|Yes| D
C -->|No| E[Container killed]
D --> F{Readiness passes?}
F -->|Yes| G[Pod in EndpointSlice]
F -->|No| H[Pod removed from EndpointSlice]
D --> I{Liveness passes?}
I -->|Yes| J[Container runs]
I -->|No| E
The three probes are designed for different failure modes. A misconfigured probe causes the kubelet to act on the workload in the wrong way.
The readiness probe failure
A readiness probe failure is the most common. The Pod is
running, but the Ready condition is False. The
EndpointSlice does not include the Pod. The Service routes
no traffic to the Pod.
A real kubectl describe pod for a readiness probe failure:
Containers:
billing:
Image: registry.example.com/billing:1.2.3
State: Running
Started: Fri, 16 Aug 2026 04:23:01 +0000
Ready: False
Restart Count: 0
Limits:
cpu: 500m
memory: 512Mi
Requests:
cpu: 250m
memory: 256Mi
Readiness: http-get http://:8080/healthz delay=10s timeout=1s period=5s #success=1 #failure=3
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 2m kubelet Readiness probe failed: HTTP probe failed with statuscode: 503
The events tell the operator:
- The readiness probe is failing with HTTP 503.
- The probe is
http-get http://:8080/healthzwith a 10s delay, 1s timeout, 5s period, 1 success, 3 failures.
The remediation is to investigate why the application is
returning 503 on /healthz.
The liveness probe failure
A liveness probe failure causes the kubelet to restart the
container. The Pod is in CrashLoopBackOff (effectively)
because the kubelet is restarting it faster than the liveness
probe’s failure threshold.
A real kubectl describe pod for a liveness probe failure:
Containers:
billing:
Image: registry.example.com/billing:1.2.3
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
Ready: False
Restart Count: 12
Liveness: http-get http://:8080/healthz delay=30s timeout=1s period=10s #success=1 #failure=3
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 1m kubelet Liveness probe failed: HTTP probe failed with statuscode: 500
Warning Killing 1m kubelet Killing container billing
Warning BackOff 30s kubelet Back-off restarting failed container billing
The events tell the operator:
- The liveness probe is failing with HTTP 500.
- The kubelet is killing the container.
- The container is restarting.
The remediation is to investigate why the application is
returning 500 on /healthz or to fix the liveness probe’s
configuration.
The startup probe failure
A startup probe failure causes the kubelet to kill the
container before the readiness and liveness probes run. The
Pod is in CrashLoopBackOff because the application cannot
start.
Containers:
billing:
Liveness: http-get http://:8080/healthz delay=30s timeout=1s period=10s #success=1 #failure=3
Readiness: http-get http://:8080/healthz delay=10s timeout=1s period=5s #success=1 #failure=3
Startup: http-get http://:8080/healthz delay=10s timeout=1s period=10s #success=1 #failure=30
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 5m kubelet Startup probe failed: HTTP probe failed with statuscode: 503
Warning Killing 5m kubelet Killing container billing
The startup probe is the gate; it runs before the readiness
and liveness probes. If the application is slow to start, the
startup probe’s failureThreshold (30 in this example) is the
allowance.
Common causes of probe failures
- Wrong path. The probe’s path is wrong (e.g.,
/healthzinstead of/health). - Wrong port. The probe’s port is wrong.
- Slow startup. The application takes longer than the startup probe’s threshold to start.
- Wrong status code. The application returns 200 for
/healthzbut the probe expects 204. - External dependency. The application’s
/healthzchecks the database, and the database is unreachable.
Production discipline
A probe failure is the kubelet acting on the workload. The discipline is to read the events, identify the probe, and apply the remediation. A cluster that has frequent probe failures is a cluster that has misconfigured probes or buggy workloads.
- Distinguish readiness, liveness, and startup. The three probes have different effects.
- Fix the probe, not just the application. A probe that is too aggressive is a probe that will fail again.
- Test the probe in staging. The probe’s behavior is the same in production; the difference is the consequence.
Quiz
Knowledge check · 4 questions
Q1. What is the difference between a readiness probe failure and a liveness probe failure?
Q2. A startup probe failure causes the kubelet to kill the container before the readiness and liveness probes run.
Q3. An operator runs `kubectl describe pod billing-7d8f-abcde -n prod`. The events show `Readiness probe failed: HTTP probe failed with statuscode: 503`. The Pod is in `Running` state but `Ready: False`. What is the diagnostic and remediation?
The Pod is `billing-7d8f-abcde` in namespace `prod`. The workload is a 6-replica Deployment. The Pod is Running but Ready: False. The service is not routing traffic to the Pod.
Q4. Name three common causes of probe failures and the events that surface each one.
Passing score: 75%. Answers are checked in this browser.