Health Check

K8s上面服务的健康检测特性。在K8s上,强大的自愈能力是这个容器编排引擎的非常重要的一个特性,自愈的默认实现方式是通过自动重启发生故障的容器,使之恢复正常。除此之外,我们还可以利用Liveness 和 Readiness检测机制来设置更为精细的健康检测指标,从而实现如下的需求:

  • 零停机部署
  • 避免部署无效的服务镜像
  • 更加安全地滚动升级

下面我们先来实践学习下K8s的Healthz Check功能,我们先来学习下K8s默认的健康检测机制:
每个容器启动时都会执行一个进程,此进程是由Dockerfile的CMD 或 ENTRYPOINT来指定,当容器内进程退出时返回状态码为非零,则会认为容器发生了故障,K8s就会根据 restartPolicy 来重启这个容器,以达到自愈的效果。
下面我们来动手实践下,模拟一个容器发生故障时的场景 :

  1. # 先来生成一个pod的yaml配置文件,并对其进行相应修改
  2. # kubectl run busybox --image=busybox --dry-run=client -o yaml > testHealthz.yaml
  3. # vim testHealthz.yaml
  4. apiVersion: v1
  5. kind: Pod
  6. metadata:
  7. creationTimestamp: null
  8. labels:
  9. run: busybox
  10. name: busybox
  11. spec:
  12. containers:
  13. - image: busybox
  14. name: busybox
  15. resources: {}
  16. args:
  17. - /bin/sh
  18. - -c
  19. - sleep 10; exit 1 # 并添加pod运行指定脚本命令,模拟容器启动10秒后发生故障,退出状态码为1
  20. dnsPolicy: ClusterFirst
  21. restartPolicy: OnFailure # 将默认的Always修改为OnFailure
  22. status: {}
重启策略 说明
Always 当容器失效时,由kubelet自动重启该容器
OnFailure 当容器终止运行且退出码不为0时,由kubelet自动重启该容器
Never 不论容器运行状态如何,kubelet都不会重启该容器