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

Prometheus Adapter配置疑问:如何获取空闲GPU节点数用于HPA

Kubernetes HPA结合空闲GPU节点计数的Prometheus Adapter配置方案

问题根源

你直接写count(<<.Series>> == 0)不生效,主要是因为Prometheus Adapter的模板变量<<.Series>>会替换成指标名+标签匹配器的组合,直接拼接==0会导致语法错误;另外,DCGM_FI_DEV_GPU_UTIL是按GPU实例输出的指标(每个GPU对应一个样本),你需要先按节点聚合,再判断节点是否空闲,最后计数。

正确的Prometheus Adapter配置

自定义空闲GPU节点指标

在Prometheus Adapter的配置文件(比如values.yaml或者单独的config.yaml)中添加以下规则,用来生成空闲节点计数的自定义指标:

rules:
  custom:
  - seriesQuery: 'DCGM_FI_DEV_GPU_UTIL{kubernetes_node!=""}'
    resources:
      overrides:
        kubernetes_node: {resource: "node"}
    name:
      matches: 'DCGM_FI_DEV_GPU_UTIL'
      as: 'idle_gpu_nodes'
    metricsQuery: >-
      count by() (
        count_over_time(DCGM_FI_DEV_GPU_UTIL{kubernetes_node!="",<<.LabelMatchers>>} == 0[5m]) by (kubernetes_node)
        ==
        count by(kubernetes_node) (DCGM_FI_DEV_GPU_UTIL{kubernetes_node!="",<<.LabelMatchers>>})
      )

配置拆解

  1. seriesQuery:指定要采集的指标,带上kubernetes_node标签(确保能关联到Kubernetes节点)。
  2. resources.overrides:把kubernetes_node标签映射为Kubernetes的node资源类型,让HPA能识别这个指标。
  3. metricsQuery:
    • 第一步:count_over_time(DCGM_FI_DEV_GPU_UTIL ==0[5m]) by (kubernetes_node)——统计每个节点过去5分钟内,GPU使用率为0的样本数。
    • 第二步:count by(kubernetes_node) (DCGM_FI_DEV_GPU_UTIL)——统计每个节点的GPU总数。
    • 第三步:两者相等意味着该节点所有GPU都处于空闲状态,最后用count by()统计符合条件的节点总数。

如果你的需求是「节点上至少有一个GPU空闲」(而非全部),可以简化查询:

metricsQuery: 'count by() (count_over_time(DCGM_FI_DEV_GPU_UTIL{kubernetes_node!="",<<.LabelMatchers>>} == 0[5m]) by (kubernetes_node) >= 1)'

HPA配置示例

用这个自定义指标配置HPA,保持至少2个空闲GPU节点:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: gpu-node-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: your-gpu-node-controller # 替换为你的节点组对应的控制器(比如ClusterAutoscaler关联的节点组管理资源)
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: External
    external:
      metric:
        name: idle_gpu_nodes
      target:
        type: Value
        value: "2"

验证步骤

  1. 检查自定义指标是否正常暴露:
    kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/nodes/*/idle_gpu_nodes
    
  2. 确保Prometheus能正确采集到DCGM_FI_DEV_GPU_UTIL指标,且带有kubernetes_node标签(如果没有,需要调整DCGM Exporter的配置,添加节点标签)。
  3. 调整[5m]时间窗口到适合你业务的阈值,避免短时间波动导致误扩容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:37:32