K8S readinessProbe 和 livenessProbe

发布于:2025-06-30 ⋅ 阅读:(19) ⋅ 点赞:(0)

在Kubernetes(k8s)中,readinessProbe 和 livenessProbe 是用于监测容器健康状态的探针机制,作用如下:

  • readinessProbe(就绪探针)​​:用于判断容器是否准备好接收流量,即是否处于就绪状态。如果探测成功,Pod的Ready状态判定为True,Kubernetes会将该Pod加入到负载均衡器中,开始转发流量;如果探测失败,Pod的Ready状态判定为False,Kubernetes会将该Pod从服务的负载均衡池中移除,避免请求被发送到未就绪的容器实例。常用于应用启动后需要一定时间进行初始化的场景,如加载配置文件、连接数据库等。配置参数有 initialDelaySeconds(初始化容器多少秒后开始第一次探测)、timeoutSeconds(探测超时时间,默认1秒)、periodSeconds(探测周期,默认10秒)、failureThreshold(连续失败几次判定为不就绪,默认3次)、successThreshold(连续成功几次判定为就绪,默认1次)。
  • livenessProbe(存活探针)​​:用于判断容器是否存活,即是否处于Running状态。如果探测成功,Pod状态判定为Running;如果探测失败,Kubernetes会根据Pod的重启策略来重启容器。适用于检测应用是否出现死锁、内存泄漏等异常情况,确保应用在出现故障时能够自动恢复。探测方式有 httpGet(向容器发送HTTP Get请求,状态码2xx或3xx为成功)、tcpSocket(尝试与容器指定端口建立TCP连接,连接成功即健康)、exec(在容器内执行命令,退出状态码为0表示成功)

在Kubernetes(k8s)中,readinessProbe 和 livenessProbe 探测在容器生命周期中的前后顺序及相关情况如下:

  1. 启动阶段​:
    • 容器启动后,会先执行 startupProbe(启动探针,若有配置),用于检测应用是否启动成功。startupProbe 成功后,livenessProbe 和 readinessProbe 才会开始工作[1,3,7]。
    • 若没有 startupProbelivenessProbe 和 readinessProbe 会按各自配置的 initialDelaySeconds(初始延迟时间)开始探测。例如配置 initialDelaySeconds: 5,则容器启动5秒后开始第一次探测。
  2. 运行阶段​:
    • livenessProbe 定期探测容器是否存活,若探测失败,Kubernetes会根据Pod的重启策略重启容器。比如配置 periodSeconds: 5,则每隔5秒执行一次探测。
    • readinessProbe 也定期探测容器是否就绪,探测成功,Pod的Ready状态为True,可接收流量;探测失败,Pod的Ready状态为False,Kubernetes会将Pod从服务的负载均衡池中移除,不再转发流量。如配置 periodSeconds: 10,则每隔10秒执行一次探测。
  3. 探测方法​:两种探针都支持 exec(执行命令,返回值为0表示成功)、httpGet(发送HTTP请求,状态码2xx或3xx表示成功)、tcpSocket(建立TCP连接成功表示健康)三种探测方法,且配置方法相同。
  4. 同时使用情况​:readinessProbe 和 livenessProbe 可并行用于同一容器,确保流量不到达未就绪容器,且在容器失败时重启容器