3. Git仓库初始化:创建Git仓库结构、配置目录规范

Git仓库是Argo CD与Grafana告警规则配置的桥梁。一个规范的目录结构能够确保多环境、多团队的配置管理清晰可控,避免因目录混乱导致的部署错误。本节将按照Kustomize标准布局,构建app/、overlays/、base/三层目录体系,并初始化Grafana告警规则的YAML模板。

3.1 仓库目录结构设计

采用Kustomize原生推荐的“base + overlays”模式,结合Argo CD Application的指向能力,实现一套告警规则模板在不同环境(开发、预发布、生产)下的差异化配置。整体结构如下:

grafana-alerts-repo/
├── base/                          # 通用告警规则基准
│   ├── kustomization.yaml
│   ├── alert-rules.yaml           # 核心告警规则定义
│   └── rule-groups.yaml           # 告警分组与评估间隔
├── overlays/                      # 环境覆盖层
│   ├── dev/
│   │   ├── kustomization.yaml
│   │   ├── alertmanager-config.yaml
│   │   └── receivers.yaml
│   ├── staging/
│   │   ├── kustomization.yaml
│   │   ├── alertmanager-config.yaml
│   │   └── receivers.yaml
│   └── prod/
│       ├── kustomization.yaml
│       ├── alertmanager-config.yaml
│       └── receivers.yaml
├── app/                           # Argo CD Application 定义
│   ├── dev-app.yaml
│   ├── staging-app.yaml
│   └── prod-app.yaml
├── .gitignore
└── README.md
设计原则:
  • base/ 存放所有环境共享的告警规则,不包含任何环境特定变量。
  • overlays/ 每个子目录对应一个环境,通过 Kustomize patch 机制覆盖 receiver、路由、抑制规则等差异项。
  • app/ 存放 Argo CD Application 声明,每个环境一个 YAML 文件,指向对应的 overlay 路径。

3.2 目录规范与命名约定

目录/文件 用途 命名规范
base/ 基准告警规则,不含环境差异 全小写,连字符分隔
overlays/<env>/ 环境特定配置覆盖 环境名:dev / staging / prod
app/<env>-app.yaml Argo CD Application 定义 {env}-app.yaml
alert-rules.yaml PrometheusRule 资源,包含告警规则 全小写,连字符分隔
kustomization.yaml Kustomize 入口文件 固定名称,不可更改
最佳实践: 所有 YAML 文件使用 .yaml 后缀(而非 .yml),保持与 Kubernetes 社区主流规范一致。目录名和文件名中禁止使用下划线,统一使用连字符。

3.3 初始化Grafana告警规则YAML模板

Grafana 告警规则在 Kubernetes 中以 PrometheusRule CRD 形式存在。以下为 base/alert-rules.yaml 的初始化模板,包含三个典型告警场景:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: grafana-alert-rules
  namespace: monitoring
  labels:
    app: grafana
    release: kube-prometheus-stack
spec:
  groups:
  - name: node-alerts
    interval: 30s
    rules:
    - alert: NodeHighCPUUsage
      expr: (100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Node {{ $labels.instance }} CPU usage > 80%"
        description: "CPU usage on {{ $labels.instance }} has been above 80% for more than 5 minutes."

  - name: service-alerts
    interval: 15s
    rules:
    - alert: ServiceDown
      expr: up{job="grafana"} == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "Grafana service is down"
        description: "Grafana service in namespace {{ $labels.namespace }} is unreachable."

  - name: disk-alerts
    interval: 60s
    rules:
    - alert: DiskSpaceLow
      expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
      for: 10m
      labels:
        severity: critical
      annotations:
        summary: "Disk space low on {{ $labels.instance }}"
        description: "Available disk space on {{ $labels.instance }} is below 10%."
注意: 模板中的 namespace 和 release 标签值需根据实际集群中的 kube-prometheus-stack 部署名称调整。如果使用 Grafana Operator 管理告警,CRD 类型可能为 GrafanaRuleGroup,请根据实际 CRD 版本选择。

3.4 目录初始化流程

  1. 创建本地仓库目录:在终端执行 mkdir -p grafana-alerts-repo/{base,overlays/{dev,staging,prod},app}。
  2. 初始化 base 层:将上述 alert-rules.yaml 写入 base/ 目录,并创建 base/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - alert-rules.yaml
  1. 初始化 overlays 层:以 dev 环境为例,创建 overlays/dev/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
  - ../../base
patches:
  - path: receivers.yaml
    target:
      kind: PrometheusRule
      name: grafana-alert-rules
  1. 初始化 app 层:创建 app/dev-app.yaml,作为 Argo CD Application 的入口:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: grafana-alerts-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/grafana-alerts-repo.git
    targetRevision: HEAD
    path: overlays/dev
  destination:
    server: https://kubernetes.default.svc
    namespace: monitoring
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

3.5 仓库结构关系图

下图展示了 Git 仓库中各层之间的引用关系以及 Argo CD 如何通过 Application 指向 overlay 路径:

Git仓库结构 & Argo CD 引用关系 grafana-alerts-repo/ base/ alert-rules.yaml kustomization.yaml overlays/ dev/ staging/ prod/ app/ dev-app.yaml staging-app.yaml prod-app.yaml 引用 指向 Argo CD 集群 namespace: argocd 目标 Kubernetes 集群 namespace: monitoring Argo CD 读取 Application 定义 同步 PrometheusRule

3.6 初始化验证清单

检查项 预期结果 验证命令
目录结构完整性 base/、overlays/、app/ 均存在 ls -R grafana-alerts-repo/
Kustomize 构建 base 层可成功构建 kustomize build base/
overlay 构建 dev overlay 可成功构建 kustomize build overlays/dev/
YAML 语法 无语法错误 yamllint base/alert-rules.yaml
Git 初始化 仓库已初始化并提交 git status 显示 clean
快速验证: 在仓库根目录执行 kustomize build overlays/dev/ | kubectl apply --dry-run=client -f -,如果输出无错误,说明目录结构和 YAML 模板均正确,可以提交到远程仓库。