1. 课程导论:什么是配置漂移、为什么需要审计、PromOperator 在配置漂移中的角色
1.1 什么是配置漂移
配置漂移(Configuration Drift)是指系统或基础设施的实际运行状态与预期基准配置之间逐渐产生的、非预期的偏差。在云原生环境中,这种漂移通常表现为:
- 手动修复:运维人员通过
kubectl edit或kubectl patch临时修改资源,但未同步到 Git 仓库。 - 热修复脚本:应急时直接修改 Deployment 或 DaemonSet,导致与 Helm Chart 或 Kustomize 基线不一致。
- 版本滞后:集群中部分 Prometheus 实例的 Operator 版本、CRD 版本或镜像标签与预期不符。
- 配置残留:旧版 ServiceMonitor 或 PodMonitor 未被清理,导致指标采集重复或冲突。
核心观点:配置漂移是“预期状态”与“实际状态”之间的熵增过程。在 Prometheus Operator 体系中,这种熵增会直接导致告警规则失效、指标丢失、资源争用甚至集群不稳定。
1.2 为什么需要审计
审计配置漂移并非为了“追责”,而是为了建立可观测、可追溯、可恢复的运维基线。具体原因包括:
| 维度 | 风险描述 | 审计价值 |
|---|---|---|
| 可靠性 | 漂移导致 Prometheus 采集目标丢失或重复,影响核心指标可用性 | 快速定位漂移点,恢复预期配置 |
| 安全性 | 非授权修改 Secret、RBAC 或网络策略,可能暴露敏感端点 | 发现未审计的配置变更,阻断安全漏洞 |
| 合规性 | 监管要求(如 SOC2、PCI-DSS)需证明配置变更受控 | 提供不可篡改的配置变更日志 |
| 可恢复性 | 漂移积累后,灾难恢复时无法还原真实运行配置 | 确保备份与恢复的一致性 |
| 成本 | 冗余的 ServiceMonitor 或未清理的旧资源浪费计算与存储 | 识别并清理无效配置,优化资源 |
实践建议:审计不是一次性活动,应作为 CI/CD 流水线的一部分,每次对 Prometheus Operator 相关资源(Prometheus、ServiceMonitor、PodMonitor、Alertmanager、PrometheusRule)的变更都触发自动漂移检测。
1.3 PromOperator 在配置漂移中的角色
Prometheus Operator(简称 PromOperator)通过 CRD(Custom Resource Definition)将 Prometheus 及其周边组件的配置声明式地管理起来。它在配置漂移审计中扮演三个关键角色:
- 配置的声明式入口:所有 Prometheus 实例、采集规则、告警规则都通过
Prometheus、ServiceMonitor、PodMonitor、PrometheusRule等 CRD 定义。这些 CRD 是审计的“黄金基准”。 - 状态的实际执行者:Operator 控制器持续调和(Reconcile)CRD 状态与集群实际状态。当调和循环检测到漂移时,Operator 会尝试自动修复,但并非所有漂移都能被自动覆盖。
- 漂移的暴露面:Operator 通过 Status 字段、Events 事件以及 Metrics 指标暴露调和结果。这些数据是审计系统判断是否存在漂移的直接证据。
1.4 漂移发生的典型场景
在 PromOperator 日常运维中,以下场景最容易引发配置漂移:
- 场景 A:临时扩缩容 — 运维人员直接修改 Prometheus StatefulSet 的副本数,但未更新
PrometheusCR 的replicas字段。Operator 下次调和时会将其重置,导致服务中断。 - 场景 B:热加载规则 — 通过
POST /-/reload向 Prometheus 实例注入临时告警规则,但未写入PrometheusRuleCR。重启后规则丢失。 - 场景 C:手动打标签 — 为 ServiceMonitor 关联的 Service 手动添加
prometheus.io/scrape: "true"注解,导致 Operator 生成的采集配置与预期不符。 - 场景 D:版本回退 — 回滚 Operator 版本时,未同步回滚 CRD 版本,导致新 CRD 字段被旧 Operator 忽略,配置静默丢失。
⚠️ 常见误区:不要认为 Operator 的自动调和能解决所有漂移。Operator 只保证 CRD 定义的配置被正确下发,但无法阻止“绕过 CRD 的直接修改”。审计系统的核心价值就是发现这些“绕过”行为。
1.5 审计的核心指标
在后续课程中,我们将围绕以下核心指标构建审计能力:
| 指标名称 | 来源 | 漂移含义 |
|---|---|---|
prometheus_spec_replicas vs 实际 Pod 数 |
Prometheus CR / Kubernetes API | 副本数漂移 |
prometheus_operator_spec_replicas vs 实际 Operator Pod 数 |
Operator Metrics / Kubernetes API | Operator 自身漂移 |
| ServiceMonitor 数量 vs 实际采集目标数 | Prometheus API / Operator Status | 采集目标漂移 |
| PrometheusRule 哈希 vs 实际加载规则哈希 | Prometheus API / Config Reloader | 告警规则漂移 |
| CRD 资源版本 vs Operator 支持版本 | Kubernetes API / Operator 日志 | 版本兼容性漂移 |