华为云云容器引擎CCE | Volcano调度篇:重调度(Descheduler)

举报
云容器大未来 发表于 2025/11/25 15:02:22 2025/11/25
【摘要】 华为云云容器引擎CCE支持多种资源与任务调度策略,有助于提升应用性能和集群整体资源利用率,CPU资源调度、GPU/NPU异构资源调度以及Volcano调度的主要功能。本系列文章将介绍Volcano在华为云云容器引擎CCE中的应用,本文重点介绍:重调度(Descheduler)。

华为云云容器引擎CCE支持多种资源与任务调度策略,有助于提升应用性能和集群整体资源利用率,CPU资源调度、GPU/NPU异构资源调度以及Volcano调度的主要功能。本系列文章将介绍Volcano调度在华为云云容器引擎CCE中的运用。

Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性,提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力。

volcano社区.jpg

集群中的调度是将pending状态的Pod分配到节点运行的过程,在CCE集群之中,Pod的调度依赖于集群中的调度器(kube-scheduler或者Volcano调度器)。调度器是通过一系列算法计算出Pod运行的最佳节点,但是Kubernetes集群环境是存在动态变化的,例如某一个节点需要维护,这个节点上的所有Pod会被驱逐到其他节点,但是当维护完成后,之前被驱逐的Pod并不会自动回到该节点上来,因为Pod一旦被绑定了节点是不会触发重新调度的。由于这些变化,集群在一段时间之后就可能会出现不均衡的状态。

为了解决上述问题,Volcano调度器可以根据设置的策略,驱逐不符合配置策略的Pod,让其重新进行调度,达到均衡集群负载、减少资源碎片化的目的。

  重调度功能介绍  

▍负载感知重调度(LoadAware)

在K8s集群治理过程中,常常会因CPU、内存等高使用率状况而形成热点,既影响了当前节点上Pod的稳定运行,也会导致节点发生故障的几率的激增。为了应对集群节负载不均衡等问题,动态平衡各个节点之间的资源使用率,需要基于节点的相关监控指标,构建集群资源视图,在集群治理阶段,通过实时监控,在观测到节点资源率较高、节点故障、Pod 数量较多等情况时,可以自动干预,迁移资源使用率高的节点上的一些Pod到利用率低的节点上。

重调度1.png

图1 LoadAware策略示意图

使用该插件时,highThresholds需要大于lowThresholds,否则重调度器无法启用。

  • 正常节点:资源利用率大于等于30%且小于等于80%的节点。此节点的负载水位区间是期望达到的合理区间范围。
  • 热点节点:资源利用率高于80%的节点。热点节点将驱逐一部分Pod,降低负载水位,使其不超过80%。重调度器会将热点节点上面的Pod调度到空闲节点上面。
  • 空闲节点:资源利用率低于30%的节点。

▍CPU和内存资源碎片率整理策略(HighNodeUtilization)

从分配率低的节点上驱逐Pod。这个策略必须与Volcano调度器的binpack策略或者kube-scheduler调度器的MostAllocated策略一起使用。阈值可以分为CPU和内存两种资源角度进行配置。

  前提条件  

✅ 已创建v1.19.16及以上版本的集群,具体操作请参见购买Standard/Turbo集群

✅ 集群中已安装1.11.5及以上版本的Volcano插件,具体操作请参见Volcano调度器

  约束与限制  

❌ 重调度之后的Pod,需要调度器进行调度,重调度器并未进行任何对于Pod和节点的标记行为,所以被驱逐的Pod调度到节点的行为完全被调度器控制,存在驱逐之后,被驱逐的Pod调度到原来节点的可能性。

❌ 重调度功能暂不支持Pod间存在反亲和性的场景。如果使用重调度功能驱逐某个Pod后,由于该Pod与其他已运行的Pod存在反亲和性,调度器仍可能将其调度回驱逐前的节点上。

❌ 配置负载感知重调度(LoadAware)时,Volcano调度器需要同时开启负载感知调度;配置CPU和内存资源碎片率整理策略(HighNodeUtilization)时,Volcano调度器需要同时开启binpack调度策略。

  配置负载感知重调度策略  

配置负载感知重调度(LoadAware)时,Volcano调度器需要同时开启负载感知调度,示例步骤如下。

1、登录CCE控制台,单击集群名称进入集群。

2、单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“编辑”,在“扩展功能”中开启“重调度”的开关,单击“确定”完成插件配置更新。

3、单击左侧导航栏的“配置中心”,通过“调度配置”页面启用负载感知调度。详情请参见负载感知调度

4、在“调度配置”页面,选择Volcano调度器找到对应的“专家模式”,单击“开始使用”。

重调度2.png

5、配置负载感知重调度策略。使用Volcano 1.11.21及更新版本,JSON格式的重要参数配置示例如下,其他参数请参见控制台“开始使用”中的JSON示例

{
...
"deschedulerPolicy": {
    "profiles": [
      {
        "name": "ProfileName",
        "pluginConfig": [
          {
            "args": {
              "ignorePvcPods": true,
              "nodeFit": true,
              "priorityThreshold": {
                "value": 100
              }
            },
            "name": "DefaultEvictor"
          },
          {
            "args": {
              "evictableNamespaces": {
                "exclude": ["kube-system"]
              },
              "metrics": {
                "type": "prometheus_adaptor"
              },
              "targetThresholds": {
                "cpu": 80,
                "memory": 85
              },
              "thresholds": {
                "cpu": 30,
                "memory": 30
              }
            },
            "name": "LoadAware"
          }
        ],
        "plugins": {
          "balance": {
            "enabled": ["LoadAware"]
          }
        }
      }
    ]
  },
  "descheduler_enable": "true",
  "deschedulingInterval": "10m"
...
}

重调度3.png

表1 集群重调度策略关键参数

重调度4.png

表2 deschedulerPolicy配置参数


6、完成以上配置后,单击“确定”。

  配置资源碎片整理策略  

配置CPU和内存资源碎片率整理策略(HighNodeUtilization)时,Volcano调度器需要同时开启binpack调度策略,示例步骤如下。

1、登录CCE控制台,单击集群名称进入集群。

2、单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“编辑”,在“扩展功能”中开启“重调度”的开关,单击“确定”完成插件配置更新。

3、单击左侧导航栏的“配置中心”,通过“调度配置”页面启用装箱策略(binpack)。详情请参见装箱调度(Binpack)

4、在“调度配置”页面,选择Volcano调度器找到对应的“专家模式”,单击“开始使用”。

重调度5.png

5、配置资源碎片整理策略,JSON格式的重要参数配置示例如下,其他参数请参见控制台“开始使用”中的JSON示例。

{
... 
  "deschedulerPolicy": {
    "profiles": [
      {
        "name": "ProfileName",
        "pluginConfig": [
          {
            "args": {
              "ignorePvcPods": true,
              "nodeFit": true,
              "priorityThreshold": {
                "value": 100
              }
            },
            "name": "DefaultEvictor"
          },
          {
            "args": {
              "evictableNamespaces": {
                "exclude": ["kube-system"]
              },
              "thresholds": {
                "cpu": 25,
                "memory": 25
              }
            },
            "name": "HighNodeUtilization"
          }
        ],
        "plugins": {
          "balance": {
            "enabled": ["HighNodeUtilization"]
          }
        }
      }
    ]
  },
  "descheduler_enable": "true",
  "deschedulingInterval": "10m"
...
}
参数 说明
deschedulingInterval 重调度的周期。
deschedulerPolicy 集群重调度策略,详情请参见表4

表3 集群重调度策略关键参数

重调度6.png

表4 deschedulerPolicy配置参数


6. 完成以上配置后,单击“确定”。

  使用案例  

▍资源碎片整理策略(HighNodeUtilization)使用案例

1、单击集群控制台左侧导航栏的“节点管理”,查看集群之中的节点,发现存在部分分配率过低的节点。

重调度7.png

2、单击左侧导航栏的“配置中心”,在“调度配置”页面,选择Volcano调度器找到对应的“专家模式”,单击“开始使用”。

3、编辑Volcano参数,设置CPU和内存的阈值为25。即表示节点的分配率小于25%时,该节点上的Pod会被驱逐。

重调度8.png

4、设置该策略后,将192.168.44.152节点上的Pod迁移到节点192.168.54.65,达到碎片整理的目的。

重调度9.png


  常见问题  

当输入参数错误时,会有报警事件,例如:输入的配置不符合阈值范围、输入的配置格式不正确。如下图所示,可以按照事件提示进行修改。

重调度10.png



 


🌍 Volcano 是业界首个云原生批量计算引擎,也是 CNCF 首个和唯一的批量计算项目。项目主要用于 AI、大数据、基因、渲染等诸多高性能计算场景,对主流通用计算框架均有很好的支持。目前,Volcano在人工智能、大数据、基因测序等海量数据计算和分析场景已得到快速应用,已完成对 Spark、Flink、Ray、 Tensorflow、PyTorch、Argo、MindSpore、Paddlepaddle 、Kubeflow、MPI、Horovod、Mxnet、KubeGene 等众多主流计算框架的支持,并构建起完善的上下游生态。

📌 更多Volcano云原生批量计算 技术应用,请访问社区仓库或官网:

Volcano云原生批量计算社区官网:https://volcano.sh

Volcano GitHub 仓库: https://github.com/volcano-sh/volcano

Volcano云原生批量计算公开课:https://edu.huaweicloud.com/roadmap/cloudnative.html

华为云云容器引擎CCEhttps://www.huaweicloud.com/product/cce.html

容器模仿.png

更多云原生技术动向

关注容器魔方

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。