Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
World desk6 min

Why a Kubernetes Pod Showing ‘Running’ Doesn’t Mean It’s Healthy

A Kubernetes Pod showing Running only means it is bound to a node and has started a container. Ready, readiness, liveness and startup probes decide traffic and restarts, and they need separate checks.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Kubernetes Pod showing Running means Kubernetes has bound it to a node and started at least one of its containers. It does not mean the application inside is healthy, ready to receive traffic, or able to answer requests. Those answers come from two other signals: the Pod’s Ready condition and the probes you configure on each container. Each one triggers a different action, so a Pod can be Running and still receive no traffic, or keep restarting while its phase never changes.

What “Running” actually tells you

The Pod phase is a compact lifecycle field. The Kubernetes Pod Lifecycle documentation (v1.32 version of the docs) defines Running as a state where the Pod is bound to a node, all containers have been created, and at least one primary container is running or is starting or restarting. The same documentation states that the phase is not intended to be a comprehensive rollup of container or Pod state. See Pod Lifecycle (Kubernetes v1.32).

As an Amazon Associate I earn from qualifying purchases.

A Pod can therefore be Running while its web server is deadlocked, its database credentials are rejected, or its readiness check returns errors. The phase carries none of that information. Treat it as “the scheduler placed this Pod and something started,” not as a verdict on the workload.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Ready is the field that controls traffic

The Pod Conditions documentation (v1.36 version of the docs) gives the direct example: a Pod may be in the Running phase but not yet ready to serve traffic. See Pod Conditions (Kubernetes v1.36).

The Ready condition can be false for several distinct reasons, and each one points to a different place to look:

  • A container is not ready. With a readiness probe configured, a container stays not ready until the probe succeeds.
  • An init container has not finished. Init containers must complete successfully before the Pod can become Ready. See Init Containers.
  • The node is not Ready. Pod readiness is also false when the node hosting it is not Ready.
  • A readiness gate is false. Custom readiness gates, if defined in the Pod spec, must be true as well.

Three probes, three different decisions

Kubernetes uses three probe types. They ask different questions and produce different responses, so a check meant for one job will misbehave if used for another.

Probe Question it answers What Kubernetes does after repeated failure Common mistake
Startup Has the application finished starting? Holds off liveness and readiness checks until it succeeds. If it keeps failing, the kubelet kills the container and the Pod’s restart policy applies. Setting a window too short for real initialization, so the container is killed before it could ever start.
Readiness Should this container receive traffic right now? Pod Ready becomes false and the Pod IP is removed from matching Service EndpointSlices. The container keeps running and the probe keeps running. Checking only that a port accepts connections, which passes while requests fail.
Liveness Is the application stuck in a state that a restart would fix? After the configured failureThreshold consecutive failures, the kubelet restarts the container. Making the check depend on a downstream service, so an outage elsewhere restarts healthy containers.

Choosing what each probe should test

The probe result is only as meaningful as what it checks. A temporary dependency outage or an overloaded instance is usually a readiness concern: the instance should stop taking requests but should not be killed, because a restart does not fix the dependency and removes capacity at the worst moment. A deadlock that prevents the process from making progress is a liveness concern, since restarting can recover it. A slow but working initialization path belongs under a startup probe.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Kubernetes’ probe concept documentation warns that a poorly designed liveness check can restart containers under load, reduce serving capacity, increase failures for clients, and put more load on the Pods that remain. Keep liveness checks narrow and local to the process.

Whether a readiness endpoint should test the database, a cache, or only the application’s own state is an implementation decision rather than a Kubernetes requirement. The guidance that follows from the probe model is that the endpoint should reflect whether this instance can do useful work, and that a shallow listener check can pass while the application fails.

Diagnose a Running Pod that is not healthy

Work through these checks in order. Replace the placeholders with your Pod, container, namespace, and Service names.

  1. Read the READY column first. Run kubectl get pod <pod-name> -n <namespace> -o wide. A value such as 0/1 alongside STATUS Running confirms the gap between phase and readiness.
  2. Read the conditions directly. Run kubectl get pod <pod-name> -n <namespace> -o jsonpath='{range .status.conditions[*]}{.type}{"t"}{.status}{"t"}{.reason}{"n"}{end}' and check the Ready row’s status and reason.
  3. Inspect every container, including init containers. Run kubectl describe pod <pod-name> -n <namespace> and review the Init Containers and Containers sections. Look at Ready, Restart Count, State, and Last State, including the reason and exit code of the previous termination.
  4. Read the events. The Events section at the bottom of the describe output shows lines such as Readiness probe failed or Liveness probe failed along with the response that caused them.
  5. Compare probe settings with real behavior. The describe output lists each probe’s delay, timeout, period, success threshold, and failure threshold. Check these against how long the application really takes to start and recover, not against defaults.
  6. If the Pod is not Ready, confirm whether it receives traffic. Run kubectl get endpointslices -n <namespace> -l kubernetes.io/service-name=<service-name> -o wide. If the Pod’s IP is missing from the endpoints, the Service is not routing to it.
  7. If restarts are climbing, read the logs from the last run. Run kubectl logs <pod-name> -n <namespace> -c <container-name> --previous. The current container may have just started, so the previous instance usually contains the failure.
  8. Test the endpoint the probe uses. Run kubectl port-forward pod/<pod-name> 8080:<container-port> -n <namespace> and request the probe path locally, bypassing the Service. Compare the response with what the probe expects.

Which branch you are on

  • Ready is false, restart count is 0. The readiness probe is the cause. The container is alive and is simply excluded from traffic. Fix the check or the dependency it reflects.
  • Ready is false and restarts are increasing. A liveness or startup probe is killing the container. Inspect the previous logs and the probe’s timing before changing anything else.
  • Ready is true but requests still fail. The probe is passing without testing the path that users hit. Check the Service’s target port, the application’s error logs, and whether the readiness endpoint covers the failing functionality.
  • There is no readiness probe. The kubelet treats the container as ready by default, so Kubernetes is not validating application usefulness at all. Add a readiness probe that reflects what the Service needs.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Probe timing and defaults

The Kubernetes probe documentation describes the timing fields. initialDelaySeconds is the wait before the first check. periodSeconds is the interval between checks. timeoutSeconds is how long each check may take. failureThreshold is the number of consecutive failures required before the action is taken. The documented defaults are 0 seconds for the initial delay, 10 seconds for the period, 1 second for the timeout, and 3 for the failure threshold. Confirm these against the release documentation for your cluster before relying on them. See Configure Liveness, Readiness and Startup Probes.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A startup window is simply the failure threshold multiplied by the period. For example, a startup probe with failureThreshold: 30 and periodSeconds: 10 allows about 300 seconds for the application to start before the container is killed. That number is arithmetic from the settings, not a recommendation; choose values from measured startup time with headroom.

For the readiness and liveness checks, the same arithmetic applies in reverse. A readiness probe with a 1-second timeout that the application sometimes exceeds under normal load will flip Ready to false during ordinary traffic peaks. Set timeouts from observed response times, not from the minimum that happens to work in a quiet test environment.

Practical checklist before you trust a Pod

  • The Ready condition is true, not merely the phase.
  • Every init container and every app container has completed or is ready, with no unexpected restarts.
  • A readiness probe exists and tests the path that serves traffic.
  • A liveness probe exists only if restarting the container is a real recovery path for a stuck state.
  • A startup probe covers any slow initialization so that liveness does not fire during boot.
  • The Pod’s IP appears in the matching Service’s EndpointSlices.

“

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.