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 一切正常)¶
- Image Updater 检测 → 推送 PR
- ArgoCD 触发 Rollout
- Analysis 全部通过
- 自动 promote(或人工 approve)
- 老 pod 下线
- 通知 Slack
死亡路径(release 失败)¶
- Image Updater 检测 → 推送 PR
- ArgoCD 触发 Rollout
- Analysis 失败(如 P99 > 1.5s)
- Rollout 自动 rollback
- 通知 PagerDuty + Slack
- 工程师查 Grafana
- 修复 → 重试 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
- 立即生效
参考¶
- https://argoproj.github.io/argo-rollouts/
- Canary Deployments Done Right
- Google SRE: Release Engineering