Sling Academy
Home/DevOps/Kubernetes: How to wait for a pod to be ready to use (with examples)

Kubernetes: How to wait for a pod to be ready to use (with examples)

Last updated: January 31, 2024

Introduction

Kubernetes is a powerful container orchestration tool that manages the deployment and scaling of applications. However, deploying an application is only one part of the process. It is also essential to make sure that the deployed pods are ready to serve traffic, which is where readiness probes and other monitoring techniques come into play. In this tutorial, we will explore various methods to wait for a Kubernetes pod to be ready to use, with a progression from basic to more advanced methods.

Understanding Readiness Probes

In Kubernetes, readiness probes are used to determine whether a pod is ready to handle requests. These probes are configured at the container level within the pod specification. The kubelet uses the readiness probe to know when the container has successfully started and can be considered ‘ready’. Below is an example of a readiness probe using an HTTP GET action:

apiVersion: v1
kind: Pod
metadata:
  name: my-application
spec:
  containers:
  - name: app-container
    image: my-app:latest
    ports:
      - containerPort: 80
    readinessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 3

This probe checks the ‘/healthz’ endpoint on port 80 of the container every 5 seconds, starting 5 seconds after the container has started. The pod is considered ready if the endpoint returns a successful response.

Using the kubectl wait Command

One of the simplest methods to wait for a pod to be ready is using the ‘kubectl wait’ command, which suspends processing until the specified condition is true. The following command waits for a particular pod to be in the ‘Ready’ state:

kubectl wait --for=condition=ready pod/my-application

This command blocks the shell until the specified pod is ready. Here’s an example output indicating the pod is now ready:

pod/my-application condition met

Checking Readiness with a Shell Loop

If you’re scripting deployments or operations in a CI/CD pipeline, it might be necessary to incorporate more complex logic for waiting on pods. The following shell script uses a while loop to check the readiness status:

#!/bin/bash
POD_NAME=my-application

until kubectl get pods "$POD_NAME" -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -m 1 "True"; do
  echo "Waiting for pod $POD_NAME to be ready..."
  sleep 5
kubernetes How to wait for a pod to be ready to use (with examples) done
echo "Pod $POD_NAME is ready!"

This script periodically checks if the ‘Ready’ condition for the specified pod is ‘True’, indicating that the pod is fully operational. It will continually output a waiting message every 5 seconds until the condition is met.

Advanced Readiness Check using a Watcher with kubectl

For more advanced cases where you want real-time updates, you can use the ‘kubectl get pod’ with the ‘–watch’ or ‘-w’ flag to monitor the pod’s status in real time:

kubectl get pods -w

The watch flag outputs changes as they occur until you terminate the command. For monitoring a specific pod, you can specify the pod name:

kubectl get pod my-application -w

This will give you a live feed of events related to ‘my-application’, including its transition to ‘Ready’ status.

Using Kubernetes Events

Another advanced technique involves inspecting Kubernetes events to watch for transitions in pod status. You can retrieve events related to a specific pod using:

kubectl describe pod my-application | grep -i "events"

or for ongoing monitoring:

kubectl get events --field-selector involvedObject.name=my-application --watch

By monitoring the events, you are able to gain insight into the lifecycle of the pod, including any issues that might be preventing it from becoming ready.

Conclusion

In conclusion, ensuring that a Kubernetes pod is ready before directing traffic to it is crucial for application reliability. We’ve reviewed several methods, from basic ‘kubectl wait’ to complex scripting and real-time event monitoring that you can use to verify pod readiness in your Kubernetes deployments. Each method serves different needs and complexities of deployment scenarios. Whether you are automating deployments or debugging individual pods, there are valuable tools at your disposal to ensure smooth application rollouts.

Next Article: How to access localhost from a Kubernetes pod/container (with examples)

Previous Article: Kubernetes: How to restart a pod periodically (with examples)

Series: Kubernetes Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide