【监控】Prometheus Operator 详解【工程化 & Thanos 组合架构】
一、Prometheus Operator 简介
-
Prometheus Operator 是由 CoreOS(后被 Red Hat 收购)开源的 Kubernetes Operator,专门用于简化 Prometheus 及相关组件(Alertmanager、Grafana)的部署与管理。
-
它通过 CRD(CustomResourceDefinition) 扩展 Kubernetes API,对外提供声明式配置。
-
主要 CRD 包括:
- Prometheus(Prometheus 集群实例)
- ServiceMonitor(服务指标发现规则)
- PodMonitor(Pod 指标发现规则)
- Alertmanager(告警管理集群)
- PrometheusRule(告警与录制规则)
二、Prometheus Operator 关键流程
1. 整体架构
2. 核心 Reconcile 循环(源码逻辑简化)
Operator 基于 Kubernetes Controller 模式,典型逻辑为:
for {
// Step 1: 监听 Prometheus/ServiceMonitor/Alertmanager 等 CR 事件
cr := watchCRD()
// Step 2: 校验配置合法性
validate(cr)
// Step 3: 对比 Desired State 与 Actual State
desired := buildK8sResources(cr)
actual := getClusterResources(cr)
// Step 4: 调谐差异,执行增删改操作
sync(desired, actual)
// Step 5: 更新 CR 的 Status 字段
updateStatus(cr)
}
-
核心点:
- Operator 并不是直接运行 Prometheus,而是 生成 StatefulSet + ConfigMap + Service 等 K8s 资源,让 K8s 保证运行状态。
- Prometheus 配置文件由 Operator 自动生成(避免用户手工维护复杂的
prometheus.yml)。
三、Prometheus Operator 工程化实现建议
1. 升级策略
- 无损升级:利用 StatefulSet 滚动更新,保证一个实例升级时,其他副本仍能工作。
- 多版本灰度:使用
spec.replicas > 1+PodDisruptionBudget保证最少可用实例数。 - 版本管理:建议采用 Helm + GitOps(ArgoCD / FluxCD) 统一控制 Operator 与 CRD 版本。
2. 备份策略
-
配置备份
-
定期导出 Prometheus Operator 所管理的 CR(YAML),存储于 Git 或对象存储。
-
示例:
kubectl get prometheus -A -o yaml > backup/prometheus.yaml kubectl get servicemonitor -A -o yaml > backup/servicemonitor.yaml kubectl get prometheusrule -A -o yaml > backup/rules.yaml
-
-
数据备份
- Prometheus 默认存储在 PVC(PersistentVolumeClaim) 上,使用外部快照工具(Velero / Restic / CSI Snapshots)进行定期快照。
- 也可将数据写入 远程存储(如 Thanos / Cortex / Mimir),避免单点丢失。
3. 恢复策略
-
配置恢复
- 将备份的 CRD YAML 重新
kubectl apply到集群,Operator 会自动重建 StatefulSet 和配置文件。
- 将备份的 CRD YAML 重新
-
数据恢复
- 如果使用了 PVC 快照,直接恢复 PVC 并绑定到 StatefulSet。
- 如果接入 Thanos / Cortex,Prometheus 实例无状态化,可快速重建并自动恢复历史数据。
四、工程化落地最佳实践
✅ 配置管理
- 所有 CR(Prometheus/ServiceMonitor/Alertmanager/PrometheusRule)纳入 GitOps。
- 使用 Kustomize/Helm 管理多环境差异。
✅ 高可用架构
- Prometheus Operator 管理的 Prometheus 建议运行 2 副本以上 StatefulSet。
- 配合 Thanos Sidecar 提供远程存储与 Query 聚合。
✅ 可观测性
- Operator 本身提供
metrics,可纳入 Prometheus 监控,保证 Operator 健康。 - 监控 Prometheus 实例的
up、tsdb_wal_truncate_duration_seconds等关键指标。
✅ 安全性
- 对 Prometheus/Alertmanager 使用 RBAC + NetworkPolicy 控制访问范围。
- 对 PrometheusRules 做 CRD Validation,避免错误规则导致 OOM。
📌 总结:
- Prometheus Operator 通过 CRD + Reconcile 循环 实现 Prometheus 及相关组件的自动化管理。
- 在工程化落地中,应重点关注 升级滚动策略、配置 & 数据备份恢复、远程存储与高可用性设计。
五、Prometheus Operator + Thanos 架构
六、流程解读
-
用户通过 CRDs 提交配置
- Prometheus / ServiceMonitor / PrometheusRule / Alertmanager。
- Operator 监听到 CRD 变化,生成 K8s 原生资源(StatefulSet、ConfigMap、Service 等)。
-
Prometheus StatefulSet 管理监控数据采集
- Prometheus Pod 定期抓取 ServiceMonitor 定义的目标指标。
- 每个 Prometheus Pod 附带一个 PVC,存储本地时序数据。
-
Thanos Sidecar 与远程存储集成
- Sidecar 将本地数据上传到对象存储(S3、GCS、Ceph RGW 等)。
- Thanos Store 提供历史数据访问,Thanos Query 聚合多 Prometheus 数据源。
-
Alertmanager 集群管理告警
- Operator 生成的 Alertmanager StatefulSet 管理告警通知(邮件、Slack、钉钉等)。
-
Grafana / API 查询
- 用户通过 Grafana / API 查询数据 → Thanos Query → 聚合 Prometheus + 对象存储中的历史数据。
七、工程化实现建议(生产级)
✅ 高可用性
- Prometheus StatefulSet 建议至少 2 副本,配合 Thanos Sidecar 统一出口。
- 使用 PodDisruptionBudget 保证至少一个 Prometheus 可用。
✅ 数据存储
- 对接 Thanos,避免单点故障和 PVC 限制。
- 对象存储建议使用 版本化 + 生命周期管理。
✅ 升级
- Operator + CRDs 使用 Helm/ArgoCD 管理,滚动升级避免中断。
- Prometheus/Alertmanager StatefulSet 逐 Pod 滚动更新。
✅ 备份与恢复
- 配置:所有 CRDs (YAML) 纳入 GitOps 管理。
- 数据:通过 Thanos + 对象存储保障,PVC 仅作为缓存层。
✅ 监控 Operator 本身
- 采集
prometheus_operator_*指标,确保 CRDs 与实际资源同步正常。
👉 这样,一个 Prometheus Operator + Thanos 的完整生产级方案就出来了:
- Operator 管理声明式 CRDs → 自动生成资源
- Prometheus 负责实时采集
- Thanos 提供历史存储 + 高可用聚合
- Alertmanager 负责告警通知
- Grafana/Query API 提供统一查询
八、Prometheus Operator 升级/灰度流程(时序图)
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19513682

浙公网安备 33010602011771号