2. GitOps 核心概念回顾:声明式配置、同步机制、ArgoCD/Flux 工作流与状态管理

在深入 Prometheus 策略与 GitOps 同步窗口的排障之前,必须统一团队对 GitOps 核心概念的理解。本章聚焦于声明式配置模型、同步机制、两大主流工具(ArgoCD 与 Flux)的工作流差异,以及状态管理的核心原则。这些概念是后续分析策略命中率与误报率的理论基础。

2.1 声明式配置模型

GitOps 的基石是声明式配置:用户定义系统的“期望状态”(Desired State),而非编写达到该状态的步骤。所有配置(Deployment、Service、PrometheusRule、ServiceMonitor 等)均以 YAML/JSON 清单形式存储在 Git 仓库中。

特性 声明式(Declarative) 命令式(Imperative)
用户操作 提交 YAML 到 Git 执行 kubectl run / edit
状态来源 Git 仓库(单一事实源) 集群运行时状态
可审计性 天然完整变更历史 依赖操作日志
回滚方式 Git revert + 自动同步 手动执行旧命令
漂移检测 内置(持续对比期望 vs 实际) 无自动检测
排障关联: Prometheus 策略(如 alerting_rules.yml)必须作为声明式配置纳入 Git。若策略文件未通过 Git 同步,集群中运行的规则与 Git 中的规则不一致,将直接导致“策略命中率”统计失真。

2.2 同步机制与状态漂移

同步机制是 GitOps 控制器的核心循环:对比 → 修正 → 再对比。控制器持续将 Git 中的期望状态与集群实际状态进行比较,发现差异(即“状态漂移”)后自动或手动执行修正操作。

GitOps 同步循环:期望状态 vs 实际状态 Git 仓库 期望状态(YAML) GitOps 控制器 对比 & 修正 Kubernetes 集群 实际状态 拉取 应用/修正 状态反馈(漂移检测) 状态漂移示例 Git 中 replicas: 5 → 集群中 replicas: 3(因 HPA 或手动修改) 控制器检测到差异后,自动将 replicas 修正回 5
排障要点: 同步窗口(Sync Window)是控制器执行同步操作的时间段。若 Prometheus 策略在同步窗口外被手动修改,控制器会在下一个窗口内将其覆盖回 Git 版本,导致“策略命中率”出现跳变。排障时需核对策略变更时间与同步窗口的对应关系。

2.3 ArgoCD 工作流与状态管理

ArgoCD 采用 Pull 模型:ArgoCD 组件运行在集群内,主动从 Git 仓库拉取配置并同步。其核心工作流包含三个关键阶段:

  1. 注册仓库与 Application:定义 Application CRD,指定 Git 仓库路径、目标集群、同步策略(自动/手动)。
  2. 持续对比(Diff):ArgoCD 每隔 --status-poll-interval(默认 3 分钟)对比 Git 与集群状态,生成差异报告。
  3. 同步与健康检查:执行 kubectl apply 或 sync 操作,随后检查资源健康状态(Healthy/Degraded/Progressing)。
ArgoCD 状态字段 含义 排障关注点
Sync Status Synced / OutOfSync / Unknown OutOfSync 表示策略未生效
Health Status Healthy / Degraded / Progressing Degraded 可能因 Prometheus 规则语法错误
Operation State Running / Succeeded / Failed / Error Failed 需查看 sync 日志中的具体错误

2.4 Flux 工作流与状态管理

Flux v2 同样基于 Pull 模型,但架构更模块化,通过多个控制器协作完成同步:

  • Source Controller:管理 GitRepository / Bucket / HelmRepository 等源,定期拉取并缓存。
  • Kustomize Controller:执行 kustomize build 并应用资源到集群。
  • Helm Controller:管理 Helm Release 的生命周期。
  • Notification Controller:处理事件通知与告警。
Flux v2 多控制器协作架构 Git 仓库 Source Controller Kustomize Controller K8s 集群 Flux 同步流程(以 PrometheusRule 为例) 1. Source Controller 每 1 分钟拉取 Git 仓库,缓存最新 commit 2. Kustomize Controller 读取缓存,生成最终 YAML 并 apply 3. 若 PrometheusRule 语法错误,apply 失败,状态标记为 Failed
关键差异: ArgoCD 将 Application 视为一个整体单元进行同步;Flux 则通过多个控制器解耦“源获取”与“资源应用”。在排障 Prometheus 策略时,Flux 环境下需分别检查 Source Controller 的 gitrepository 状态与 Kustomize Controller 的 kustomization 状态,定位问题阶段。

2.5 状态管理核心原则

无论使用 ArgoCD 还是 Flux,状态管理都遵循以下原则,这些原则直接影响 Prometheus 策略的可靠性与可排障性:

原则 说明 对 Prom 策略的影响
单一事实源 Git 仓库是唯一被信任的期望状态来源 所有告警规则、记录规则必须从 Git 同步,禁止直接编辑 ConfigMap
不可变基础设施 避免手动修改运行中资源,通过 Git 变更驱动更新 策略变更必须走 PR 流程,确保审计与回滚能力
持续协调 控制器无限循环对比与修正,直到期望=实际 若策略被意外覆盖,控制器会在下一周期恢复,导致命中率波动
可观测性 同步状态、漂移事件、操作日志需暴露为指标 ArgoCD 提供 argocd_app_info,Flux 提供 gotk_reconcile_* 指标
排障前置检查清单:
✅ 确认 PrometheusRule 所在的 Application / Kustomization 同步状态为 Synced 且 Healthy。
✅ 检查 Git 仓库中策略文件的 commit SHA 是否与集群中运行的规则版本一致。
✅ 确认同步窗口配置未阻止策略变更的生效时间。
✅ 查看控制器日志中是否有 apply failed 或 diff detected 事件。