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 } }
配置逻辑拆解
- 查询部分:
nomad_client_allocations_running == 2:先筛选出所有运行分配数等于2的节点类指标count(...):统计这些符合条件的指标数量,最终返回一个单一数值,完全符合Nomad的要求
- 策略部分:
- 当查询结果≥1时(也就是存在至少一个
node_class的运行分配数为2),就会执行delta = -1,触发AWS ASG减少一个EC2实例
- 当查询结果≥1时(也就是存在至少一个
可选调整:针对特定node_class范围
如果不需要对所有node_class做判断,只想关注特定范围的节点类,可以在查询里添加过滤条件,比如只匹配以myclass开头的node_class:
query = "count(nomad_client_allocations_running{node_class=~\"myclass.*\"} == 2)"
内容的提问来源于stack exchange,提问作者Mohit Tevatia
相关产品推荐
相关产品推荐

