首页/云/Kubernetes 速查/minReadySeconds 与 progressDeadlineSeconds 调优

minReadySeconds 与 progressDeadlineSeconds 调优

minReadySeconds 让 Pod 就绪后再观察一段时间才算可用(过滤秒挂的新版本);progressDeadlineSeconds 定义发布停滞多久判失败。

Kubernetes 速查云更新于 2026-10-13

两个时间参数各管什么

最小就绪时长让副本在通过就绪检查后再观察一段时间才被计为可用,用来过滤那种起来几秒就崩的新版本。发布进度上限则定义发布停滞多久后判定为失败,触发滚动卡住的状态。前者控制发布推进的快慢,后者控制多久认定发布出了问题。

基本信息

适用平台Kubernetes 1.20+,部署对象字段
最小就绪时长默认零,就绪即算可用
进度上限默认 600 秒
判定结果超过上限后发布被标记为进度停滞
前提依赖需要就绪探针才能判断副本是否可用

典型使用场景

  • 新版本存在启动后立即崩溃的隐患,需要观察窗口拦截
  • 应用冷启动时间较长,默认上限过于紧张会误报失败
  • 发布流水线需要知道何时该判定失败并告警
  • 灰度验证阶段希望拖延推出节奏,缩小问题影响面
  • 防止发布长期卡住却无人处理

配置示例

配置示例
spec:
  minReadySeconds: 10             # 就绪后再观察 10 秒才算可用
  progressDeadlineSeconds: 600    # 600 秒无进展判定发布卡住
  template:
    spec:
      containers:
        - name: web
          image: registry.example.com/web:1.27.0
          readinessProbe:
            httpGet:
              path: /healthz
              port: 8080

查看与等待

查看与等待
kubectl get deploy web -o jsonpath='{.spec.minReadySeconds} {.spec.progressDeadlineSeconds}'
kubectl rollout status deploy/web --timeout=15m      # 等待发布结果
kubectl get deploy web -o jsonpath='{.status.conditions}'   # 是否出现进度停滞
kubectl describe deploy web | grep -i progress

参数读法

参数作用取值建议
最小就绪时长就绪后继续观察的时段按最快暴露缺陷的时间设置,常见十几秒到一分钟
进度上限无进展多久算失败大于最慢一次启动耗时,留出余量
就绪探针判定副本是否可用的依据没有它,观察窗口与进度判断都失去意义
发布条件发布过程的最终判定出现进度停滞说明需要人工介入
观察窗口过大反而拖慢发布,尤其在需要快速回滚的场景里,等待时间会明显增加。它的目标是拦截那种秒级崩溃的版本,而不是做长时间稳定性验证。
进度上限小于应用正常冷启动时间时会误报发布失败。先用真实环境量出最慢启动耗时,再据此设置,否则会频繁收到无效告警。

易错点

  • 进度上限小于冷启动耗时:发布被误判卡住,运维反复重启反而延长中断
  • 观察窗口设得过大:发布速度明显下降,紧急回滚也被拖慢
  • 没有就绪探针:副本一启动就被当作可用,观察窗口形同虚设
  • 忽略发布条件字段:发布早已停滞却没有任何人处理,最后从业务侧才发现

数据来源与参考

  • Kubernetes 官方文档 · Deployment(minReadySeconds / progressDeadlineSeconds)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌