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

Nomad基于Prometheus自动扩缩容配置错误及缩容逻辑实现求助

Nomad扩缩容策略配置修正

报错原因

你之前的Prometheus查询返回了多个时间序列(每个node_class对应一条结果),但Nomad的threshold扩缩容策略要求查询必须返回单个时间序列,这就触发了failed to query source: query returned 4 metric streams, only 1 is expected的错误。

满足需求的正确配置

要实现“任意节点类的运行分配数恰好为2时,让AWS ASG减少EC2实例”的需求,你需要调整Prometheus查询为聚合类查询,把多序列结果转成单值,再配合对应的阈值策略:

check "allocations-counts" {
    source = "prometheus"
    # 统计运行分配数刚好为2的node_class数量
    query  = "count(nomad_client_allocations_running == 2)"

    strategy "threshold" {
        # 只要有至少1个node_class符合条件,就触发缩容
        lower_bound = 1
        delta       = -1
    }
}

配置逻辑拆解

  1. 查询部分:
    • nomad_client_allocations_running == 2:先筛选出所有运行分配数等于2的节点类指标
    • count(...):统计这些符合条件的指标数量,最终返回一个单一数值,完全符合Nomad的要求
  2. 策略部分:
    • 当查询结果≥1时(也就是存在至少一个node_class的运行分配数为2),就会执行delta = -1,触发AWS ASG减少一个EC2实例

可选调整:针对特定node_class范围

如果不需要对所有node_class做判断,只想关注特定范围的节点类,可以在查询里添加过滤条件,比如只匹配以myclass开头的node_class:

query  = "count(nomad_client_allocations_running{node_class=~\"myclass.*\"} == 2)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:10:56