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 目录初始化流程
- 创建本地仓库目录:在终端执行
mkdir -p grafana-alerts-repo/{base,overlays/{dev,staging,prod},app}。 - 初始化 base 层:将上述
alert-rules.yaml写入base/目录,并创建base/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- alert-rules.yaml
- 初始化 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
- 初始化 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 路径:
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 模板均正确,可以提交到远程仓库。