Skip to main content

Myth: Kubernetes Guarantees Application Self-Healing

During an on-call incident, alerts showed pods continuously restarting, nodes were healthy, and Kubernetes reported everything as “Running.”

Yet users were still seeing errors and timeouts.

The common conclusion during the incident review was:

“Kubernetes should have self-healed this.”

It hadn’t.

It simply kept restarting the same broken application.

Why This Myth Exists?

This myth is reinforced by Kubernetes features that appear intelligent:

  • Controllers continuously reconcile desired state

Pods are automatically restarted on crashes

Failed nodes trigger pod rescheduling

Marketing and conference talks overuse the term self-healing

Over time, this creates the belief that Kubernetes understands and heals application failures.

It does not.

The Reality

Kubernetes does not heal applications, It just restart it.

It enforces desired state.

Kubernetes has no concept of:

  • Correct business behavior

Dependency health

Partial failures

Performance degradation

Data corruption

Logical deadlocks

From Kubernetes’ perspective, an application is healthy as long as:

The container process is running

Probes (if configured) return success

If a pod is alive but wrong, Kubernetes considers the job done.

Experiment & Validate

Step 1: Deploy an Application

Create a Deployment with a simple container image.

kubectl create deployment upgrade-demo --image=nginx:1.25

Wait for the Pod to be ready:

kubectl get pods -l app=upgrade-demo

Note the Pod name and UID.

Step 2: Trigger an “Upgrade”

Update the container image version:

kubectl set image deployment/upgrade-demo nginx=nginx:1.26

Step 3: Observe the Rollout

Watch Pods during the update:

kubectl get pods -l app=upgrade-demo -w

You will see:

  • Old Pod terminating
  • New Pod being created
  • New Pod has a different name and UID

Step 4: Verify Pod Replacement

Check the Deployment history:

kubectl rollout history deployment/upgrade-demo

Kubernetes created a new ReplicaSet, not an upgraded Pod.

Key Takeaways

  • Kubernetes never upgrades a running application instance

  • Pods and containers are immutable

  • Rolling updates are controlled replacements

  • Application continuity is achieved through redundancy, not mutation

  • Applications must be designed to tolerate replacement at any time

Did this myth change how you understand Kubernetes?
00
Authored and Debunked By
Rajesh Deshpande
Rajesh DeshpandeKubernetes Mythologist
Cloud-Native Platform Architect
More →
Reviewed and Verified By
Snehal Joshi
Snehal JoshiKubernetes Mythicist
Cloud-Native Architect (DevOps)
More →