3. Argo CD 架构回顾:Application、ApplicationSet、Project、Repo Server、Controller 组件
在深入节点池巡检场景之前,必须重新梳理 Argo CD 的核心架构组件。节点池配置变更事件驱动巡检本质上是 Application 状态与集群节点实际状态之间的差异驱动循环。理解每个组件在差异检测、同步触发、权限隔离中的角色,是设计巡检策略的基础。
3.1 核心组件与职责矩阵
Argo CD 遵循 声明式 GitOps 控制器模式,由以下五个关键组件构成闭环。下表列出各组件的核心职责、数据流向及在巡检场景中的关键作用:
| 组件 | 核心职责 | 巡检场景关键作用 | 数据流向 |
|---|---|---|---|
| Application | 定义目标集群、命名空间、源仓库路径及同步策略 | 巡检的原子单元;每个 Application 代表一个待巡检的部署单元 | Application → Controller → 目标集群 |
| ApplicationSet | 基于生成器(Generator)批量生成 Application 模板 | 节点池维度巡检入口;通过集群生成器自动映射节点池与 Application | ApplicationSet → 生成器 → Application 列表 |
| Project | 资源配额、目标集群白名单、源仓库白名单、RBAC 隔离 | 巡检权限边界;限制巡检 Application 只能访问指定节点池集群 | Project → Application → 目标集群 |
| Repo Server | 拉取 Git 仓库、生成清单(Manifest)、缓存 | 巡检期望状态来源;生成节点池配置的期望清单 | Git 仓库 → Repo Server → Controller |
| Controller | 对比期望状态与实际状态、触发同步、维护 Application 状态 | 巡检执行引擎;驱动差异检测与事件上报 | Controller ↔ Repo Server ↔ 目标集群 |
3.2 组件交互流程与差异检测链路
下图展示了 Argo CD 核心组件在节点池配置巡检场景下的完整交互流程。从 ApplicationSet 生成巡检 Application 开始,到 Controller 对比期望状态与实际状态,最终输出差异结果。
3.3 组件深度解析
3.3.1 Application:巡检的原子单元
Application 是 Argo CD 中最核心的 CRD(Custom Resource Definition)。在节点池巡检场景中,每个 Application 对应一个节点池的配置巡检任务。其关键字段包括:
- spec.source:指向 Git 仓库中节点池配置文件的路径。
- spec.destination:目标集群的 API Server 地址与命名空间。
- spec.syncPolicy:巡检同步策略(自动/手动、自愈、Prune)。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: node-pool-巡检-池1
spec:
project: node-pool-inspection
source:
repoURL: https://git.company.com/infra/node-pool-config.git
targetRevision: main
path: pools/池1/
destination:
server: https://cluster-池1-api.example.com
namespace: kube-system
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- Validate=false
3.3.2 ApplicationSet:节点池维度的自动化生成器
ApplicationSet 通过 生成器(Generator) 动态创建 Application。在巡检架构中,最常用的是 Cluster Generator 和 Git Generator:
- Cluster Generator:遍历 Argo CD 中注册的所有集群,为每个集群生成一个 Application。适用于节点池集群自动发现。
- Git Generator:根据 Git 仓库中的目录或文件列表生成 Application。适用于节点池配置按目录组织。
type=node-pool 标签的集群,避免巡检非节点池集群。
3.3.3 Project:巡检权限与资源隔离边界
Project 是 Argo CD 中的租户隔离单元。在节点池巡检场景中,Project 承担以下职责:
| Project 配置项 | 巡检场景配置示例 | 作用 |
|---|---|---|
sourceRepos |
https://git.company.com/infra/node-pool-config.git |
限制巡检只从指定仓库拉取配置 |
destinations |
namespaces: ['kube-system'] |
限制巡检 Application 只能部署到 kube-system 命名空间 |
clusterResourceWhitelist |
Group: '*', Kind: 'Node' |
允许巡检 Application 管理 Node 资源 |
roles |
name: 'inspection-reader' |
为巡检机器人账号分配只读权限 |
3.3.4 Repo Server:期望状态的生成与缓存
Repo Server 负责从 Git 仓库拉取代码,并使用 配置管理工具(如 Helm、Kustomize、Jsonnet) 生成最终的 Kubernetes 清单。在巡检场景中,Repo Server 的缓存机制至关重要:
- 缓存命中:当 Git 仓库无新提交时,Repo Server 直接返回缓存清单,减少 Git 拉取频率。
- 缓存失效:当 Git Webhook 触发或手动刷新时,Repo Server 重新生成清单。
- 巡检优化:设置
timeout.reconciliation为 30s,确保巡检差异检测的实时性。
3.3.5 Controller:差异检测引擎
Controller 是 Argo CD 的“大脑”,负责以下核心循环:
- 状态对比:每
status.sync.status周期(默认 3 分钟),Controller 对比 Repo Server 生成的期望清单与集群中的实际资源。 - 差异计算:使用 three-way merge 算法计算期望状态、实际状态与上次同步状态的差异。
- 同步触发:当检测到差异且 syncPolicy 为自动时,Controller 调用
argocd app sync执行同步。 - 状态上报:将 Application 的 Sync Status 和 Health Status 写入 Application CRD 的 status 字段。
reconciliation timeout 和 sync timeout 直接影响巡检延迟。在节点池场景中,建议将 timeout.reconciliation 设置为 30s,timeout.sync 设置为 60s,以快速响应节点配置变更。
3.4 组件间数据流与事件驱动关系
下图展示了节点池配置变更事件如何通过 Argo CD 组件链传递,最终触发巡检 Application 的同步:
3.5 组件配置清单与巡检适配建议
下表总结了各组件在节点池巡检场景中的关键配置项及推荐值:
| 组件 | 关键配置项 | 巡检推荐值 | 说明 |
|---|---|---|---|
| ApplicationSet | generators[].clusters.selector.matchLabels |
type: node-pool |
只巡检带有 node-pool 标签的集群 |
| Application | spec.syncPolicy.automated.prune |
true |
自动清理节点池中多余的配置资源 |
| Project | spec.destinations[].namespaces |
['kube-system'] |
限制巡检范围到系统命名空间 |
| Repo Server | timeout.reconciliation |
30s |
缩短清单刷新周期,提升巡检实时性 |
| Controller | status.sync.status 轮询间隔 |
30s |
加快差异检测频率,适配节点池快速变更 |