Skip to main content

Lab 3.4 - Configuring Health Checks

Objectives

By the end of this lab, you will be able to:

  • Configure Liveness Probes
  • Configure Readiness Probes
  • Use Startup Probes
  • Observe probe behavior

Exercise 1: Liveness Probe

Step 1: Create a Pod with a Liveness Probe

Create pod-liveness.yaml:

apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- name: nginx
image: nginx:1.20
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 3

Step 2: Apply and observe

kubectl apply -f pod-liveness.yaml

# Observe the events
kubectl describe pod liveness-pod

Exercise 2: Readiness Probe

Step 1: Create a Pod with a Readiness Probe

Create pod-readiness.yaml:

apiVersion: v1
kind: Pod
metadata:
name: readiness-pod
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5

Step 2: Create a Service

Create service.yaml:

apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80

Step 3: Observe

# View the Endpoints
kubectl get endpoints web-service

# The Pod appears in the Endpoints only when the readiness probe succeeds

Exercise 3: Startup Probe

Step 1: Create a Pod with a Startup Probe

Create pod-startup.yaml:

apiVersion: v1
kind: Pod
metadata:
name: startup-pod
spec:
containers:
- name: slow-app
image: busybox
command: ['sh', '-c', 'sleep 30 && echo "Ready" && sleep 3600']
startupProbe:
exec:
command: ['sh', '-c', 'echo "started"']
failureThreshold: 30
periodSeconds: 2
livenessProbe:
exec:
command: ['sh', '-c', 'echo "alive"']
periodSeconds: 10

Step 2: Observe

kubectl apply -f pod-startup.yaml

# Observe the startup
kubectl get pod startup-pod -w

# The liveness/readiness probes wait for the startup to succeed

Exercise 4: Failing Probe

Step 1: Create a Pod with a failing probe

Create pod-failing.yaml:

apiVersion: v1
kind: Pod
metadata:
name: failing-pod
spec:
containers:
- name: nginx
image: nginx:1.20
livenessProbe:
httpGet:
path: /nonexistent
port: 80
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3

Step 2: Observe the restart

kubectl apply -f pod-failing.yaml

# Observe the restarts
kubectl get pod failing-pod -w

# View the events
kubectl describe pod failing-pod

Cleanup

kubectl delete pod liveness-pod readiness-pod startup-pod failing-pod
kubectl delete service web-service

Reflection Questions

  1. What is the difference between liveness and readiness?
  2. When to use a startup probe?
  3. What happens if a liveness probe fails?
  4. Why are readiness probes important for Services?

Next Steps

Quiz Module 3: Validate your knowledge
Module 4: Services and Networking


Lab created: December 2024