argoproj/argo-rollouts
GitHub: argoproj/argo-rollouts
Kubernetes 渐进式交付控制器,提供蓝绿部署、金丝雀发布和基于指标的自动化发布控制。
Stars: 3430 | Forks: 1110
# Argo Rollouts - Kubernetes 的渐进式交付
[](https://codecov.io/gh/argoproj/argo-rollouts)
[](https://argoproj.github.io/community/join-slack)
[](https://bestpractices.coreinfrastructure.org/projects/3834)
[](https://api.securityscorecards.dev/projects/github.com/argoproj/argo-rollouts)
[](https://artifacthub.io/packages/helm/argo/argo-rollouts)
## 什么是 Argo Rollouts?
Argo Rollouts 是一个 Kubernetes 控制器和一组 CRD,为 Kubernetes 提供了高级部署能力,例如蓝绿部署、金丝雀部署、金丝雀分析、实验以及渐进式交付功能。
Argo Rollouts(可选)与 ingress 控制器和服务网格集成,利用其流量整形能力在更新期间逐步将流量转移到新版本。此外,Rollouts 可以查询并解析来自各种提供商的指标,以验证关键 KPI,并在更新期间推动自动升级或回滚。
[](https://youtu.be/hIL0E2gLkf8)
## 快速开始
```
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
```
请遵循完整的[入门指南](docs/getting-started.md)来演练如何创建并更新一个 rollout 对象。
## 为什么选择 Argo Rollouts?
Kubernetes Deployments 提供了 `RollingUpdate` 策略,在更新期间提供了一套基本的安全保证(就绪探针)。然而,滚动更新策略面临许多限制:
* 对 rollout 速度的控制很少
* 无法控制流向新版本的流量
* 就绪探针不适合进行更深层次、压力或一次性检查
* 无法查询外部指标来验证更新
* 可以暂停进度,但无法自动中止并回滚更新
出于这些原因,在大规模高容量的生产环境中,滚动更新通常被认为是一种风险过大的更新程序,因为它无法控制爆炸半径,可能过于激进地进行 rollout,并且在失败时不提供自动回滚。
## 功能特性
* 蓝绿更新策略
* 金丝雀更新策略
* 细粒度、加权流量转移
* 自动回滚和升级
* 人工判断
* 可自定义的指标查询和业务 KPI 分析
* Ingress 控制器集成:NGINX, ALB, Apache APISIX
* 服务网格集成:Istio, Linkerd, SMI
* 指标提供商集成:Prometheus, Wavefront, Kayenta, Web, Kubernetes Jobs, Datadog, New Relic, InfluxDB
## 支持的流量整形集成
| 流量整形集成 | SetWeight | SetWeightExperiments | SetMirror | SetHeader | 作为插件实现 |
|-----------------------------------|------------------------------|-----------------------------|----------------------------|----------------------------|-----------------------------|
| ALB Ingress Controller | :white_check_mark: (稳定) | :white_check_mark: (稳定) | :x: | :white_check_mark: (Alpha) | |
| Ambassador | :white_check_mark: (稳定) | :x: | :x: | :x: | |
| Apache APISIX Ingress Controller | :white_check_mark: (Alpha) | :x: | :x: | :white_check_mark: (Alpha) | |
| Istio | :white_check_mark: (稳定) | :white_check_mark: (稳定) | :white_check_mark: (Alpha) | :white_check_mark: (Alpha) | |
| Nginx Ingress Controller | :white_check_mark: (稳定) | :x: | :x: | :x: | |
| SMI | :white_check_mark: (稳定) | :white_check_mark: (稳定) | :x: | :x: | |
| Traefik | :white_check_mark: (稳定) | :x: | :x: | :x: | |
| Contour | :white_check_mark: (Beta) | :x: | :x: | :x: | :heavy_check_mark: |
| Gateway API | :white_check_mark: (Alpha) | :x: | :x: | :x: | :heavy_check_mark: |
:white_check_mark: = 支持
:x: = 不支持
:heavy_check_mark: = 是
## 文档
欲了解更多关于 Argo Rollouts 的信息,请访问[完整文档](https://argo-rollouts.readthedocs.io/en/stable/)。
## 谁在使用 Argo Rollouts?
[Argo Rollouts 官方用户列表](https://github.com/argoproj/argo-rollouts/blob/master/USERS.md)
## 社区博客和演讲
* [Awesome-Argo:精选的 Argo 相关优秀项目和资源列表](https://github.com/terrytangyuan/awesome-argo)
* [一切皆自动化 - 如何结合 Argo Events、Workflows & Pipelines、CD 和 Rollouts](https://youtu.be/XNXJtxkUKeY)
* [Argo Rollouts - 让 Kubernetes 中的金丝雀部署变得简单](https://youtu.be/84Ky0aPbHvY)
* [Intuit 如何进行金丝雀和蓝绿部署](https://www.youtube.com/watch?v=yeVkTTO9nOA)
* [升级你的 CD:解锁 Kubernetes 上的渐进式交付](https://www.youtube.com/watch?v=Nv0PPwbIEkY)
* [使用 Argo Rollouts 和冒烟测试最大程度减少部署失败](https://codefresh.io/continuous-deployment/minimize-failed-deployments-argo-rollouts-smoke-tests/)
* [利用 Argo Rollouts 和 Prometheus 指标自动从失败部署中恢复](https://codefresh.io/continuous-deployment/recover-automatically-from-failed-deployments/)
* [使用 Argo Rollouts 进行 Kubernetes 蓝绿部署](https://www.youtube.com/watch?v=krDxDz4V4Tg)
* [使用 Argo Rollouts 进行 Kubernetes 金丝雀部署](https://www.youtube.com/watch?v=fviYWA2mcF8)
* [使用 Argo CD 和 Argo Rollouts 金丝雀发布的 GitOps 实践](https://www.youtube.com/watch?v=35Qimb_AZ8U)
* [使用 Keptn 和 Argo Rollouts 进行多阶段交付](https://www.youtube.com/watch?v=w-E8FzTbN3g&t=1s)
* [在 Argo Rollouts 之上使用内部 Kubernetes 金丝雀控制器进行渐进式代码发布](https://doordash.engineering/2021/04/14/gradual-code-releases-using-an-in-house-kubernetes-canary-controller/)
* [Argo-Rollouts 的可扩展性如何:云运营商的视角](https://www.youtube.com/watch?v=rCEhxJ2NSTI)
* [使用 Argo Rollouts 最小化 Kubernetes 中的影响](https://medium.com/@arielsimhon/minimize-impact-in-kubernetes-using-argo-rollouts-992fb9519969)
* [在 Red Hat OpenShift 上使用 GitOps 进行渐进式应用交付](https://www.youtube.com/watch?v=DfeL7cdTx4c)
* [使用 Argo Rollouts 对 Kubernetes Config Maps 进行渐进式交付](https://codefresh.io/blog/progressive-delivery-for-kubernetes-config-maps-using-argo-rollouts/)
* [使用 Argo Rollouts 进行多服务渐进式交付](https://codefresh.io/blog/multi-service-progressive-delivery-with-argo-rollouts/)
* [使用 Argo Rollouts 对有状态服务进行渐进式交付](https://codefresh.io/blog/progressive-delivery-for-stateful-services-using-argo-rollouts/)
标签:3D图, Argo Rollouts, EVTX分析, GitOps, Helm, Ingress, Istio, NGINX Ingress, 回滚, 子域名突变, 实验测试, 应用发布, 持续交付, 控制器, 日志审计, 服务网格, 流量管理, 渐进式交付, 自动化运维, 自定义请求头, 蓝绿部署, 金丝雀发布