4. ArgoCD 架构与组件:Application、Project、Repo Server、Controller
ArgoCD 遵循 声明式 GitOps 模式,其核心架构由四个主要组件构成:Application(应用)、Project(项目)、Repo Server(仓库服务)和 Application Controller(应用控制器)。理解这些组件的职责与协作关系,是构建多团队 GitOps 流水线的基础。
4.1 核心组件总览
下表列出了 ArgoCD 四大核心组件及其在 GitOps 工作流中的角色:
| 组件 | 类型 | 核心职责 | 关键特性 |
|---|---|---|---|
| Application | CRD 资源 | 定义目标集群、源仓库、同步策略 | 声明式配置,支持自动/手动同步 |
| Project | CRD 资源 | 多租户隔离、权限控制、资源配额 | 限制目标集群、源仓库、命名空间 |
| Repo Server | 无状态服务 | 拉取 Git 仓库、生成 Kubernetes 清单 | 支持 Helm/Kustomize/Jsonnet 等工具 |
| Application Controller | 有状态控制器 | 持续对比期望状态与实际状态 | 自动修复漂移、回滚、健康检查 |
4.2 组件协作流程
下图展示了 ArgoCD 内部组件之间的数据流与协作关系:
4.3 组件详解
4.3.1 Application(应用 CRD)
Application 是 ArgoCD 的核心资源,它定义了 GitOps 工作流的三个关键要素:
- 源(Source):Git 仓库 URL、路径、分支以及 Helm/Kustomize 参数。
- 目标(Destination):目标 Kubernetes 集群的 API Server 地址和命名空间。
- 同步策略(Sync Policy):自动/手动同步、自动创建命名空间、Prune 资源行为。
多团队场景提示: 每个团队的应用应使用独立的 Application 资源,并通过 spec.destination.namespace 隔离到不同命名空间,避免资源冲突。
4.3.2 Project(项目 CRD)
Project 是 ArgoCD 的多租户隔离单元,用于限制 Application 的行为范围:
| 限制维度 | 配置字段 | 典型值示例 |
|---|---|---|
| 允许的源仓库 | spec.sourceRepos |
https://git.company.com/team-a/* |
| 允许的目标集群 | spec.destinations |
https://k8s-prod.example.com |
| 允许的目标命名空间 | spec.destinations.namespace |
team-a-* |
| 资源配额 | spec.clusterResourceWhitelist |
Deployment, Service, ConfigMap |
4.3.3 Repo Server(仓库服务)
Repo Server 是一个无状态服务,负责将 Git 仓库中的原始配置转换为 Kubernetes 可识别的清单文件。它支持多种配置管理工具:
- 原生 YAML:直接读取目录下的 YAML 文件。
- Helm Chart:渲染 Helm Chart,支持 values 覆盖。
- Kustomize:执行 kustomize build 生成最终清单。
- Jsonnet / Tanka:编译 Jsonnet 模板。
性能优化: Repo Server 会缓存已拉取的仓库内容,减少对 Git 服务器的重复请求。多团队场景下建议配置 reposerver.repository.cache.expiry 参数。
4.3.4 Application Controller(应用控制器)
Application Controller 是 ArgoCD 的“大脑”,它运行一个持续循环:
- 对比(Diff):将 Repo Server 生成的期望清单与 Kubernetes 集群中的实际状态进行对比。
- 同步(Sync):当检测到漂移时,执行同步操作将集群状态修正为期望状态。
- 健康检查(Health Check):监控已部署资源的健康状态(如 Deployment 的 Ready 副本数)。
- 回滚(Rollback):支持通过 Application 历史版本快速回滚到之前的同步状态。
- 一个团队一个 Project:每个团队拥有独立的 Project,限制其只能访问自己的仓库和命名空间。
- Application 与微服务一一对应:每个微服务或组件对应一个 Application,便于独立回滚和审计。
- Repo Server 共享但隔离:所有团队共享 Repo Server 实例,但通过 Project 的
sourceRepos限制仓库访问。 - Controller 全局统一:一个 Application Controller 管理所有团队的 Application,通过 RBAC 实现操作权限隔离。
4.4 组件间通信与安全
下表总结了组件间的通信方式及安全考量:
| 通信路径 | 协议 | 安全机制 |
|---|---|---|
| Repo Server → Git 仓库 | HTTPS / SSH | SSH 密钥 / 令牌认证 |
| Application Controller → Repo Server | gRPC (TLS) | mTLS 双向认证 |
| Application Controller → K8s API | HTTPS | ServiceAccount / Kubeconfig |
| 用户/CI → ArgoCD API | HTTPS | OIDC / RBAC / JWT |
4.5 多团队协作中的组件设计原则
关键实践: 在多团队 GitOps 流水线中,应遵循以下组件设计原则:
理解 ArgoCD 的这四个核心组件及其协作关系,是后续章节中配置多团队流水线、实现精细化权限控制以及执行回滚操作的基础。下一节将深入讲解如何通过 Application 和 Project 实现多租户隔离。