1.Liveness探测
Liveness方式采用的是当容器运行返回非0,出现报错时,探测失败,K8S就会根据restartPolicy重启策略进行自动重启容器,来恢复容器服务
Lineness.yaml配置
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness
spec:
restartPolicy: OnFailure
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10 #指定容器启动后10s后开始Liveness探测,当应用的启动时间为30s,那么initialDelaySeconds的数值要大于30
periodSeconds: 5 #指定每5s执行一次Liveness探测
2.Readiness探测
Readiness的方式是,当容器启动后,探测此服务为正常,才将容器加到负载均衡池中,对外提供服务。
readiness.yaml配置,语法和Lineness基本相同
apiVersion: v1
kind: Pod
metadata:
labels:
test: readiness
name: readiness
spec:
restartPolicy: OnFailure
containers:
- name: readiness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy;sleep 600
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe探测方法
1:exec ,通过命令的方式;
2:httpGet,判断成功的方法是http请求返回的代码在200-400之间,不在范围,不接受service请求,每隔periodSeconds时间探测一次,连续3次探测失败,容器会从负载均衡中移除,直到下次探测成功加入。探测方式http://[container_ip]:8080/path返回值
3.两种探测方法的比较
(1)Liveness探测和Readiness探测是两种健康检查机制,不配置的话,对两种探测方式采用相同的默认行为,则通过容器启动进程的返回值判断探测是否成功。
(2)两种探测方法参数基本一致,主要在于探测失败后的处理机制问题,Liveness在健康检查失败后,通过重启容器达到自愈,而Readiness探测出现问题后,将容器设置为不可用,将不再对外提供服务
(3)Liveness探测和Readiness两种方式是独立的,不互相依赖,可以单独使用,也可以配合使用。