📌 项目地址argoproj/argo-cd | ⭐ 23,399 颗星 | 🔧 Go | 📜 未标注

什么是 Argo CD

Argo CD 是 Kubernetes 上用于持续交付的声明式 GitOps 工具。它把 Git 仓库当作环境唯一事实来源,集群状态由 Git 仓库中的清单定义。任何对集群的手动修改都会被检测为“漂移”,并被自动或手动同步回 Git。

为什么选它

两个核心原则: 应用定义、配置和环境应该是声明式的且版本受控;应用部署和生命周期管理应该自动化、可审计、易懂。这些原则不是空话——如果你曾因为某人直接 kubectl edit 修改了生产环境,导致下一个版本部署时被覆盖,你就能理解为什么要把一切写进 Git。

核心概念和典型流程

Argo CD 有四个基本组件: Application、Project、Repository、Cluster。一个 Application 指向一个 Git 仓库中的路径,指定目标集群和命名空间,然后 Argo CD 持续确保该路径下的清单在集群中生效。

快速上手(引自官方文档)
官方文档提供了 getting_started 指南,包含一个 guestbook 示例。流程大致是:
1. 用 kubectl 部署 Argo CD 自身(Manifest 或 Helm)。
2. 通过 argocd CLI 登录(初始密码从 Secret 中获取)。
3. 注册一个 Git 仓库(可以公开)。
4. 创建一个 Application,指定仓库 URL、目标集群和同步策略。
5. 观察同步状态或手动触发 Sync。

关键特性

自愈(Self-Healing)
默认情况下,Argo CD 会定期(默认 3 分钟)对比 Git 和集群状态,发现差异后标记为 OutOfSync。你可以开启自动同步,它会自动纠正任何手动修改。这一点和 Flux 类似,但 Argo CD 的自动同步默认关闭,需要显式启用。

多集群管理
一个 Argo CD 实例可以管理任意多个远端集群。注册集群通过 argocd cluster add 命令完成。这对于有几十个集群的团队是刚需。

扩展生态
Argo CD 是 Argo 项目家族的一部分。你可以用 Argo Rollouts 做蓝绿或金丝雀发布,用 Argo Workflows 做 CI pipeline,用 Argo Events 触发事件。官方博客和演示视频(如 README 中列出的)展示了这种组合。

和 Flux 的区别

两者都是 CNCF 毕业的 GitOps 工具,但设计哲学有差异:

  • 同步触发方式: Flux 使用“期望状态”模型,通过自定义资源(如 Kustomization)监控 Git 仓库的变更,一旦有变化就自动同步。Argo CD 默认采用轮询(可选 webhook),并且同步策略更灵活(手动、自动、定时)。
  • 资源模型: Argo CD 的 Application 是一个 CRD,包含丰富的同步状态、健康检查和回滚历史。Flux 的 Kustomization 更轻量,依赖 Kustomize 或 HelmRelease。
  • Web UI: Argo CD 的 UI 更成熟,提供了应用拓扑图、同步状态可视化、资源树等。Flux 无原生 UI,需配合其他工具(如 Weave GitOps)。
  • 安全性: Argo CD 需要管理多个 Agent(repo-server, application-controller),而 Flux 每个控制器职责单一,最小权限原则更严格。

选择哪个,取决于你对 UI 的依赖程度、是否要用 Argo 家族其他产品。

使用中的坑与建议

1. CI/CD 分离
Argo CD 不提供 CI 能力。你需要自行搭建 CI(如 GitHub Actions)来构建镜像、运行测试,然后将生成的 Kubernetes 清单推送到 Git 仓库。Argo CD 然后同步这些清单。很多人误解 Argo CD 是“全自动”,它只负责交付阶段。

2. 安全性必须重视
初始 admin 密码是自动生成的,存在 Secret 中,务必在首次登录后修改。建议启用 TLS、集成 SSO(OIDC/LDAP)并配置 RBAC。多集群场景下,控制平面拥有所有注册集群的管理权限,一旦被攻破后果严重。官方文档有安全说明

3. 升级要谨慎
版本迭代较快,跨版本升级需查看升级指南。例如从 v2.4 到 v2.7 可能涉及 API 变更。建议在非生产环境先试用新版本,并备份 Argo CD 自身的配置。

4. 大型集群下的性能
如果有上千个 Application 或频繁变更,轮询可能造成一定负载。可以调整同步间隔、使用 webhook 代替轮询、限制 Application 数量。官方文档有性能调优建议

社区与资源

Argo CD 有活跃的社区: GitHub Discussions 用于问答,#argo-cd Slack 频道 用于聊天,每周四有贡献者办公会议,每月第一个周三有用户社区会议。README 中还列出了多个演示视频和博客,涵盖了与 Crossplane、KubeVela 的结合。

总结

如果你需要在 Kubernetes 上实现 GitOps,Argo CD 是目前最成熟、文档最全的方案之一。但它不是银弹——它解决的是“交付一致性”问题,不是 CI、不是基础设施编排、不是运行时监控。你仍需要配套工具。搞清楚这一点,才能用好它。

这篇文章对你有帮助吗?

发表回复