2. Prometheus Operator 基础:Operator 模式原理、CRD 资源概览
在深入日志索引治理之前,必须理解 Prometheus Operator 的底层运行机制。Operator 模式是 Kubernetes 生态中“用软件管理软件”的核心思想,而 CRD(Custom Resource Definition)则是 Operator 与用户交互的声明式接口。本章将拆解 Operator 的工作原理,并逐一介绍 Prometheus、ServiceMonitor、Alertmanager 这三个最关键的 CRD 资源。
2.1 Operator 模式原理
Operator 本质上是 Kubernetes 控制器的一种特殊实现,它利用 CRD 扩展 Kubernetes API,将领域专家的运维知识编码为自动化逻辑。其核心循环遵循“观察-分析-行动”的闭环模型。
2.2 CRD 资源概览
Prometheus Operator 定义了一组 CRD,将 Prometheus 生态的组件抽象为 Kubernetes 原生资源。以下是三个最核心的 CRD 及其职责。
| CRD 名称 | API 版本 (稳定版) | 核心职责 | 管理对象 |
|---|---|---|---|
| Prometheus | monitoring.coreos.com/v1 | 定义 Prometheus 服务器的部署规格、存储、保留策略、全局配置 | StatefulSet、Service、ConfigMap |
| ServiceMonitor | monitoring.coreos.com/v1 | 声明式定义如何从一组 Kubernetes Service 抓取指标(Target 发现 + 抓取配置) | 抓取目标(Target)与抓取配置 |
| Alertmanager | monitoring.coreos.com/v1 | 定义 Alertmanager 集群的部署规格、配置、路由、接收器 | StatefulSet、Service、Secret |
2.3 Prometheus CRD 深度解析
Prometheus CRD 是 Operator 管理的核心入口。它定义了 Prometheus 服务器的完整生命周期,包括版本、副本数、资源限制、存储、保留策略以及全局配置。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: k8s
namespace: monitoring
spec:
# 部署规格
replicas: 2
version: v2.45.0
serviceAccountName: prometheus
# 资源与存储
resources:
requests:
memory: 4Gi
cpu: 2
storage:
volumeClaimTemplate:
spec:
storageClassName: fast-ssd
resources:
requests:
storage: 100Gi
# 数据保留
retention: 15d
retentionSize: 80GB
# 全局配置
externalLabels:
cluster: prod-east
externalUrl: https://prometheus.example.com
# 抓取配置来源
serviceMonitorSelector:
matchLabels:
team: platform
ruleSelector:
matchLabels:
role: alert-rules
serviceMonitorSelector 和 ruleSelector 使用空选择器({})时会匹配所有 ServiceMonitor 或 Rule,可能导致非预期的抓取目标或告警规则被加载。生产环境务必使用精确的标签选择器。
2.4 ServiceMonitor CRD 深度解析
ServiceMonitor 是 Prometheus Operator 中最具创新性的 CRD。它将传统的 Prometheus 抓取配置(scrape_configs)转化为 Kubernetes 原生的标签选择器模型,实现了“自动服务发现 + 声明式抓取配置”。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: nginx-ingress
namespace: monitoring
labels:
team: platform
spec:
# 选择目标 Service
selector:
matchLabels:
app.kubernetes.io/name: nginx-ingress
namespaceSelector:
any: true # 跨命名空间发现
# 抓取端点配置
endpoints:
- port: metrics
interval: 30s
scrapeTimeout: 10s
path: /metrics
scheme: http
# 标签重写
targetLabels:
- app.kubernetes.io/instance
metricRelabelings:
- sourceLabels: [__name__]
regex: 'nginx_ingress_controller_requests'
action: keep
ServiceMonitor 的工作流程可以概括为三个步骤:
- 服务发现: Operator 根据
selector和namespaceSelector找到匹配的 Kubernetes Service。 - 端点解析: 从 Service 中提取 Endpoints(Pod IP + Port),生成抓取目标列表。
- 配置注入: 将抓取配置(interval、path、relabelings 等)注入到 Prometheus 的
scrape_configs中。
2.5 Alertmanager CRD 深度解析
Alertmanager CRD 负责管理 Alertmanager 集群的部署和配置。与 Prometheus CRD 类似,它定义了集群拓扑、版本、存储以及告警路由和接收器的配置来源。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: main
namespace: monitoring
spec:
replicas: 3
version: v0.25.0
# 集群配置
cluster:
peerTimeout: 15s
replicationFactor: 2
# 告警配置来源(引用 Secret)
alertmanagerConfigSelector:
matchLabels:
alertmanagerConfig: main
# 存储
storage:
volumeClaimTemplate:
spec:
storageClassName: fast-ssd
resources:
requests:
storage: 10Gi
cluster 配置以实现高可用和告警去重。告警配置(路由、接收器)建议通过 AlertmanagerConfig CRD 管理,而不是直接修改 Secret。
2.6 三种 CRD 的协作关系
Prometheus、ServiceMonitor、Alertmanager 三者构成了 Prometheus Operator 的“铁三角”。它们通过标签选择器和命名空间隔离机制实现松耦合协作。
serviceMonitorSelector 发现匹配的 ServiceMonitor,从中提取抓取配置;Prometheus 根据告警规则产生告警后,推送到 Alertmanager 集群;Alertmanager 根据 alertmanagerConfigSelector 匹配的配置进行路由、去重和发送通知。
2.7 本章小结
- Operator 模式 通过 CRD + 控制器循环,将 Prometheus 运维知识自动化,实现声明式管理。
- Prometheus CRD 定义服务器实例的规格、存储和全局配置,是监控系统的“大脑”。
- ServiceMonitor CRD 将抓取配置抽象为标签选择器,实现动态服务发现和声明式抓取。
- Alertmanager CRD 管理告警集群的部署和配置,确保告警可靠送达。
- 三者通过标签选择器松耦合协作,构成了 Prometheus Operator 的完整监控体系。