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

KEDA在Azure AKS中无法缩容及相关扩缩容问题咨询

KEDA ScaledJob 用于Azure DevOps代理的问题解决

问题1:混合代理池下的误扩容控制

当代理池同时包含VM和Docker代理时,KEDA默认会基于整个池的待处理任务(pending jobs)计算扩容需求,但未区分代理是否能处理对应任务(比如VM代理不具备Docker运行环境),导致误扩容。可以通过以下配置调整:

  • 添加触发器的agentDemands参数:在Azure Pipelines触发器的metadata中加入agentDemands,匹配Docker代理的专属标识(比如代理注册时设置的docker标签,或流水线要求的docker能力)。这样KEDA只会针对需要Docker代理的待处理任务计算扩容需求,避免因VM代理无法处理任务而误启动新的Docker代理Job。示例修改:
triggers:
  - type: azure-pipelines
    metadata:
      poolID: "xxx"
      organizationURLFromEnv: "AZP_URL"
      personalAccessTokenFromEnv: "AZP_TOKEN"
      agentDemands: "docker" # 替换为你的Docker代理的专属标识/需求
      pendingJobsThreshold: "1" # 仅当待处理任务数超过1时触发扩容
  • 设置minReplicaCount为0:确保没有待处理任务时,不会保留空闲的Docker代理Job。
  • 调整pollingInterval:适当调长(如60秒),避免短时间内重复触发扩容判断,减少误触发概率。

问题2:Job无法自动缩容(清理)

ScaledJob的缩容逻辑是不再创建新Job,现有Job需在任务完成后自动退出并被清理。你的问题大概率是代理容器未正常退出,可通过以下方式解决:

  • 给代理添加--once启动参数:在容器的启动命令中加入--once,让Azure DevOps代理处理完一次任务后自动注销并退出,Job会变为Completed状态,随后根据你设置的successfulJobsHistoryLimit自动清理。修改容器配置:
containers:
- name: azdevops-agent-job
  image: vstsimage
  imagePullPolicy: Always
  command: ["/bin/bash", "-c"]
  args: ["./start.sh --once"] # 添加--once参数
  env:
  - name: AZP_URL
    value: [MYAZPURL]
  # ... 其他环境变量和挂载配置
  • 检查PVC占用:确保挂载的PVC没有被进程占用导致容器无法退出,若流水线不需要跨任务保留数据,可改用临时存储替代持久化PVC。

问题3:删除ScaledJob后代理条目未从Azure DevOps池移除

Azure DevOps不会自动删除已注册的代理,除非代理主动注销或被检测为离线超过阈值。解决方式:

  • 代理退出时主动注销:通过--once参数让代理在任务完成后自动注销(如问题2的配置),这样代理退出时会向Azure DevOps发送注销请求,池中的对应条目会被移除。
  • 配置Azure DevOps代理池的自动清理规则:在Azure DevOps代理池的设置中,开启"自动移除离线代理",设置离线时长阈值(比如1小时),超过该时长的离线代理会被自动清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:45:34