2. 系统架构总览:整体架构图、核心组件与数据流

本章从全局视角剖析 Prom告警驱动证书轮换调度器 的系统架构。整个系统围绕“告警感知 → 调度决策 → 资源预留 → 证书轮换”的闭环设计,将 Prometheus 生态的告警能力与 Kubernetes 调度器的资源管理能力深度整合。下面依次介绍整体架构图、四个核心组件及其职责,以及贯穿系统的关键数据流。

2.1 整体架构图

下图展示了系统的核心拓扑结构。Prometheus 负责采集证书过期指标并触发告警;Alertmanager 对告警进行路由、抑制与分组后,将告警通知发送至调度器;调度器根据告警内容计算资源预留策略,并操作资源池完成预留;最终由证书轮换执行器(或外部工具)在预留的资源上完成证书更新。

系统整体架构图 系统整体架构图 Prometheus 证书过期指标采集 Alertmanager 告警路由 / 抑制 / 分组 证书轮换调度器 资源预留策略计算 资源池 CPU / 内存 / 网络预留 证书轮换执行器 证书更新 / 重启服务 告警事件 Webhook 通知 预留请求 资源就绪 证书状态反馈 架构要点说明: • 告警驱动:整个流程由 Prometheus 证书过期告警触发,无需人工介入。 • 资源预留前置:调度器在证书轮换前完成资源预留,避免轮换时资源争抢。 • 闭环反馈:证书轮换执行器将状态写回 Prometheus,形成可观测的闭环。

2.2 核心组件

系统由四个核心组件构成,每个组件承担明确的职责,并通过标准接口进行通信。下表总结了各组件的功能定位与关键特性:

组件名称 核心职责 输入 输出 关键特性
Prometheus 证书过期指标采集与告警规则评估 证书文件、TLS 端点、Exporter 指标 告警事件(Alert) 支持多种证书过期 Exporter;可自定义告警阈值
Alertmanager 告警路由、抑制、分组与通知 Prometheus 告警事件 Webhook HTTP 请求(JSON) 支持告警去重;可配置静默期与抑制规则
证书轮换调度器 解析告警、计算资源预留策略、调度执行 Alertmanager Webhook 通知 资源预留请求、轮换指令 内置资源预留算法;支持优先级队列
资源池 管理预留资源(CPU、内存、网络端口等) 调度器预留请求 资源分配确认、释放通知 支持资源配额与超时回收;提供状态查询 API

2.3 核心组件详解

2.3.1 Prometheus — 证书过期感知层

Prometheus 通过以下方式采集证书过期信息:

  • Blackbox Exporter:探测 TLS 端点证书有效期。
  • cert_exporter:直接读取本地证书文件过期时间。
  • Kubelet 指标:Kubernetes 节点证书状态。

告警规则示例:

groups:
- name: certificate_alerts
  rules:
  - alert: CertificateExpiringSoon
    expr: (cert_expiry_days < 30) and (cert_expiry_days > 0)
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "证书 {{ $labels.common_name }} 将在 {{ $value }} 天后过期"

2.3.2 Alertmanager — 告警治理层

Alertmanager 负责对 Prometheus 发送的告警进行治理:

  • 分组:将同一证书的多次告警合并为一条通知。
  • 抑制:当证书已进入轮换流程时,抑制后续重复告警。
  • 路由:根据告警标签(如 severity、cluster)将告警发送到对应的调度器 Webhook。

Webhook 配置片段:

receivers:
- name: 'cert-scheduler'
  webhook_configs:
  - url: 'http://cert-scheduler:8080/webhook'
    send_resolved: true

2.3.3 证书轮换调度器 — 决策与编排层

调度器是整个系统的决策核心,主要工作流程:

  1. 接收告警:解析 Alertmanager 发送的 Webhook JSON 负载。
  2. 评估资源需求:根据证书类型、服务规模、历史数据计算所需资源量。
  3. 预留资源:向资源池发起预留请求,确保轮换时有充足资源。
  4. 触发轮换:资源就绪后,向证书轮换执行器下发轮换指令。

2.3.4 资源池 — 资源抽象与管理层

资源池将底层基础设施资源抽象为可预留的单元,支持:

  • CPU 与内存预留:为证书轮换过程中的临时 Pod 或容器预留计算资源。
  • 网络端口预留:避免端口冲突,特别是 TLS 端口重新绑定场景。
  • 存储卷预留:确保证书文件写入时有足够的存储空间。

2.4 数据流

系统数据流分为两条主线:告警驱动流 和 资源预留流。下面用第二个 SVG 图展示数据在组件间的传递细节。

数据流时序图 数据流时序图 Prometheus Alertmanager 调度器 资源池 ① 采集证书过期指标 ② 告警事件 ③ Webhook 通知 ④ 预留请求 ⑤ 分配确认 ⑥ 轮换指令 ⑦ 状态反馈 数据流关键点:步骤④和⑤是资源预留的核心交互,决定了轮换操作的资源保障程度。

2.5 数据流关键阶段说明

结合上述时序图,数据流可归纳为七个关键阶段:

阶段 发起方 接收方 数据内容 协议/格式
① 指标采集 Prometheus Exporter / 端点 证书过期天数、证书序列号 Prometheus HTTP / 拉取
② 告警事件 Prometheus Alertmanager 告警名称、标签、时间戳 Prometheus Alert API
③ Webhook 通知 Alertmanager 调度器 告警 JSON 负载 HTTP POST / JSON
④ 预留请求 调度器 资源池 资源类型、数量、租期 gRPC / Protobuf
⑤ 分配确认 资源池 调度器 预留 ID、资源句柄 gRPC / Protobuf
⑥ 轮换指令 调度器 执行器 证书路径、新证书内容 HTTP / 消息队列
⑦ 状态反馈 执行器 Prometheus 轮换成功/失败、新过期时间 Pushgateway / 指标写入
设计要点: 阶段④和⑤之间的资源预留交互采用 两阶段提交 模式:调度器先发起预留请求,资源池返回预留 ID 并锁定资源;调度器确认轮换开始后,资源池才真正分配资源。这种设计避免了资源被多个轮换任务同时抢占。

2.6 架构设计原则

  • 松耦合:各组件通过标准接口(HTTP/gRPC)通信,可独立升级或替换。
  • 可观测性:Prometheus 不仅作为告警源,也负责采集调度器、资源池的运行指标。
  • 幂等性:调度器处理重复告警时,资源预留请求具有幂等性,不会重复预留。
  • 资源隔离:资源池为每个轮换任务分配独立资源,避免相互影响。
注意: 在告警量突增场景下(如大量证书同时过期),Alertmanager 的抑制规则和调度器的优先级队列必须配合工作,防止资源池被瞬时请求打满。建议在调度器侧配置最大并发预留数。