4. Argo CD 核心概念:Application、Project、Sync Policy、Sync Wave、Health Check
在将 Grafana 告警规则配置纳入 Argo CD 管理之前,必须透彻理解 Argo CD 的五大核心概念。这些概念构成了声明式 GitOps 的骨架,直接决定了告警配置的部署方式、权限边界、同步策略、依赖顺序以及健康状态判定。本章将逐一拆解,并结合 Grafana 告警场景给出具体映射。
4.1 Application(应用)
Application 是 Argo CD 中管理的最小部署单元,它定义了一个 Kubernetes 资源集合的来源(Git 仓库路径)与目标(目标集群/命名空间)。对于 Grafana 告警规则而言,一个 Application 通常对应一组告警规则的 YAML 清单。
| 属性 | 说明 | Grafana 告警场景示例 |
|---|---|---|
| source.repoURL | Git 仓库地址 | https://github.com/team-alerts/grafana-rules.git |
| source.path | 仓库内子路径 | ./production/cpu-alerts |
| destination.server | 目标集群 API Server | https://kubernetes.default.svc |
| destination.namespace | 目标命名空间 | monitoring |
| syncPolicy | 同步策略(见 4.3) | 自动同步 + 自愈 |
4.2 Project(项目)
Project 是 Application 的逻辑分组与权限边界。它控制哪些 Git 仓库、目标集群、目标命名空间可以被该组内的 Application 使用。在团队协作管理 Grafana 告警时,Project 是隔离环境与角色的关键工具。
| Project 约束项 | 作用 | 告警管理典型配置 |
|---|---|---|
| sourceRepos | 允许的 Git 仓库白名单 | 仅允许 https://github.com/team-alerts/* |
| destinations | 允许的目标集群+命名空间 | 仅允许 https://k8s-prod:6443 下的 monitoring 命名空间 |
| roles | RBAC 角色绑定 | 开发团队只读,SRE 团队可同步 |
| syncWindows | 同步时间窗口 | 生产环境仅允许 09:00-18:00 自动同步 |
4.3 Sync Policy(同步策略)
Sync Policy 决定了 Argo CD 如何将 Git 中的期望状态应用到目标集群。对于 Grafana 告警规则这种需要高可靠性的配置,策略选择直接影响告警的生效时机与稳定性。
- 手动同步(Manual): 需要人工点击 Sync 按钮或调用 API 触发。适合变更审批严格的场景。
- 自动同步(Automatic): Git 仓库有变更时自动触发同步。适合告警规则频繁迭代的团队。
- 自愈(Self-Heal): 检测到集群状态与 Git 不一致时自动回滚。防止手动修改告警规则后被覆盖。
- 修剪资源(Prune): 同步时删除 Git 中已移除的资源。确保告警规则清理干净。
自动同步 + 自愈 + 修剪 策略。这样 Git 仓库始终是唯一真实来源,任何手动修改都会被自动纠正。
4.4 Sync Wave(同步波次)
Sync Wave 定义了 Application 内资源的部署顺序。通过为资源添加 argocd.argoproj.io/sync-wave 注解,可以控制告警规则依赖的底层组件(如 Grafana 实例、数据源)先就绪,再部署告警规则本身。
# 数据源配置 - 波次 0
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-datasource
annotations:
argocd.argoproj.io/sync-wave: "0"
data:
datasource.yaml: |
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
---
# 告警规则 - 波次 1
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaRuleGroup
metadata:
name: cpu-alerts
annotations:
argocd.argoproj.io/sync-wave: "1"
spec:
rules:
- alert: HighCPUUsage
expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1
for: 5m
4.5 Health Check(健康检查)
Health Check 是 Argo CD 判断 Application 是否处于健康状态的核心机制。对于 Grafana 告警规则这类自定义资源,Argo CD 内置的健康检查可能无法直接识别,需要配置自定义健康检查脚本或使用 LUA 表达式。
| 资源类型 | 默认健康检查逻辑 | Grafana 告警场景适配 |
|---|---|---|
| Deployment | 可用副本数 ≥ 期望副本数 | Grafana 实例本身适用 |
| ConfigMap | 始终健康(无状态) | 数据源配置适用 |
| GrafanaRuleGroup(CRD) | 无内置检查 | 需自定义 LUA 脚本检查告警规则是否被 Grafana API 接受 |
# 自定义健康检查 LUA 脚本示例(配置在 argocd-cm ConfigMap 中)
resource.customizations.health.grafana.integreatly.org_GrafanaRuleGroup: |
hs = {}
if obj.status ~= nil and obj.status.conditions ~= nil then
for i, condition in ipairs(obj.status.conditions) do
if condition.type == "Accepted" and condition.status == "True" then
hs.status = "Healthy"
hs.message = "Rule group accepted by Grafana API"
return hs
end
end
end
hs.status = "Progressing"
hs.message = "Waiting for Grafana API acceptance"
return hs
Unknown 状态。此时即使告警规则已生效,Argo CD 界面仍显示非健康,影响自动化流水线的判断。务必为所有 Grafana CRD 资源注册健康检查逻辑。
4.6 核心概念关系图
下图展示了 Application、Project、Sync Policy、Sync Wave、Health Check 之间的协作关系,以及它们如何共同管理 Grafana 告警规则配置。
4.7 概念对比速查表
以下表格从作用范围、配置位置、告警场景三个维度对比五个核心概念,便于快速查阅。
| 概念 | 作用范围 | 配置位置 | Grafana 告警场景关键作用 |
|---|---|---|---|
| Application | 单个部署单元 | Application CRD YAML | 定义告警规则来源与目标命名空间 |
| Project | Application 分组 | AppProject CRD YAML | 隔离生产/测试告警仓库与集群 |
| Sync Policy | Application 级别 | Application 的 spec.syncPolicy | 控制告警规则自动生效与自愈 |
| Sync Wave | 资源级别(注解) | 资源 metadata.annotations | 确保数据源先于告警规则部署 |
| Health Check | 资源类型级别 | argocd-cm ConfigMap | 验证告警规则是否被 Grafana API 接受 |