Flux CD Flux CD

Flux CD 与 Argo CD:如何选择 GitOps 工具

比较架构、UI、Helm、密钥、租户和镜像自动化,以选出合适的工具。

10 min 初级

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 CDFlux
架构集成的组件独立、可组合的控制器
Web UI内置,带实时资源树和一键回滚无内置;CLI、Grafana 或社区仪表板
安装对一个清单执行 kubectl applyflux 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 管理集群附加组件、基础设施和密钥。只是千万不要让两者管理同样的资源,否则它们会为此争斗。

选择

  1. 开发者第一天就需要 UI 吗?从 Argo CD 开始。
  2. 你需要镜像自动化、内置的密钥解密,或严格的每集群自治吗?从 Flux 开始。
  3. 仍然不确定?用本资料库中的”第一个应用”指南,在一个可随意丢弃的 kind 集群上,各花一个下午试一试。

在两者之间迁移是可能的,因为它们都从 Git 读取纯 YAML、Helm 和 Kustomize,但请有计划地进行:这不只是重命名文件。参考细节请见 Flux 文档和 Argo CD 文档。

热门指南