2、Argo CD 架构解析:核心组件、工作流程与架构图

在生产环境中,Argo CD 以 Kubernetes Operator 模式运行,由三个核心组件构成:API Server、Repo Server 和 Application Controller。理解这三者的职责与协作关系,是掌握接口调用与故障排查的基础。

2.1 核心组件一览

组件 Pod 名称前缀 核心职责 对外暴露端口
API Server argocd-server-xxx REST/gRPC 接口、UI、RBAC、Session 管理 443 (HTTPS)
Repo Server argocd-repo-server-xxx Git/Helm 仓库克隆、清单生成、缓存 8081 (gRPC)
Application Controller argocd-application-controller-xxx 状态对比、差异计算、自动/手动同步 8082 (metrics)
接口调用视角: 自助目录的接口调用主要与 API Server 交互(REST API),但理解 Repo Server 和 Application Controller 的内部逻辑,能帮助你准确判断同步失败、清单生成错误等问题的根因。

2.2 核心组件详解

2.2.1 API Server

  • 入口网关: 所有用户、CI/CD 系统、CLI 的请求统一经过 API Server。
  • 认证与授权: 支持 SSO(OIDC、Dex)、Local 用户、JWT ;RBAC 策略在此执行。
  • 接口类型: REST API(JSON)和 gRPC(性能敏感场景)。
  • 无状态设计: 可水平扩展,所有状态存储在 Kubernetes CRD 中。

2.2.2 Repo Server

  • 清单生成引擎: 从 Git 仓库拉取源码,执行 helm template、kustomize build 或纯 YAML 渲染。
  • 缓存机制: 维护本地 Git 缓存和生成清单的缓存,避免重复克隆。
  • 安全隔离: 通过 argocd-repo-server 的独立进程执行清单生成,不直接暴露给用户。
  • SSH/HTTPS 密钥管理: 存储仓库访问凭证,支持 known_hosts 校验。

2.2.3 Application Controller

  • 状态循环: 持续监控 Application CRD 的 spec 与集群实际资源状态。
  • 差异计算: 对比 desired state(来自 Repo Server)与 live state(来自目标集群 API)。
  • 同步执行: 调用 Kubernetes API 执行 apply、delete、prune 操作。
  • 健康评估: 根据内置或自定义健康检查规则判断资源状态(Healthy / Degraded / Progressing)。

2.3 工作流程(同步请求生命周期)

以下流程描述一次典型的 手动同步 请求从发起至完成的完整路径:

  1. 用户/CI 发起同步请求 → 调用 API Server 的 POST /api/v1/applications/{name}/sync。
  2. API Server 校验权限 → 验证 JWT 与 RBAC 策略,通过后将请求写入 Application CRD 的 status.operationState。
  3. Application Controller 监听到变更 → 从 CRD 读取同步请求参数。
  4. Controller 请求 Repo Server → 调用 gRPC 接口 GenerateManifest,传入目标 revision 和路径。
  5. Repo Server 生成清单 → 拉取 Git 数据,执行模板渲染,返回最终 Kubernetes 资源列表。
  6. Controller 执行差异对比 → 将清单与集群当前状态对比,生成 diff 结果。
  7. Controller 调用 Kubernetes API → 按顺序执行 apply、prune 操作。
  8. Controller 更新状态 → 将同步结果写回 Application CRD 的 status 字段。
  9. API Server 返回响应 → 用户或 CI 系统通过轮询或 Webhook 获取最终状态。
关键路径: 步骤 4 和 5 是性能瓶颈点。如果 Repo Server 缓存未命中或 Git 仓库过大,同步延迟会显著增加。自助目录的接口调用应尽量复用 Repo Server 的缓存机制(如指定 revision 而非 HEAD)。

2.4 架构图:组件交互与数据流

Argo CD 核心架构与同步数据流 用户 / CI 系统 API Server Repo Server Application Controller Git / Helm 仓库 目标 Kubernetes 集群 REST API 写入 CRD status GenerateManifest git clone / fetch kubectl apply / delete 说明: 实线箭头表示同步请求的主数据流;虚线箭头表示组件间的内部调用(gRPC / CRD 监听)。

2.5 组件间通信协议

调用方 被调用方 协议 端口 用途
用户 / CLI / CI API Server HTTPS (REST) 443 创建、同步、删除 Application
API Server Kubernetes API HTTPS 6443 CRUD Application CRD
Application Controller Repo Server gRPC (TLS) 8081 请求清单生成
Application Controller 目标集群 API HTTPS 6443 同步资源、状态对比
Repo Server Git / Helm 仓库 SSH / HTTPS 22 / 443 拉取源码
安全注意: Repo Server 与 Git 仓库之间的 SSH 密钥、API Server 与目标集群的 kubeconfig 凭证,是攻击面最大的两个环节。自助目录的接口调用应避免在请求中明文传递凭证,优先使用 Argo CD 预配置的 repository.credentials 和 cluster 资源。

2.6 架构设计要点总结

  • 无状态 + 可水平扩展: API Server 和 Repo Server 支持多副本,Application Controller 通过 sharding 机制分摊负载。
  • CRD 驱动: 所有 Application、AppProject、Repository 等资源均以 CRD 形式存储,API Server 和 Controller 通过 Informer 监听变更。
  • 清单生成与同步分离: Repo Server 只负责生成清单,不接触集群;Application Controller 只负责同步,不接触 Git。职责清晰,便于独立扩缩容。
  • 缓存层级: Repo Server 维护 Git 裸仓库缓存 + 生成清单缓存;API Server 维护 CRD 缓存。合理利用缓存可大幅降低接口调用延迟。