2. Argo CD 基础回顾:架构、核心组件及工作流程

在构建告警规则同步工程之前,必须深入理解 Argo CD 自身的运行机制。Argo CD 采用 控制循环(Reconciliation Loop) 模式,由三个核心组件协同工作,确保 Git 仓库中的声明式配置与目标集群的实际状态始终保持一致。本章将拆解其架构、组件职责及完整工作流程,为后续告警规则的注入与同步奠定基础。

2.1 整体架构概览

Argo CD 遵循 Kubernetes 原生控制器模式,所有组件均以 Pod 形式运行在集群中。其架构可抽象为三层:用户接入层(API Server)、配置源层(Repo Server)和 状态执行层(Application Controller)。下图展示了核心组件之间的通信关系与数据流向。

Argo CD 核心架构与组件关系图 Argo CD 核心架构与组件关系 API Server Repo Server Application Controller Git 仓库 目标 Kubernetes 集群 获取清单 下发应用定义 拉取/缓存 同步/监控 核心设计原则 所有组件无状态(除缓存) 通过 Kubernetes CRD 扩展 控制循环驱动状态收敛
架构要点:API Server 是唯一面向用户的组件,Repo Server 和 Application Controller 不直接暴露端口。三者通过内部 gRPC 和 HTTP 通信,形成松耦合架构,便于独立扩缩容。

2.2 核心组件详解

每个组件承担明确的职责,理解其内部机制是定制告警规则的前提。下表从功能、数据存储、关键接口三个维度进行对比。

组件 核心职责 数据存储 关键接口
API Server 认证授权、REST API 网关、Web UI 服务、CLI 后端 Kubernetes CRD(Application、AppProject 等) /api/v1、/swagger、gRPC(与 Repo Server)
Repo Server 拉取 Git 仓库、生成 Helm/Kustomize/Jsonnet 清单、缓存 本地文件系统缓存(/tmp/repo) gRPC(GenerateManifest、GetRevisionMetadata)
Application Controller 控制循环、状态比较、同步执行、健康评估 Kubernetes CRD + 本地缓存 Kubernetes API(watch/list/patch)

2.2.1 API Server

作为 Argo CD 的 统一入口,API Server 处理所有外部请求。它负责:

  • 认证与授权:集成 OIDC、LDAP、GitHub OAuth 等,基于 RBAC 控制资源访问。
  • CRUD 操作:管理 Application、AppProject、ApplicationSet 等自定义资源。
  • 代理转发:将清单生成请求转发给 Repo Server,将同步指令转发给 Application Controller。
  • Web UI 与 CLI:提供图形化界面和 argocd 命令行工具的后端服务。

2.2.2 Repo Server

Repo Server 是 配置源处理引擎。它不直接与 Kubernetes API 交互,而是专注于:

  • 仓库操作:支持 Git、Helm Chart 仓库、Bucket 存储。
  • 清单渲染:执行 helm template、kustomize build、jsonnet eval 等命令,将模板化配置转为纯 Kubernetes 清单。
  • 缓存机制:缓存已拉取的仓库内容和渲染结果,减少 Git 请求频率,提升大规模集群下的响应速度。
告警关联:Repo Server 的缓存命中率、清单渲染耗时直接影响 Application Controller 的同步周期。当告警规则涉及大量 Application 时,Repo Server 的 CPU 和内存使用率是需要重点监控的指标。

2.2.3 Application Controller

这是 Argo CD 的 执行核心,运行着最重要的控制循环。其工作步骤可分解为:

  1. 轮询 Application 资源:通过 Kubernetes Informer 监听 Application CRD 的变化。
  2. 获取期望状态:调用 Repo Server 的 GenerateManifest 接口,获取当前 Git 版本对应的 Kubernetes 清单。
  3. 比较状态:将期望清单与集群中实际运行的资源进行 Diff(差异比较)。
  4. 执行同步:若存在差异,根据同步策略(自动/手动)执行 kubectl apply 或 kubectl delete。
  5. 健康评估:根据预定义的健康检查规则(Liveness/Readiness Probe、自定义 Hook)判断应用是否健康。

2.3 工作流程:从 Git 提交到集群同步

一个完整的 Argo CD 工作流包含 用户操作、组件协作 和 状态收敛 三个阶段。下图以自动同步模式为例,展示端到端的执行路径。

Argo CD 端到端同步工作流 Argo CD 端到端同步工作流(自动同步模式) ① 开发者 Git Push ② Repo Server 拉取 ③ 渲染清单 ④ Controller 比较 ⑤ 发现差异 ⑥ 执行同步 ⑦ 健康检查 ⑧ 状态更新 关键时间点 步骤 ③→④:清单渲染结果通过 gRPC 传输给 Controller 步骤 ④→⑤:Controller 每 3 分钟(默认)执行一次控制循环 步骤 ⑥:自动同步默认有 120 秒冷却时间,防止频繁同步

2.4 关键概念:Application 与 AppProject

Argo CD 通过两个核心 CRD 来组织资源:

  • Application:代表一个逻辑应用的完整定义,包含源仓库地址、目标集群、同步策略、健康检查规则等。
  • AppProject:用于对 Application 进行分组和权限隔离,限制可访问的 Git 仓库、目标集群和资源类型。
告警规则设计提示:在后续章节中,我们将利用 Application 的 metadata.labels 和 spec.destination 字段作为告警规则的筛选维度。例如,通过 label team: platform 区分不同团队的告警阈值。

2.5 同步策略与状态模型

Argo CD 支持两种同步模式,其行为差异直接影响告警规则的触发时机:

同步模式 触发方式 适用场景 告警关注点
自动同步 控制循环检测到差异后自动执行 开发环境、CI/CD 流水线 同步失败、同步卡死、频繁回滚
手动同步 用户通过 UI/CLI 触发 生产环境、变更审批流程 长时间未同步、待同步堆积

Application 的状态模型包含三个核心字段:

  • status.sync.status:Synced(已同步)、OutOfSync(不同步)、Unknown(未知)。
  • status.health.status:Healthy(健康)、Degraded(降级)、Progressing(进行中)、Missing(缺失)。
  • status.operationState.phase:Succeeded(成功)、Failed(失败)、Running(运行中)。
告警规则映射:本课程的核心目标之一,就是将上述状态字段转化为 Prometheus 指标,并基于指标阈值生成告警。例如:argocd_app_info{sync_status="OutOfSync", health_status="Degraded"} > 0 触发 P0 级告警。

2.6 本章小结