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

如何配置Deployment让kube-scheduler将Pod调度至负载较低的节点?

如何让Deployment将Pod调度到低负载节点?

针对你的集群节点负载不均、节点动态删创的情况,可以通过以下几种方式实现需求:

1. 先给Pod配置资源请求/限制

Kubernetes默认调度器是基于Pod的resources.requests来计算节点剩余资源的,如果你的Pod没设置这个,调度器根本没法判断节点负载高低。所以先给Deployment的Pod模板加上资源配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app-deployment
spec:
  template:
    spec:
      containers:
      - name: your-app-container
        image: your-image:latest
        resources:
          requests:
            cpu: "100m"  # 根据实际Pod资源消耗调整
            memory: "256Mi"
          limits:
            cpu: "500m"
            memory: "512Mi"

配置后,调度器会优先把新Pod调度到剩余资源(总资源-已分配请求)更多的节点,也就是负载更低的那些。

2. 调整默认调度器的评分逻辑

如果默认调度的效果不够理想,可以修改kube-scheduler的配置,让它更偏向选择低负载节点。比如调整资源相关评分插件的权重:

apiVersion: kubescheduler.config.k8s.io/v1beta3
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
  plugins:
    score:
      enabled:
      - name: NodeResourcesFit
        weight: 2  # 优先选择剩余资源多的节点
      - name: NodeResourcesBalancedAllocation
        weight: 3  # 优先选择CPU/内存负载均衡的节点

调高NodeResourcesBalancedAllocation的权重,调度器会更倾向于选择资源使用率更均衡的低负载节点。

3. 动态节点自动打标签+亲和性适配

因为节点会定期删创,手动加标签不现实,可以通过两种方式给节点自动打标签:

  • 如果低负载节点是特定硬件规格(比如大内存/高CPU机型),可以在kubelet启动参数中添加--node-labels=node-class=high-capacity,让新创建的高配置节点自动带上标签。然后在Deployment里配置节点亲和性,优先选择这类节点:
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: node-class
                operator: In
                values:
                - high-capacity
  • 如果节点负载是动态变化的,可以用监控联动的自定义控制器(比如基于Prometheus的脚本/控制器),给CPU/内存使用率低于阈值的节点自动打上load-level=low标签,然后Deployment配置亲和性优先选择带该标签的节点。

4. 用自定义调度器实现更灵活的逻辑

如果默认调度器满足不了需求,可以部署自定义调度器(比如Volcano,或者基于kube-scheduler扩展自定义插件),直接基于节点的实际负载数据(比如从metrics-server获取的实时使用率)来做调度决策,完全贴合你的负载判断标准。

额外优化:用Descheduler调整已有Pod

如果已经有大量Pod跑在高负载节点上,光靠新Pod调度还不够,可以部署Descheduler。它会定期扫描集群,把高负载节点上的Pod驱逐到低负载节点,配合新调度策略,实现集群整体负载均衡。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:15:13