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) 自动同步 + 自愈
实践要点: 建议按告警类别(基础设施、应用性能、安全事件)拆分多个 Application,而非将所有告警规则塞入一个巨型 Application。这样可独立控制同步策略、回滚粒度更细。

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 自动同步
安全警告: 切勿将生产告警规则仓库与开发环境仓库混用同一个 Project。一旦开发人员误操作修改了 sourceRepos 白名单,可能导致非预期告警配置推送到生产集群。

4.3 Sync Policy(同步策略)

Sync Policy 决定了 Argo CD 如何将 Git 中的期望状态应用到目标集群。对于 Grafana 告警规则这种需要高可靠性的配置,策略选择直接影响告警的生效时机与稳定性。

  • 手动同步(Manual): 需要人工点击 Sync 按钮或调用 API 触发。适合变更审批严格的场景。
  • 自动同步(Automatic): Git 仓库有变更时自动触发同步。适合告警规则频繁迭代的团队。
  • 自愈(Self-Heal): 检测到集群状态与 Git 不一致时自动回滚。防止手动修改告警规则后被覆盖。
  • 修剪资源(Prune): 同步时删除 Git 中已移除的资源。确保告警规则清理干净。
推荐组合: 生产环境 Grafana 告警规则建议使用 自动同步 + 自愈 + 修剪 策略。这样 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
波次设计原则: 波次 0 部署 Grafana Operator 与数据源;波次 1 部署告警规则;波次 2 部署告警通知渠道(如 Slack、PagerDuty)。确保依赖链完整。

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
关键提醒: 如果未配置自定义健康检查,Argo CD 会将 GrafanaRuleGroup 资源标记为 Unknown 状态。此时即使告警规则已生效,Argo CD 界面仍显示非健康,影响自动化流水线的判断。务必为所有 Grafana CRD 资源注册健康检查逻辑。

4.6 核心概念关系图

下图展示了 Application、Project、Sync Policy、Sync Wave、Health Check 之间的协作关系,以及它们如何共同管理 Grafana 告警规则配置。

Argo CD 核心概念关系图(Grafana 告警场景) Project(项目)— 权限边界 Application(应用) source: git/grafana-rules destination: monitoring ns Sync Policy(同步策略) 自动同步 + 自愈 修剪资源 Sync Wave(波次) Wave 0: 数据源 Wave 1: 告警规则 Health Check(健康检查) 自定义 LUA 脚本检查 GrafanaRuleGroup 是否被 API 接受 状态:Healthy / Progressing / Degraded 说明: Project 约束 Application 的仓库与目标范围;Application 引用 Sync Policy 决定同步行为; Sync Wave 控制资源部署顺序;Health Check 最终判定 Application 是否健康。

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 接受
学习路径建议: 先掌握 Application 与 Project 的声明式定义,再配置 Sync Policy 与 Sync Wave,最后完善 Health Check。这五个概念层层递进,缺一不可。