You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需编写HTTP探针代码,如何为启动耗时15分钟的应用配置合适的readiness、liveness探针?

问题根因分析
  1. 探针端口不匹配
    从事件输出可以看到,系统同时存在对8080、8081两个端口的探测失败记录,而你提供的配置仅配置了8080端口的探测,说明存在残留的旧探针配置、或Deployment滚动更新未完全生效,系统对未监听的8081端口发起探测时直接返回失败,累计达到阈值后触发Pod重启。
  2. 探测方式与应用运行模式不兼容
    你的应用存在5分钟的空闲运行周期,若空闲期间应用临时关闭8080端口的监听,TCP探针会直接探测失败,累计达到failureThreshold阈值后触发系统判定Pod不健康。
  3. 现有探针参数逻辑不合理
    你将periodSeconds设置为2000秒,单次探测间隔超过33分钟,无法及时校验应用状态,偶发的端口不可达会直接累计失败次数,进而触发重启。
最优配置方案

你不想编写HTTP探针代码的前提下,可使用exec类型探针结合系统命令完成探测,同时搭配K8s 1.16及以上版本支持的startupProbe专门处理长启动场景,避免探针误杀启动中的应用,具体配置参考如下:

startupProbe:
  exec:
    command:
    - /bin/sh
    - -c
    # 检测应用是否完成启动,可替换为你应用启动完成的标识判断逻辑
    - ss -tulpn | grep -q :8080
  # 总允许启动时长为 10秒*90次=900秒=15分钟,完全覆盖你的应用启动周期
  initialDelaySeconds: 60
  periodSeconds: 10
  failureThreshold: 90
  timeoutSeconds: 3

livenessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    # 检测应用最近10分钟是否有日志输出,适配你2-3分钟打印日志+5分钟空闲的运行循环
    - [ $(($(date +%s) - $(stat -c %Z /proc/1/fd/1))) -lt 600 ]
  initialDelaySeconds: 0
  periodSeconds: 30
  failureThreshold: 5
  successThreshold: 1
  timeoutSeconds: 5

readinessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    # 检测端口是否监听,确认服务可对外承接流量
    - ss -tulpn | grep -q :8080
  initialDelaySeconds: 0
  periodSeconds: 10
  failureThreshold: 3
  successThreshold: 1
  timeoutSeconds: 2

配置上线前需先执行kubectl get deployment [你的部署名] -o yaml 确认所有探针配置中不存在对8081端口的探测规则,清理残留配置后再更新。

内容的提问来源于stack exchange,提问作者bosari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:57:02