Comparisons

Pairs that get conflated in real conversations, and a few that get treated as synonyms when one is a prerequisite for the other. Neither column wins — what decides is the change in front of you. Each record leads with the confusion, because the confusion is why the record exists.

Readiness vs Liveness

What people get wrong about this pair

The classic mistake is pointing both at the same handler, usually one that checks downstream dependencies. When the database has a bad minute, readiness correctly removes the instance from the load balancer — and liveness, checking the same thing, restarts every instance simultaneously, converting a dependency blip into a full outage with cold caches and a thundering herd. Liveness must test only the process itself; anything it can be wrong about, it will restart.

Readiness
Use it when

Use readiness to answer "should this instance receive traffic right now" — startup not finished, cache warming, or a temporary refusal to take work.

Liveness
Use it when

Use liveness to answer "is this process irrecoverably stuck, such that restarting it is the only fix".

DimensionReadinessLiveness
QuestionCan I serve traffic now?Am I unrecoverable without a restart?
Failure actionRemoved from the load balancer, keeps runningKilled and restarted
May check dependenciesSometimes, carefully — and never for the whole fleet at onceNo. Never.
Cost of a false positiveReduced capacityA restart storm across the fleet
Also neededA startup grace period so slow boots are not mistaken for failureA threshold high enough that a slow GC pause does not qualify
Non-Kubernetes equivalentLoad balancer health check controlling target registrationProcess supervisor or instance health check controlling replacement