Health Check
K8s上面服务的健康检测特性。在K8s上,强大的自愈能力是这个容器编排引擎的非常重要的一个特性,自愈的默认实现方式是通过自动重启发生故障的容器,使之恢复正常。除此之外,我们还可以利用Liveness 和 Readiness检测机制来设置更为精细的健康检测指标,从而实现如下的需求:
- 零停机部署
- 避免部署无效的服务镜像
- 更加安全地滚动升级
下面我们先来实践学习下K8s的Healthz Check功能,我们先来学习下K8s默认的健康检测机制:
每个容器启动时都会执行一个进程,此进程是由Dockerfile的CMD 或 ENTRYPOINT来指定,当容器内进程退出时返回状态码为非零,则会认为容器发生了故障,K8s就会根据 restartPolicy 来重启这个容器,以达到自愈的效果。
下面我们来动手实践下,模拟一个容器发生故障时的场景 :
# 先来生成一个pod的yaml配置文件,并对其进行相应修改# kubectl run busybox --image=busybox --dry-run=client -o yaml > testHealthz.yaml# vim testHealthz.yamlapiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: busyboxname: busyboxspec:containers:- image: busyboxname: busyboxresources: {}args:- /bin/sh- -c- sleep 10; exit 1 # 并添加pod运行指定脚本命令,模拟容器启动10秒后发生故障,退出状态码为1dnsPolicy: ClusterFirstrestartPolicy: OnFailure # 将默认的Always修改为OnFailurestatus: {}
| 重启策略 | 说明 |
|---|---|
| Always | 当容器失效时,由kubelet自动重启该容器 |
| OnFailure | 当容器终止运行且退出码不为0时,由kubelet自动重启该容器 |
| Never | 不论容器运行状态如何,kubelet都不会重启该容器 |
