liveness 探针是让用户自定义判断容器是否健康的条件,如果探测失败,Kubernetes 会重启容器。
Readiness 探针是让用户自定义判断容器什么时候可以被 Kubernetes 加入到service 负载均衡池中,对外提供服务。
liveness 示例:
apiVersin: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness
spec:
restartPolicy: OnFailure
containers:
- name: liveness
image: busybox
# 首先创建文件,30秒后删除
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
# 探测方法,通过 cat 命令检查 /tmp/healthy 文件是否存在。如果命令执行成功,返回
# 值为 0,Kubernetes 则认为探测成功。非 0 值时为失败,Kubernetes 将会重启 Pod
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10 # 容器启动 10 秒后进行探测
periodSeconds: 5 # 每 5 秒进行一次探测
readiness 示例和liveness 几乎一样,只是把 livenessProbe 替换成 readinessProbe 。下面示例使用另外一种探测方式。
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
template:
metadata:
labels:
run: web
spec:
containers:
- name: web
image: myhttpd
ports:
- containerPort: 8080
readinessProbe:
httpGet:
scheme: HTTP #指定协议
path: /healthy # 访问路径
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
selector:
run: web
ports:
- protocol: TCP
port: 8080
tartargetPort: 80
此例中,Kubernetes 将访问 http://[container_ip]:8080/healthy 来判断,如果返回码不是 200~400,表示容器没有就绪,不接收 Service web-svc 的请求。