k8s 就绪探针、存活探针是每个节点上的 kubelet 负责执行探针,由本节点的 kubelet 向 Pod 内发起请求,和你说的 collect 组件无关。kubelet 常驻在每个节点,直接发起 HTTP‑GET / exec / TCP‑Socket 检测。
含义:kubelet 发出这次探测之后,等待 Pod 返回结果的最长时间,超过该值直接判定本次探针失败。
• 默认1s,最小值强制1,无法设置0。
1. 理想情况(1秒够用)
探针只做轻量化检查,比如访问一个内存级健康接口、简单端口连通,没有外部IO。Pod 跟本机 kubelet 通信,走本机网络,正常几十毫秒就返回,1秒余量充足。一旦1秒超时,基本代表进程僵死、线程耗尽,本身就属于异常,1秒阈值没问题。
2. 现实业务场景(1秒偏小,极易误判)
如果健康检查接口内部逻辑较重:查询数据库、调用下游服务、磁盘IO、频繁GC、Pod CPU打满,接口返回耗时很容易超过1s。
后果:单次直接超时,连续失败达到 failureThreshold,K8s 就会判定容器未就绪,不会接入流量,严重时被重启,属于典型误杀。
四、标准优化方案
1. 调高 TimeoutSeconds,例如改成 3‑5s(下限依旧只能是1)
2. 搭配配套参数一起修改,不要只改超时
◦ periodSeconds:探测间隔,默认10s,不用频繁探测
◦ failureThreshold:连续失败多少次才算异常,默认3,可以适当放大,抵御瞬时抖动
◦ initialDelaySeconds:容器启动缓冲时间,应对启动慢的应用
kubelet 运行在节点,请求目标是 Pod 的容器网络,依旧属于本机范围,没有跨节点网络延迟,但应用自身逻辑耗时不受网络影响,这就是很多业务必须把超时大于1秒的根本原因。