Kubernetes rollouts:基于 SLO 推广,而非 “pods are Ready”

发布: (2026年3月14日 GMT+8 23:57)
3 分钟阅读
原文: Dev.to

Source: Dev.to

Readiness 是局部信号。生产影响是全局的。

Pods 在你的 SLO 窗口已经开始燃烧时仍可能 Ready

失败链

  • Rollout 快速切换流量。
  • 新的 pod 在 HPA 响应之前就已经饱和。
  • HPA 的抓取窗口最少为 15–30 秒
  • P95 延迟上升。
  • 错误率上升。
  • SLI 下降。

一切看起来都很健康,但错误预算正悄悄被消耗。

为什么 “pods are Ready” 会误导你

  • Ready 只表示容器已启动并通过了健康检查。
  • 它并不说明 P95 延迟、错误率,或你的 SLO 切片是否仍然满足。
  • Canary 可能因为指标过于粗糙而卡在 “green”。
  • 没有标签、没有切片 → 爆炸半径保持不可见。

三个解决方案

1. 在第一次 Canary 步骤之前预先扩容

  • 在流量切换 之前 增加副本数。
  • HPA 从安全的基线而不是饱和状态开始追赶。

2. 将步骤间隔匹配到你的 HPA 扩容窗口

  • 默认的稳定窗口为 3 分钟
  • 使用以下命令检查你的设置:
kubectl get hpa -o yaml
  • 在该窗口关闭之前进行提升相当于盲目提升。

3. 基于 SLI 健康状况来控制步骤

  • Argo Rollouts 中接入 AnalysisRun,在提升前检查错误率和 P95 延迟是否在 SLO 范围内。
  • 如果 SLI 仍在恢复中,提升将等待。

规则

仅当 Canary 持有对固定窗口重要的 SLO 切片时才进行提升。
窗口之外的任何情况都会触发自动回滚。

Rollout 速度和自动扩缩容的响应时间是独立调校的。正是这段间隙导致错误预算在任何人报警之前被消耗。

故障链及缓解步骤示意图

深入探讨

你现在的 Rollout 步骤间隔是多少?

0 浏览
Back to Blog

相关文章

阅读更多 »