🚀 Supercharge Your Kubernetes Apps with Readiness & Liveness Probe 💪

Saurabh AdhauSaurabh Adhau
5 min read

Kubernetes has transformed the way we handle containerized apps. But, if you think just deploying your app within a Kubernetes cluster is enough, think again! 🤔 To ensure that your app runs smoothly and efficiently, Kubernetes offers two super cool features: readiness probes and liveness probes. In this article, we’re going to dive into what these probes are and how they can save your app’s day, all with a real-world industry example. 🏭

Kubernetes Probes: Let’s Get Probing! 🔍

Probes in Kubernetes are like your app’s personal health trackers. They keep tabs on your app’s well-being and take action when needed. There are two main types of probes: readiness probes and liveness probes.

Readiness Probe:

  • A readiness probe checks whether a container is ready to accept traffic and serve requests. It determines if the application inside the container has successfully initialized and is in a state to handle incoming requests.

  • If the readiness probe fails, Kubernetes will mark the pod as “not ready,” and it will stop directing network traffic (such as user requests) to that pod. This is essential for avoiding routing traffic to pods that might be in the process of starting up or experiencing issues.

  • The readiness probe is typically used to avoid premature user access to applications that are not fully prepared to respond properly.

Liveness Probe:

  • A liveness probe checks whether the application inside a container is still running correctly. It monitors the container for signs of ongoing health.

  • If the liveness probe fails, Kubernetes takes action to recover the container. This typically involves restarting the container or even rescheduling the pod to a different node if the container repeatedly fails the liveness probe. This automatic recovery helps ensure that applications are always available and responsive.

  • The liveness probe is crucial for addressing situations where an application may become unresponsive, stuck in an infinite loop, or experiencing a memory leak.

Industry Example: E-commerce Application 🛒

Now, let’s apply these probes to a real-world e-commerce app. This app is a bustling marketplace with many moving parts, like catalogue management, order processing, and user authentication.

A. Readiness Probe: 🛍️

For the catalogue management service in our e-commerce app, readiness is key. This service may need to load a massive product catalogue into memory or establish connections with external services. Until it finishes these tasks, it’s not ready to serve customers. With a readiness probe, we can define the exact conditions for readiness. If the probe detects that the catalogue isn’t fully loaded or external services aren’t reachable, it’ll hold off on sending traffic.

️B. Liveness Probe: 📦

The order processing service in our e-commerce app is all about keeping orders flowing smoothly. But sometimes, it might encounter issues, like a payment gateway hiccup or a memory leak, causing it to go haywire. A liveness probe comes to the rescue here. It checks the service’s health at regular intervals. If it ever detects a problem, Kubernetes springs into action, restarting the container and saving the day. 🦸‍♂️🦸‍♀️

Configuring Probes in Kubernetes

Setting up probes in Kubernetes is as easy as making a cup of coffee! ☕ Here’s a simple YAML configuration snippet for configuring readiness and liveness probes for our catalogue management service:

containers:
  - name: catalog-service
    image: my-catalog-app:latest
    readinessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 5
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10

In this YAML configuration, we are defining settings for a container in a Kubernetes pod, specifically for a service called “catalog-service.” Here’s a detailed explanation of each section:

  1. containers: This is the top-level key that defines a list of containers within the pod. - name: catalog-service: This specifies a container named "catalog-service" within the pod. Multiple containers can be defined in a single pod, but in this example, we have only one container.

  2. image: my-catalog-app:latest: This sets the container's image to "my-catalog-app:latest." It specifies which container image to use for this service.

  3. readinessProbe: This section defines the readiness probe for the container. A readiness probe checks if the container is ready to serve traffic.

  • httpGet: The httpGet field specifies that an HTTP GET request should be made to check the container's readiness.

  • path: /healthz: This specifies the path (endpoint) to which the GET request will be made ("/healthz" in this case).

  • port: 8080: It specifies the port on which the container is listening for this health check.

  • initialDelaySeconds: 10: This field configures a delay of 10 seconds after the container starts before the readiness probe is initiated. It allows the container some time to initialize.

  • periodSeconds: 5: This field configures the probe to run every 5 seconds after the initial delay.

4. livenessProbe: This section defines the liveness probe for the container. A liveness probe checks if the container is still running correctly.

  • httpGet: Similar to the readiness probe, the liveness probe also uses an HTTP GET request.

  • path: /healthz: The path specifies where the probe should make the GET request ("/healthz").

  • port: 8080: The port indicates the container's listening port for the liveness check.

  • initialDelaySeconds: 30: This field sets a delay of 30 seconds after the container starts before the liveness probe is initiated. It allows the container time to fully start.

  • periodSeconds: 10: The probe repeats every 10 seconds after the initial delay, checking the container's health periodically.

In summary, this YAML configuration is part of a Kubernetes deployment and defines the settings for a container named “catalog-service.” It specifies the image to use, along with readiness and liveness probes that make HTTP GET requests to the “/healthz” endpoint on port 8080. The probes are configured with initial delays and repetition periods to ensure that the container is both ready to serve traffic and still alive during its execution. These probes are crucial for maintaining the reliability and availability of the application.

Conclusion🌟

Kubernetes readiness and liveness probes are your app’s secret weapons, ensuring it remains robust, reliable, and user-friendly. By setting up these probes in your Kubernetes configurations, you can keep users from experiencing incomplete or unstable services and let Kubernetes handle the recovery when things go south. As illustrated by our e-commerce example, these probes are superheroes in real-world scenarios, saving the day by keeping your apps responsive and rock-solid. 🦾💥

20
Subscribe to my newsletter

Read articles from Saurabh Adhau directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Saurabh Adhau
Saurabh Adhau

As a DevOps Engineer, I thrive in the cloud and command a vast arsenal of tools and technologies: ☁️ AWS and Azure Cloud: Where the sky is the limit, I ensure applications soar. 🔨 DevOps Toolbelt: Git, GitHub, GitLab – I master them all for smooth development workflows. 🧱 Infrastructure as Code: Terraform and Ansible sculpt infrastructure like a masterpiece. 🐳 Containerization: With Docker, I package applications for effortless deployment. 🚀 Orchestration: Kubernetes conducts my application symphonies. 🌐 Web Servers: Nginx and Apache, my trusted gatekeepers of the web.