Imagine deploying an application in Kubernetes, only to find that some pods randomly stop working, others become unresponsive, and traffic still gets routed to a dead service. Nightmare, right? 😱 This is where Kubernetes Probes come to the rescue!
In this article, we'll explore why probes are essential, what happens if you don’t use them, and how you can leverage different types of probes—liveness, readiness, and startup probes—to make your applications more resilient and self-healing. We’ll also cover different ways to implement probes using HTTP, gRPC, TCP, and exec checks. By the end, you'll be a probe expert! 💡
🚀 Why Do We Need Probes in Kubernetes?
Kubernetes runs applications as containers, but unlike traditional applications, containers don’t always behave predictably. They might:
Crash unexpectedly (due to memory leaks, panics, etc.).
Become unresponsive while still running.
Take too long to start due to heavy initialization tasks.
Without probes, Kubernetes has no idea whether your application is healthy or not! As a result, it may keep sending traffic to a broken pod or fail to restart a crashed application.
What Happens If We Don’t Use Probes?
🚨 Scenario 1: A Dead Application Still Gets Traffic
A web server crashes but remains in a "running" state.
Kubernetes still routes traffic to it, causing users to get errors.
Customers get frustrated, and you lose business. 😭
🚨 Scenario 2: A Slow-Starting App Gets Killed Prematurely
Your application takes 60 seconds to initialize.
Kubernetes thinks it’s dead and restarts it over and over.
Your app never becomes available, even though it was working fine! 🙃
🚨 Scenario 3: A Pod Crashes but Never Gets Restarted
Your backend service crashes due to a memory leak.
Kubernetes doesn’t detect it and never restarts it.
The entire system slowly fails because of one bad pod. 🔥
🛠️ Types of Kubernetes Probes
Kubernetes provides three types of probes to prevent these issues:
Probe Type | Failure Action |
Liveness Probe | Kubelet restarts the container if the probe fails. |
Readiness Probe | Kubelet removes the pod from the service endpoint (no traffic sent to it). |
Startup Probe | If the probe fails, the pod is killed and restarted. |
🕵️♂️ Exploring Different Probe Methods
Kubernetes offers multiple ways to check container health:
1️⃣ HTTP Probe - Ideal for Web Applications 🌍
Use Case: Check if a web server is responding.
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5 ------------> the wait period before kubelet starts checking
periodSeconds: 10 -----------------> kubelet checks again after 10sec period
failureThreshold: 3 ---------------> kubelet restarts container after 3 consecutive failure
✅ Kubernetes sends an HTTP request to /healthz
. If the response is 200 OK, the pod is healthy. If not, Kubernetes restarts it.
2️⃣ gRPC Probe - Perfect for Microservices 🔗
Use Case: Check if a gRPC service is alive.
livenessProbe:
grpc:
port: 50051
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
✅ Kubernetes makes a gRPC health check request. If the service responds, it's considered healthy. If not, it's restarted.
3️⃣ TCP Probe - Great for Databases and TCP-Based Services 📡
Use Case: Check if a database (e.g., PostgreSQL) is accepting connections.
livenessProbe:
tcpSocket:
port: 5432
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
✅ Kubernetes tries to establish a TCP connection. If successful, the pod is healthy. If it fails, Kubernetes restarts the container.
4️⃣ Exec Probe - Custom Commands for Complex Applications 🛠️
Use Case: Run a script inside the container to verify health.
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
✅ Kubernetes executes a command inside the container. If the command runs successfully (exit code 0), the pod is healthy. Otherwise, Kubernetes restarts it.
🏆 Best Practices for Using Probes
✅ Use Readiness Probes for External Dependencies
- If your service depends on a database, only mark it as ready after it establishes a DB connection.
✅ Use Startup Probes for Slow-Starting Apps
- If your application initializes slowly, a startup probe prevents it from getting restarted too early.
✅ Set Reasonable Probe Timeouts
- Don’t check too frequently—this can cause unnecessary restarts.
✅ Always Test Your Probes
- Deploy your application and ensure the probes behave as expected.
🎯 Conclusion
Kubernetes Probes are a powerful feature that makes your applications more resilient, self-healing, and production-ready. Without them, you risk serving broken services to users, premature restarts, or complete application failure.
By using liveness, readiness, and startup probes, combined with HTTP, gRPC, TCP, or exec methods, you can ensure your Kubernetes workloads stay healthy and responsive. 🚀