跳转至

Argo Rollouts · 渐进式发布

Argo Rollouts 是 Kubernetes 的 deployment 增强版,支持: - 蓝绿(Blue/Green) - 金丝雀(Canary) - 流量管理(nginx/istio/smi) - 自动分析(Prometheus 指标 → 自动 promote / rollback)

我们的策略

服务 策略 理由
API Blue/Green(30s 观察) API 需要立刻切换 + 即时回滚
Worker Canary(20% → 50% → 100%) Worker 启动慢,需要谨慎灰度
Beat Manual 单实例,必须确认
Webhook Blue/Green Stateless,立刻切
Landing Manual 极少改动,人工 review

流程

1. CI 构建

Git push → CI → Build → Push image (sha256) to ECR
                              ↓
                    ArgoCD Image Updater 检测
                              ↓
                    写回 git repo(image.tag update)
                              ↓
                    PR → 自动合并
                              ↓
                    ArgoCD 检测变更 → 触发 Rollout
                              ↓
                    Analysis Templates 执行
                          ↓             ↓
                       全部通过       有指标不达标
                          ↓             ↓
                       Promote        Rollback

2. Analysis 模板

我们在 analysis-templates.yaml 定义 6 个模板: - success-rate:HTTP 2xx ≥ 95% - latency-p99:P99 < 1.5s - error-rate:5xx < 1% - smoke-test:调 /health 验证 - db-conn:连接数 < 80 - signup-success-rate:业务指标 ≥ 70%

3. 手动操作

# 查看 rollout 状态
kubectl argo rollouts get rollout api -n exitvideo-prod

# 手动 promote
kubectl argo rollouts promote api -n exitvideo-prod

# 手动 abort(回滚)
kubectl argo rollouts abort api -n exitvideo-prod

# 重试
kubectl argo rollouts retry api -n exitvideo-prod

4. Dashboard

kubectl port-forward -n argo-rollouts svc/argo-rollouts-dashboard 31000:31000
# 浏览 http://localhost:31000

验证清单

[ ] Argo Rollouts pod Running
[ ] AnalysisTemplate 已创建
[ ] Rollout 已替换 Deployment
[ ] Rollout 切换蓝绿 → 自动 promote
[ ] Rollout 切换金丝雀 → 分阶段 promote
[ ] Analysis 失败 → 自动 rollback
[ ] Dashboard 可访问

黄金路径 / 死亡路径

黄金路径(release 一切正常)

  1. Image Updater 检测 → 推送 PR
  2. ArgoCD 触发 Rollout
  3. Analysis 全部通过
  4. 自动 promote(或人工 approve)
  5. 老 pod 下线
  6. 通知 Slack

死亡路径(release 失败)

  1. Image Updater 检测 → 推送 PR
  2. ArgoCD 触发 Rollout
  3. Analysis 失败(如 P99 > 1.5s)
  4. Rollout 自动 rollback
  5. 通知 PagerDuty + Slack
  6. 工程师查 Grafana
  7. 修复 → 重试 rollout

Runbook

情形 1:金丝 Canary 卡住

# 查看 reasons
kubectl argo rollouts get rollout worker -n exitvideo-prod

# 看 events
kubectl describe rollout worker -n exitvideo-prod

# 强制推进或终止
kubectl argo rollouts promote worker --full -n exitvideo-prod
kubectl argo rollouts abort worker -n exitvideo-prod

情形 2:Analysis 一直不通过 - 检查 Prometheus 是否可达 - 调 metric query 看实时数据 - 重试 rollout

情形 3:新增分析模板 - 编辑 analysis-templates.yaml - kubectl apply -f analysis-templates.yaml - 立即生效

参考