Kubernetes:startupProbe超periodSeconds时的触发逻辑问询
Kubernetes StartupProbe 执行行为解析
问题1:运行中的StartupProbe是否会触发新实例?为何仅触发2次?
- 核心结论:同一容器的同一探针,Kubelet是串行执行的——当前探针实例未完成(无论成功、失败或超时)时,不会触发新的实例。必须等上一次探针执行结束,才会按照
periodSeconds的间隔执行下一次。 - 你的场景中仅触发2次的原因:
- 第一次触发:
initialDelaySeconds=20后,Kubelet首次执行startupProbe,此时Apache可能还未完全就绪,curl请求失败,探针返回失败。 - 第二次触发:等待
periodSeconds=10后,Kubelet执行第二次startupProbe,此时Apache已就绪,curl成功,脚本进入sleep 60流程。由于timeoutSeconds=80大于脚本总耗时(约60秒),探针最终成功退出。 - 停止触发:startupProbe的设计逻辑是只要成功一次,就会停止执行,转而启用livenessProbe和readinessProbe。因此第二次探针成功后,不会有后续触发,最终仅执行2次。
- 第一次触发:
问题2:修改timeoutSeconds=5后,/tmp/post_action_success出现12个"Success"的原理
当timeoutSeconds=5远小于脚本中sleep 60的时长时,会触发以下连锁行为:
- 探针超时失败:每次startupProbe执行时,脚本进入
sleep 60后仅5秒,就会被Kubelet判定为超时,Kubelet会终止探针进程并标记此次探针失败。 - 重复触发探针:由于探针失败,Kubelet会按
periodSeconds=10的间隔重复执行startupProbe。同时因为sleep 60从未完成,/tmp/post_action_success文件从未被创建,每次探针都会再次进入sleep 60分支,再次超时失败。 - 容器重启循环:当探针失败次数达到
failureThreshold=20时,Kubelet会重启容器。容器重启后,/tmp目录被清空,/tmp/post_action_success消失,新一轮startupProbe流程重新启动。 - 12个"Success"的来源:每次容器重启后,若某次探针进程未被Kubelet及时终止(或出现极端情况让脚本完成了
sleep 60),就会写入一个"Success"到/tmp/post_action_success。你观察到的12个"Success",对应容器发生了12次重启,且每次重启后都有一次探针成功完成了完整的脚本流程。
内容的提问来源于stack exchange,提问作者Sujeet Padhi
相关产品推荐
相关产品推荐

