2. Argo CD 基础回顾:架构、核心组件及工作流程
在构建告警规则同步工程之前,必须深入理解 Argo CD 自身的运行机制。Argo CD 采用 控制循环(Reconciliation Loop) 模式,由三个核心组件协同工作,确保 Git 仓库中的声明式配置与目标集群的实际状态始终保持一致。本章将拆解其架构、组件职责及完整工作流程,为后续告警规则的注入与同步奠定基础。
2.1 整体架构概览
Argo CD 遵循 Kubernetes 原生控制器模式,所有组件均以 Pod 形式运行在集群中。其架构可抽象为三层:用户接入层(API Server)、配置源层(Repo Server)和 状态执行层(Application Controller)。下图展示了核心组件之间的通信关系与数据流向。
架构要点: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 的 执行核心,运行着最重要的控制循环。其工作步骤可分解为:
- 轮询 Application 资源:通过 Kubernetes Informer 监听 Application CRD 的变化。
- 获取期望状态:调用 Repo Server 的
GenerateManifest接口,获取当前 Git 版本对应的 Kubernetes 清单。 - 比较状态:将期望清单与集群中实际运行的资源进行 Diff(差异比较)。
- 执行同步:若存在差异,根据同步策略(自动/手动)执行
kubectl apply或kubectl delete。 - 健康评估:根据预定义的健康检查规则(Liveness/Readiness Probe、自定义 Hook)判断应用是否健康。
2.3 工作流程:从 Git 提交到集群同步
一个完整的 Argo CD 工作流包含 用户操作、组件协作 和 状态收敛 三个阶段。下图以自动同步模式为例,展示端到端的执行路径。
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 级告警。