Flux CD 与 Argo CD:如何选择 GitOps 工具
比较架构、UI、Helm、密钥、租户和镜像自动化,以选出合适的工具。
Flux 和 Argo CD 是 Kubernetes 上两个主要的 GitOps 控制器。两者都是 CNCF 毕业项目,都已可用于生产,并且都实现了同样的四条 GitOps 原则:声明式、有版本记录、自动拉取、持续调谐。差异在于设计,而哪个更合适,取决于你的团队多于取决于功能。本指南对两者做比较,帮助你选择,或决定两个都运行。
两种设计理念
Argo CD 以应用为中心,作为一个集成的系统发布:一个 API 服务器、一个渲染清单的 repo 服务器、一个应用控制器,以及一个 Web UI。你定义一个将 Git 路径映射到集群和命名空间的 Application,剩下的由 Argo CD 完成。
Flux 是一个由小型、单一用途控制器(source、kustomize、helm、notification,以及可选的镜像自动化)组成的工具包,它们通过自定义资源通信。source 和部署是分开的对象,因此一个 GitRepository 可以为多个 Kustomization 提供数据。它没有内置 UI,CLI 和 kubectl 是主要的交互方式。
一条有用的经验法则:Argo CD 适合想要看和点的团队,Flux 适合想要组合和编写脚本的团队。
并排比较
| 方面 | Argo CD | Flux |
|---|---|---|
| 架构 | 集成的组件 | 独立、可组合的控制器 |
| Web UI | 内置,带实时资源树和一键回滚 | 无内置;CLI、Grafana 或社区仪表板 |
| 安装 | 对一个清单执行 kubectl apply | flux bootstrap,同时将 Flux 的清单提交到 Git |
| 自我管理 | 可以管理自身,需要你自行设置 | Bootstrap 默认从 Git 管理自身 |
| 同步控制 | 默认手动同步;自动化(auto-sync、prune、self-heal)需主动开启 | 默认自动;通过 Git、标签或 suspend 为生产环境把关 |
| 多集群 | 一等公民:一个实例注册并管理多个集群 | 默认每个集群一套 Flux 安装;可通过 kubeconfig 支持远程集群 |
| Helm | 将 chart 渲染为模板并应用清单 | helm-controller 运行真正的 Helm 生命周期,带测试和自动回滚 |
| OCI 制品 | 支持作为 source | 清单和 Helm chart 的一等 source |
| 镜像更新 | 独立的附加项目 | 内置的可选控制器,将标签提交到 Git |
| 密钥 | 外部插件或 operator(Vault、External Secrets、通过插件使用 SOPS) | SOPS 解密内置于 kustomize-controller,另有其他方式 |
| 多租户 | Argo CD 中的项目和 RBAC 策略 | 命名空间和 service account 模拟,由 Kubernetes RBAC 强制执行 |
| SSO | 内置(通过 Dex 或直接使用 OIDC、SAML) | 不需要;访问即 Kubernetes RBAC |
| 通知 | 带模板的通知引擎 | 带 Alert、Provider 和 Receiver 的 notification-controller |
何时适合 Argo CD
- 开发者希望无需
kubectl就能看到同步状态、资源图和日志。 - 希望由一个中央实例管理多个集群,并且新用户上手很快。
- 你大量依赖 SSO,以及面向产品团队的自助服务门户。
- 你的团队偏好对某些环境设置显式的手动同步步骤。
何时适合 Flux
- 你希望自动更新镜像并提交到 Git。
- 密钥应以加密形式存放在 Git 中,并且额外工具要尽量少。
- 你大量使用 Helm,并希望获得真正的 release 生命周期处理,包括自动回滚。
- 你正在构建内部平台,偏好可组合的控制器和 Kubernetes 原生的租户 RBAC。
- 你希望每个集群都自成一体,凭据永远不离开该集群。
规模
两者都能扩展到大规模。Argo CD 为超大的单实例提供应用控制器分片和 Redis 集群。Flux 的控制器可独立扩展,每个集群运行自己的一套,这避免了中央瓶颈。公布的数据因工作负载而异,所以请对你自己的环境做基准测试,而不要轻信一个醒目的数字。
你可以两个都运行
它们并非敌人。常见的分工是:用 Argo CD 做应用交付,因为开发者能从 UI 中受益;用 Flux 管理集群附加组件、基础设施和密钥。只是千万不要让两者管理同样的资源,否则它们会为此争斗。
选择
- 开发者第一天就需要 UI 吗?从 Argo CD 开始。
- 你需要镜像自动化、内置的密钥解密,或严格的每集群自治吗?从 Flux 开始。
- 仍然不确定?用本资料库中的”第一个应用”指南,在一个可随意丢弃的 kind 集群上,各花一个下午试一试。
在两者之间迁移是可能的,因为它们都从 Git 读取纯 YAML、Helm 和 Kustomize,但请有计划地进行:这不只是重命名文件。参考细节请见 Flux 文档和 Argo CD 文档。
热门指南
-
推送与拉取:Flux 如何向 Kubernetes 交付 为什么基于拉取、由 Git 驱动的交付会改变你部署、保障安全和恢复集群的方式。 -
使用 GitRepository 与 Kustomization 部署你的第一个应用 通过 Kustomization 资源将 Flux 指向 Git 中的清单,并观察同步。 -
控制同步行为:间隔、Prune、漂移修正与回滚 决定 Flux 何时应用变更、删除什么、如何暂停它,以及如何撤销一次有问题的部署。 -
使用 Flux 镜像自动化实现镜像更新自动化 让 Flux 检测新的容器镜像标签,并将其提交回 Git。 -
使用 Flux 配置多集群 从一个仓库管理多个集群,包含共享基础设施和每个集群各自的差异。