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

Kubernetes/Cluster-autoscaler:如何配置工作负载调度提升资源利用率?

优化CI作业集群调度与资源利用率的方案

1. 调整调度器Pod调度策略(替换默认轮询)

K8s默认的EvenPodsSpread策略会强制分散Pod到各节点,这正是你遇到“每个节点至少一个作业Pod”的核心原因。可以通过软约束降低分散优先级,实现紧凑调度:

  • 给所有CI作业Pod添加如下亲和性配置,让调度器优先把Pod塞进已有作业的节点,直到资源耗尽再扩容新节点:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          podAffinityTerm:
            labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - ci-job
            topologyKey: kubernetes.io/hostname
    
  • 若集群版本在1.19+,也可直接在调度器配置中降低EvenPodsSpread插件的权重,或禁用该插件。

2. 重置Cluster Autoscaler(CA)参数(替代极端阈值)

之前设置的scale-down-utilization-threshold=0过于激进,改用更平衡的参数组合:

  • 设scale-down-utilization-threshold=0.4(可根据作业资源需求调整,比如CPU/内存利用率低于40%时允许缩容)
  • 保留scale-down-unneeded-time=1m,新增scale-down-delay-after-add=5m(扩容后等待5分钟再触发缩容,给作业足够时间调度到节点)
  • 设scale-down-unready-time=20m(匹配作业最长运行时长,确保节点上的作业全部完成后再缩容)
  • 启用skip-nodes-with-local-storage=false(若作业无本地存储依赖),扩大CA可缩容的节点范围

3. 配置Pod Disruption Budget(PDB)

通过PDB限制节点缩容时的Pod驱逐行为,避免作业被中途终止:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: ci-job-pdb
spec:
  minAvailable: 0
  selector:
    matchLabels:
      app: ci-job

该配置允许所有作业Pod被终止,但仅当Pod处于完成状态时,CA才会触发对应节点的缩容操作。

4. 启用调度器“Bin Packing”模式

K8s调度器的MostAllocated优先级函数会优先将Pod调度到资源利用率最高的节点,实现节点资源的紧凑打包。调整调度器配置,提高该函数的权重:

  • 编辑kube-scheduler的ConfigMap,修改优先级配置:
    apiVersion: kubescheduler.config.k8s.io/v1beta3
    kind: KubeSchedulerConfiguration
    profiles:
    - schedulerName: default-scheduler
      plugins:
        score:
          enabled:
          - name: MostAllocated
            weight: 6
          - name: EvenPodsSpread
            weight: 2
    
    此配置让调度器优先填满已有节点,减少低利用率节点的产生,便于CA识别并缩容闲置节点。

5. 固定Agent Pod到常驻节点

给Agent Pod添加节点亲和性,让其仅运行在少量常驻节点上,临时扩容的节点只承载作业Pod:

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node-role.kubernetes.io/ci-agent
          operator: Exists

给常驻节点打上node-role.kubernetes.io/ci-agent标签,确保临时节点仅运行作业Pod,作业完成后节点无负载,CA可快速触发缩容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:04