# 资源利用率优化调度配置案例
#### 概述
Volcano调度分为两个阶段，分别为节点过滤和节点优选，过滤阶段筛选出符合调度条件的节点，优选阶段对所有符合调度条件的节点打分，最终选取得分最高的节点进行调度。Volcano提供多种调度策略进行节点打分优选，每种调度策略可以根据实际业务场景调整对应的权重值，提高或降低该策略在节点打分过程中的影响性。
#### 节点优选调度策略介绍
Volcano插件支持的节点调度策略如下：
| 调度策略                              | 参数                        | 说明                       | 使用指导                                                                              |
|:---|:---|:---|:---|
| 装箱调度（binpack）                     | binpack.weight           | 装箱策略，开启后默认值是 10         | [装箱调度（Binpack）](https://support.huaweicloud.com/usermanual-cce/cce_10_0773.html) |
| 兼容kube-scheduler节点排序策略（nodeorder） | nodeaffinity.weight      | 节点亲和性优先调度，默认值是2。        | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | podaffinity.weight       | Pod亲和性优先调度，默认值是2。       | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | leastrequested.weight    | 资源分配最少的节点优先，默认值是1。       | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | balancedresource.weight    | 节点上面的不同资源分配平衡的优先，默认值是1。 | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | mostrequested.weight     | 资源分配最多的节点优先，默认值是0。      | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | tainttoleration.weight   | 污点容忍高的优先调度，默认值是3。        | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | imagelocality.weight      | 节点上面有Pod需要镜像的优先调度，默认值是1。  | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | selectorspread.weight    | 把Pod均匀调度到不同的节点上，默认值是0。    | 默认开启                                                                             |
| 兼容kube-scheduler节点排序策略（nodeorder） | podtopologyspread.weight  | Pod拓扑调度，默认值是2。           | 默认开启                                                                             |
| numa亲和性调度（numa-aware）             | weight                    | numa亲和性调度，开启后默认值是 1。   | [NUMA亲和性调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0425.html)       |
| 负载感知调度（usage）                     | weight                   | 负载感知调度，开启后默认值是 5         | [负载感知调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0789.html)         |
| 节点池亲和性调度（nodepoolaffinity）       | nodepoolaffinity.weight | 节点池亲和调度，开启后默认是 10000      | [节点池亲和性调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0767.html)       |
   
#### 如何减少节点资源碎片，提高集群资源利用率
集群中存在大作业（request资源量较大）和小作业（request资源量较少）混合提交并运行，希望小作业可以优先填满集群各节点的资源碎片，将空闲的节点资源优先预留给大作业运行，避免大作业由于节点资源不足长时间无法调度。
开启**装箱策略（binpack）** ，使用默认权重值10。插件详情与配置方法请参见[装箱调度（Binpack）](https://support.huaweicloud.com/usermanual-cce/cce_10_0773.html)。
配置建议如下：
- 优先减少集群中的CPU资源碎片：建议提高binpack策略中的CPU权重为5，Memory权重保持为1。
- 优先减少集群中的Memory资源碎片：建议提高binpack策略中的Memory权重为5，CPU权重保持为1。
- 优先减少集群中的GPU资源碎片：建议自定义资源类型（GPU），并设置GPU资源权重为10，CPU权重保持为1，Memory权重保持为1。
 
#### 如何使节点CPU、内存的真实负载趋于均衡
工作负载运行过程中，真实消耗的CPU和内存存在大的波动，通过工作负载request资源无法准确评估的场景中，希望调度器可以结合集群内节点CPU、内存的负载情况，将Pod优先调度到负载较低的节点，实现节点负载均衡，避免出现因单个节点负载过高而导致的应用程序或节点故障。
**配置案例1**
1. 开启**负载感知调度策略** ，使用默认权重值5。插件详情与配置方法请参见[负载感知调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0789.html)。
2. 关闭**装箱调度策略（binpack）** 。插件详情与配置方法请参见[装箱调度（Binpack）](https://support.huaweicloud.com/usermanual-cce/cce_10_0773.html)。
配置建议如下：
- 优先确保各节点CPU资源负载趋于均衡：建议提高负载感知调度的CPU权重为5， 内存权重保持为1。
- 优先确保各节点的内存资源负载趋于均衡：建议提高负载感知调度的内存权重为5，CPU权重保持为1。
- 真实负载阈值生效方式与CPU真实负载阈值和内存真实负载阈值联合生效：
  - 硬约束场景：
    - 节点CPU真实利用率超过CPU真实负载阈值后，该节点不允许调度新的工作负载。
    
    - 节点内存真实利用率超过内存真实负载阈值后，该节点不允许调度新的工作负载。
     
  
  - 软约束场景：
    - 节点CPU真实利用率超过CPU真实负载阈值后，尽可能不向该节点调度新的工作负载。
    
    - 节点内存真实利用率超过内存真实负载阈值后，尽可能不向该节点调度新的工作负载。
     
  
  - 希望集群内各节点的负载趋于均衡，同时希望尽可能提升集群资源利用率的场景：可以设置真实负载阈值生效方式为软约束，CPU真实负载阈值和内存真实负载阈值使用默认值80。
  
  - 希望优先确保工作负载的稳定性，降低热点节点CPU、内存压力的场景：可以设置真实负载阈值生效方式为硬约束，CPU真实负载阈值和内存真实负载阈值在60\~80之间设置。
   
**配置案例2**
随着集群状态，工作负载流量与请求的动态变化，节点的利用率也在实时变化，集群有可能会再次出现负载极端不均衡的情况，在业务Pod允许被驱逐重新调度的场景中，通过负载感知和热点打散重调度结合使用，可以获得集群最佳的负载均衡效果。关于热点打散重调度能力的使用请参见[重调度（Descheduler）](https://support.huaweicloud.com/usermanual-cce/cce_10_0766.html)。
1. 开启**负载感知调度策略** ，使用默认权重值5。插件详情与配置方法请参见[负载感知调度](https://support.huaweicloud.com/usermanual-cce/cce_10_0789.html)。
2. 开启**重调度能力** ，完成负载感知重调度策略配置。插件详情与配置方法请参见[重调度（Descheduler）](https://support.huaweicloud.com/usermanual-cce/cce_10_0766.html)。
3. 关闭**装箱调度策略（binpack）** 。插件详情与配置方法请参见[装箱调度（Binpack）](https://support.huaweicloud.com/usermanual-cce/cce_10_0773.html)。
配置建议如下：
- 负载感知重调度策略配置推荐
  - 高负载节点驱逐pod的阈值信息targetThreshold：cpu为75、memory为70。
  
  - 低负载节点承接pod的阈值信息thresholds：cpu为30、memory为30。
   
- 负载感知调度的真实负载阈值应介于重调度高负载节点与低负载节点阈值之间
  - CPU真实负载阈值 65
  
  - 内存真实负载阈值 60
   
 
