Kubernetes 针对 Pod 资源对象主要有以下两种健康监测机制:

一、就绪性探测(Readiness Probe)

  1. 作用:

    • 确定容器是否准备好服务请求。当一个 Pod 中的容器的就绪性探测成功时,该容器才会被视为准备好接收流量,被添加到服务的后端列表中。如果就绪性探测失败,容器将从服务的后端列表中移除,新的请求不会被分发到该容器,直到它再次变为就绪状态。
  2. 实现方式:

    • HTTP GET 探测:向容器内指定的路径和端口发送 HTTP GET 请求。如果响应的状态码在 200 到 399 之间,则认为容器就绪。
    • TCP 套接字探测:尝试与容器内指定的端口建立 TCP 连接。如果连接成功,则认为容器就绪。
    • Exec 探测:在容器内执行指定的命令。如果命令的退出状态码为 0,则认为容器就绪。

二、存活态探测(Liveness Probe)

  1. 作用:

    • 检查容器是否正在运行。如果存活态探测失败,Kubernetes 会尝试重启容器,以确保应用持续运行。
  2. 实现方式:

    • HTTP GET 探测:与就绪性探测的 HTTP GET 方式类似,但目的是检查容器的运行状态而不是准备接收请求的状态。
    • TCP 套接字探测:与就绪性探测的 TCP 套接字方式类似,用于判断容器是否在运行。
    • Exec 探测:在容器内执行指定的命令,根据命令的退出状态码判断容器是否存活。

两者区别

  1. 目的不同:

    • 就绪性探测主要关注容器是否准备好接收请求,决定容器是否应该被纳入服务的后端列表。
    • 存活态探测主要关注容器是否正在运行,以确保应用的持续可用性,如果容器出现问题则尝试重启。
  2. 影响不同:

    • 就绪性探测失败只会影响容器是否接收新的请求,不会导致容器被重启。
    • 存活态探测失败可能会导致容器被重启。
  3. 触发时机不同:

    • 就绪性探测在容器启动后以及在容器运行过程中定期进行,以确保容器始终处于可以接收请求的状态。
    • 存活态探测在容器运行期间持续进行,以检测容器是否出现故障。