在K8S中,Pod的探针有哪些及用途?

在 Kubernetes 中,Pod 的探针(Probe)是由 kubelet 定期执行的诊断检查,用于判断容器的运行状态,从而实现自动恢复或流量控制。Kubernetes 提供了三种类型的探针,分别用于不同场景:

1. 存活探针(Liveness Probe)

用途:检测容器是否「存活」(运行状态是否正常)。若探针失败,kubelet 会根据容器的 restartPolicy(重启策略)重启容器,用于处理容器「假死」(如死锁、进程无响应)等情况。

工作机制

  • 当探针检测失败(连续多次未通过),kubelet 会杀死容器并重启它。
  • 若容器未配置存活探针,默认状态为「存活」(永远不会被 kubelet 主动重启)。

适用场景

  • 应用可能因内部错误(如死锁)导致进程存在但无法提供服务的情况。
  • 例如:Web 服务进程未崩溃,但无法处理 HTTP 请求(返回 500 错误)。

探测方式

  • httpGet:向容器的指定端口和路径发送 HTTP 请求,返回状态码 200-399 视为成功。
  • tcpSocket:尝试与容器的指定端口建立 TCP 连接,连接成功视为正常。
  • exec:在容器内执行指定命令,命令退出码为 0 视为成功。

2. 就绪探针(Readiness Probe)

用途:检测容器是否「就绪」(是否可以接收请求)。若探针失败,kubelet 会将该 Pod 从对应 Service 的端点列表(Endpoint)中移除,直到探针恢复成功,避免将流量转发到未准备好的容器。

工作机制

  • 探针失败时,仅移除流量路由,不会重启容器(与存活探针的核心区别)。
  • 容器启动后,就绪探针首次成功前,Pod 会处于「未就绪」状态(NotReady)。

适用场景

  • 容器启动后需要初始化(如加载配置、预热缓存),暂时无法处理请求的情况。
  • 应用运行中临时无法服务(如依赖的数据库连接中断),但无需重启的情况。

探测方式
与存活探针相同(httpGettcpSocketexec),但语义不同(关注「可用性」而非「存活状态」)。

3. 启动探针(Startup Probe)

用途:检测容器是否「启动完成」,主要用于处理启动时间较长的容器(如大型应用、初始化步骤复杂的服务)。它会优先于存活探针和就绪探针执行,直到成功为止。

工作机制

  • 若启动探针未成功,kubelet 会根据 restartPolicy 重启容器,避免存活探针在容器未完全启动时频繁判定失败。
  • 启动探针成功后,存活探针和就绪探针才开始生效。

适用场景

  • 应用启动时间超过存活探针超时时间的情况(如需要 5 分钟初始化的服务)。
  • 防止存活探针在容器启动阶段误判为失败而不断重启。

探测方式
与前两种探针相同,但通常设置更长的超时和间隔时间(如 failureThreshold=30periodSeconds=10,允许最长 300 秒启动时间)。

总结:三种探针的核心区别

探针类型 核心目标 失败动作 典型场景
存活探针 容器是否「活着」 重启容器 处理死锁、进程无响应
就绪探针 容器是否「可服务」 移除流量路由 启动初始化、临时不可用
启动探针 容器是否「启动完成」 重启容器(启动阶段) 处理慢启动应用

通过合理配置这三种探针,可显著提高 Pod 的可用性和稳定性,确保应用在各种异常状态下能自动恢复或隔离。

posted @ 2025-08-07 09:09  天道酬勤zjh  阅读(12)  评论(0)    收藏  举报