4. Argo CD 核心概念:Application、Project、Repository、Cluster、Sync Policy 详解

Argo CD 的架构围绕五个核心概念构建,理解它们是掌握 GitOps 实践的基础。本章将逐一剖析 Application、Project、Repository、Cluster 和 Sync Policy,并展示它们之间的协作关系。

核心关系速记: Repository 存放期望状态 → Application 定义“从哪个 Repo 的哪个路径,同步到哪个 Cluster 的哪个 Namespace” → Project 为 Application 提供安全边界和资源配额 → Sync Policy 控制同步的触发与行为。

4.1 核心概念关系总览

下图展示了五个核心概念在 Argo CD 中的逻辑关系与数据流:

Argo CD 核心概念关系图 Argo CD 核心概念关系图 Repository Git 仓库(期望状态) Cluster 目标 Kubernetes 集群 Application 核心编排单元 (源 + 目标 + 同步策略) Project 逻辑边界 source destination Sync Policy 自动/手动 + 修剪/自愈 配置引用 说明: 1. Application 是核心,它引用 Repository 作为源,Cluster 作为目标,并受 Project 约束。 2. Sync Policy 定义在 Application 中,控制同步行为(自动/手动、修剪、自愈)。

4.2 Application(应用)

Application 是 Argo CD 中最重要的资源对象,它代表一个完整的部署单元。一个 Application 定义了三个关键要素:

  • Source(源):指定 Kubernetes 清单所在的 Git 仓库路径、Helm Chart 或 Kustomize 目录。
  • Destination(目标):指定要部署到的目标集群和命名空间。
  • Sync Policy(同步策略):定义如何将源状态同步到目标集群。
Application 示例 YAML:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

4.3 Project(项目)

Project 是 Argo CD 的逻辑分组和权限隔离单元,用于管理多个 Application 的访问边界。主要功能包括:

功能维度 说明 典型配置
源仓库限制 限制 Project 内 Application 可以引用的 Git 仓库 sourceRepos: 白名单列表
目标集群限制 限制可以部署到的目标集群和命名空间 destinations: 白名单列表
角色与权限 为不同团队或用户分配 RBAC 角色 roles: 自定义角色绑定
资源配额 限制 Project 内所有 Application 的资源使用上限 namespaceResourceQuota: 配额定义
最佳实践: 建议为每个团队或业务线创建独立的 Project,并在 Project 级别严格限制可访问的仓库和集群,避免跨团队资源误操作。

4.4 Repository(仓库)

Repository 是 Argo CD 连接 Git 仓库的凭证与配置对象。Argo CD 支持多种仓库类型:

  • Git 仓库:最常用,支持 HTTPS 和 SSH 认证。
  • Helm 仓库:直接引用 Helm Chart 仓库。
  • 本地路径:仅用于测试场景。

仓库注册后,Argo CD 会定期轮询(默认 3 分钟)或通过 Webhook 监听变更,确保 Application 能获取最新的期望状态。

4.5 Cluster(集群)

Cluster 代表 Argo CD 可以部署应用的目标 Kubernetes 集群。集群管理要点:

集群类型 连接方式 典型用途
内嵌集群 https://kubernetes.default.svc Argo CD 所在集群
外部集群 Kubeconfig 或 Bearer 开发、测试、生产集群
多集群联邦 通过 Cluster API 或手动添加 跨区域、跨环境部署
安全提示: 添加外部集群时,建议使用专用的 Service Account ,并限制其权限为最小必要范围(如只读 + 部署权限)。

4.6 Sync Policy(同步策略)

Sync Policy 定义了 Argo CD 如何将 Git 中的期望状态应用到目标集群。核心配置项如下:

策略选项 默认值 说明
automated.sync false 启用自动同步,检测到 Git 变更后自动触发同步
automated.prune false 自动删除集群中不再存在于 Git 中的资源
automated.selfHeal false 自动修复集群中与 Git 状态不一致的手动变更
syncOptions [] 附加同步选项,如 CreateNamespace=true、PruneLast=true
retry 无 失败重试策略(次数、间隔、回退因子)

同步策略的三种常见模式:

  • 手动同步:完全由人工触发,适合生产环境严格审批流程。
  • 自动同步(无修剪):自动应用变更,但保留已删除资源,适合迁移过渡期。
  • 自动同步(修剪 + 自愈):完全自动化,集群状态始终与 Git 一致,适合成熟 GitOps 实践。
同步策略对比表:
模式 自动应用 自动删除 自动修复 推荐场景
手动 ❌ ❌ ❌ 生产环境、审批流程
自动(无修剪) ✅ ❌ ❌ 开发环境、迁移过渡
自动(完整) ✅ ✅ ✅ CI/CD 流水线、测试环境

4.7 概念协作流程

下图展示了从代码提交到集群部署的完整协作流程:

Argo CD 核心概念协作流程 核心概念协作流程 1. Git Push 开发者提交代码 2. Repo 检测 Webhook / 轮询 3. 评估差异 Application 对比 4. 同步执行 Sync Policy 触发 5. 部署到 Cluster 目标集群资源更新 Project 安全边界

4.8 实践建议

生产环境推荐配置:
  • 为每个环境(dev/staging/prod)创建独立的 Project。
  • 生产环境 Application 使用手动同步 + 审批流程。
  • 开发环境启用自动同步(修剪 + 自愈)以加速迭代。
  • 所有仓库使用 SSH 密钥或 认证,避免明文凭证。
  • 定期审计 Cluster 列表,移除不再使用的目标集群。