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,将领域专家的运维知识编码为自动化逻辑。其核心循环遵循“观察-分析-行动”的闭环模型。

核心思想: 将人工运维操作(如配置 Prometheus、管理 Alertmanager 集群)转化为 Kubernetes 原生资源对象,由 Operator 控制器自动调和实际状态与期望状态。
Operator 模式核心工作流 用户 / 管理员 声明式配置 (CR) Kubernetes API Server Prometheus Operator 控制器 Reconcile 循环 (Observe-Analyze-Act) 创建 / 更新 / 删除 StatefulSet / Service Prometheus / Alertmanager 状态反馈(Status 子资源)
关键洞察: Operator 通过监听 Kubernetes API 中 CR 对象的变化(Observe),对比当前集群状态与 CR 中定义的期望状态(Analyze),然后执行创建、更新或删除底层 Kubernetes 资源(Act)来使实际状态收敛于期望状态。

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 的工作流程可以概括为三个步骤:

  1. 服务发现: Operator 根据 selector 和 namespaceSelector 找到匹配的 Kubernetes Service。
  2. 端点解析: 从 Service 中提取 Endpoints(Pod IP + Port),生成抓取目标列表。
  3. 配置注入: 将抓取配置(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
生产建议: Alertmanager 集群至少部署 3 个副本,并启用 cluster 配置以实现高可用和告警去重。告警配置(路由、接收器)建议通过 AlertmanagerConfig CRD 管理,而不是直接修改 Secret。

2.6 三种 CRD 的协作关系

Prometheus、ServiceMonitor、Alertmanager 三者构成了 Prometheus Operator 的“铁三角”。它们通过标签选择器和命名空间隔离机制实现松耦合协作。

Prometheus Operator CRD 协作关系 ServiceMonitor 抓取目标定义 selector + endpoints metricRelabelings namespaceSelector Prometheus 服务器实例 serviceMonitorSelector ruleSelector storage / retention Alertmanager 告警管理集群 alertmanagerConfigSelector cluster / replicas receivers / routes 标签匹配 告警推送
协作流程: Prometheus 通过 serviceMonitorSelector 发现匹配的 ServiceMonitor,从中提取抓取配置;Prometheus 根据告警规则产生告警后,推送到 Alertmanager 集群;Alertmanager 根据 alertmanagerConfigSelector 匹配的配置进行路由、去重和发送通知。

2.7 本章小结

  • Operator 模式 通过 CRD + 控制器循环,将 Prometheus 运维知识自动化,实现声明式管理。
  • Prometheus CRD 定义服务器实例的规格、存储和全局配置,是监控系统的“大脑”。
  • ServiceMonitor CRD 将抓取配置抽象为标签选择器,实现动态服务发现和声明式抓取。
  • Alertmanager CRD 管理告警集群的部署和配置,确保告警可靠送达。
  • 三者通过标签选择器松耦合协作,构成了 Prometheus Operator 的完整监控体系。