You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Prometheus告警触发Pod运行 适配磁盘压力阈值场景

基于Prometheus告警触发Pod运行的实现方案

Prometheus本身不直接支持操作Kubernetes资源,你需要通过告警链路对接可调用K8s API的组件完成Pod触发,主流可落地的方案有两种:

方案1:自定义Webhook服务(灵活性最高,适配定制化业务逻辑)

  • 第一步:配置Alertmanager路由,将目标告警(比如你配置的内存压力告警、后续要加的磁盘压力告警)转发到指定的Webhook服务,示例配置参考:
route:
  group_by: ['alertname']
  routes:
  - match:
      alertname: node_memory_MemAvailable_percent_alert
    receiver: 'pod-trigger-webhook'
receivers:
- name: 'pod-trigger-webhook'
  webhook_configs:
  - url: 'http://<webhook服务的集群内地址/服务名>:<端口>/alert'
  • 第二步:开发轻量Webhook服务(Python/Go等语言均可,几十行代码即可实现),给服务绑定拥有Pod/Job创建权限的ServiceAccount,服务接收到Alertmanager发来的告警请求后,调用Kubernetes API创建你提前定义好的业务Pod。可以在服务里加幂等校验逻辑,避免同一个告警重复触发Pod创建。

方案2:基于KEDA ScaledJob(无需自研代码,适合标准场景)

  • 先在集群中安装KEDA组件,之后创建ScaledJob资源,配置Prometheus触发器关联你的阈值规则,当指标达到阈值时KEDA会自动创建Job运行目标Pod,示例配置参考:
apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: resource-pressure-handle-job
spec:
  jobTargetRef:
    template:
      spec:
        containers:
        - name: business-handler
          image: <你的业务镜像地址>
          command: ["<业务执行脚本路径>"]
        restartPolicy: Never
  pollingInterval: 30
  successfulJobsHistoryLimit: 2
  failedJobsHistoryLimit: 2
  triggers:
  - type: prometheus
    metadata:
      serverAddress: http://<Prometheus集群内地址>:9090
      metricName: node_memory_usage_percent
      threshold: '80'
      query: |
        100 - ((node_memory_MemAvailable_bytes{job="node-exporter"} * 100) / node_memory_MemTotal_bytes{job="node-exporter"})

注意事项

  • 如果你需要触发的Pod要在告警对应的故障节点上执行,可以在创建Pod时通过nodeSelector或者nodeName字段,读取告警携带的instance标签对应节点名,指定Pod调度到目标节点
  • 你当前提供的告警规则是内存使用率阈值,如需适配磁盘压力场景,替换对应PromQL为磁盘使用率的表达式即可
  • 可以给触发的Pod/Job配置TTL自动清理规则,避免集群残留过多已完成的任务资源

内容的提问来源于stack exchange,提问作者Rajendar Talatam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:09