Lesson 2.6: Health Probes
Configure Liveness, Readiness and Startup Probes
In Kubernetes, probes are used to monitor the health and availability of containers in a Pod. There are three types of probes:
- Liveness Probe
- Readiness Probe
- Startup Probe
Each probe serves a specific purpose and helps Kubernetes manage the lifecycle of containers effectively. Let’s break down each probe and explain how they work, using the examples you provided.
1. Liveness Probe
The liveness probe determines whether a container is still running and healthy. If the probe fails, Kubernetes restarts the container.
Example: Liveness Probe with exec
[root@master health]# cat liveness-c.yml
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec
labels:
test: liveness
spec:
containers:
- name: liveness
image: busybox:1.28
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600;
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
[root@master health]# kubectl apply -f liveness-c.yml
pod/liveness-exec created
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec 1/1 Running 0 60s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec 1/1 Running 1 (8s ago) 83s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec 1/1 Running 2 (9s ago) 2m39s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
liveness-exec 1/1 Running 5 (66s ago) 7m21s
Explanation:
- The container creates a file
/tmp/healthy
and deletes it after 30 seconds. - The livenessProbe checks for the existence of
/tmp/healthy
every 5 seconds (periodSeconds: 5), starting after an initial delay of 5 seconds (initialDelaySeconds: 5). - When the file is deleted, the probe fails, and Kubernetes restarts the container.
- Behaviour: The container is restarted multiple times, as seen in the RESTARTS count.
Readiness Probe
The readiness probe determines whether a container is ready to serve traffic. If the probe fails, the container is removed from the Service's load balancer.
Example: Readiness Probe with tcpSocket
[root@master health]# cat liveness-tcp.yml
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: registry.k8s.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
Explanation:
- The readinessProbe checks if the container is listening on port
8080
. - The probe starts after 15 seconds (initialDelaySeconds: 15) and repeats every 10 seconds (periodSeconds: 10).
- If the container is not ready to accept connections, it is marked as NotReady and removed from the Service's endpoints.
Startup Probe
The startup probe is used to determine whether the application inside the container has started successfully. It is particularly useful for slow-starting applications.
[root@master health]# cat liveness-http.yml
apiVersion: v1
kind: Pod
metadata:
name: hello
spec:
containers:
- name: liveness
image: registry.k8s.io/e2e-test-images/agnhost:2.40
args:
- liveness
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
[root@master health]# kubectl apply -f liveness-http.yml
pod/hello created
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 1/1 Running 0 27s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 1/1 Running 2 (14s ago) 62s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 1/1 Running 3 (9s ago) 75s
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 1/1 Running 4 (35s ago) 2m
# After continuosly failing - CrashLoopBackOff
[root@master health]# kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 0/1 CrashLoopBackOff 5 (47s ago) 3m17s
Explanation:
- The startupProbe checks the
/healthz
endpoint on port8080
. - It allows up to 30 failures (failureThreshold: 30) with a 10-second interval between checks (periodSeconds: 10).
- Once the startup probe succeeds, the liveness and readiness probes take over.
Key Parameters for Probes
- initialDelaySeconds: The number of seconds to wait before performing the first probe after the container starts.
- periodSeconds: The interval (in seconds) between probe checks.
- timeoutSeconds: The number of seconds after which the probe times out.
- successThreshold: The number of consecutive successes required to consider the probe successful.
- failureThreshold: The number of consecutive failures required to consider the probe failed.
Comparison of Probes
Probe Type | Purpose | Action on Failure |
---|---|---|
Liveness | Checks if the container is running and healthy. | Restarts the container. |
Readiness | Checks if the container is ready to serve traffic. | Removes the container from the Service's endpoints. |
Startup | Checks if the application has started successfully. | Delays liveness and readiness probes until the startup probe succeeds. |
When to Use Each Probe
- Liveness Probe: Use when you want Kubernetes to restart a container if it becomes unresponsive or enters a broken state.
- Readiness Probe: Use when you want Kubernetes to stop sending traffic to a container that is not ready to handle requests.
- Startup Probe: Use for slow-starting applications to prevent Kubernetes from killing the container before it has fully started.