Kubernetes 中的健康检查是使用存活性探针就绪性探针来实现的,基于这两种探测机制,实现了 k8s 的自愈能力。可以做到:

  1. 异常节点(pod)自动剔除,并重建
  2. 安全的滚动升级策略

存活性探针

livenessProbe用于判断当前容器是否存活(running)状态,如果livenessProbe探测到容器不健康,则kubectl会杀掉该容器,并根据容器的重启策略做相应重启操作。

如果一个容器不包含livenessProbe,那么kubectl会始终认为该容器的存活性探针返回的永远是success状态。

就绪性探针

readinessProbe用于判断当前容器是否完成启动(read状态),如果readinessProbe探测到容器不健康,则判定该容器不可接收流量,Endpoint Controller将从该服务对应的Serviceendpoints中移除该容器的endpoint

探测方式

  • HTTP
  • TCP
  • Exec 命令

实际在生产环境使用

livenessProbe

1
2
3
4
5
6
7
8
9
10
livenessProbe:
httpGet:
path: /ping
port: 9501
initialDelaySeconds: 30 # 延迟探测时间, 等待容器初始化
periodSeconds: 10 # 执行探测的频率(多少秒执行一次)。默认为10秒。最小值为1。
timeoutSeconds: 1 # 探测的超时时间,默认 1s,最小 1s
successThreshold: 1 # 健康阈值,最少连续成功多少次才视为成功。默认值为1。最小值为1。
failureThreshold: 3 # 不健康阈值,最少连续多少次失败才视为失败。默认值为3。最小值为1。

readinessProbe

1
2
3
4
5
6
7
8
9
10
readinessProbe:
httpGet:
path: /ping
port: 9501
initialDelaySeconds: 30
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 1
failureThreshold: 3


探针相关文档:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/