通过修改kube-scheduler的自定义参数,您可以根据需要自定义调度器的行为,使得Pod的调度更符合您的期望,例如是否使用Binpack策略、是否开启负载感知调度能力等。
前提条件
已创建1.20及以上版本的ACK托管集群Pro版、ACK Edge集群Pro版、ACK灵骏集群、ACK Serverless集群Pro版。如需升级集群,请参见手动升级集群。
使用限制
对于不同版本的ACK托管集群Pro版以及ACK Edge集群Pro版,支持自定义参数的调度器需满足如下版本要求。
所有已安装Kube Scheduler的ACK Serverless集群Pro版以及ACK灵骏集群均支持自定义参数功能。
| 集群版本 | 支持自定义参数的调度器版本 | 
| 1.28及以上 | 均可支持 | 
| 1.26 | v1.26.3-aliyun-4.1及以上 | 
| 1.24 | v1.24.6-ack-3.1及以上 | 
| 1.22 | v1.22.15-ack-2.0及以上 | 
| 1.20 | v1.20.11-9.0-bcaa6001-aliyun及以上 | 
操作步骤
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。 
- 在核心组件页签区域,定位kube-scheduler组件,单击卡片右下方的配置,在对话框中按照页面提示完成参数的配置。 - 不同版本调度器支持的功能不同,其支持的自定义参数也有所区别。关于不同版本调度器支持的功能,请参见kube-scheduler。自定义参数的含义及其用法,如下表所示。 - 配置项 - 说明 - 类型 - 取值(范围) - 默认值 - 开启虚拟节点调度 - 开启后,Pod在虚拟节点上的调度行为同样遵循节点亲和、打散等语义。 - bool - true 
- false 
 - true - podMaxBackoffSeconds - Pod调度失败后回退秒数(Backoffseconds)的最大值。Pod两次调度之间的时间间隔大于配置的回退秒数。 - int - [1,100000] - 10 - Pod 调度时启用优先集中放置策略 - 开启或关闭Binpack策略。 - 您可以参见下文Binpack自定义参数配置示例。 - bool - false 
- true 
 - false - binpackPluginWeight - Binpack插件打分时相比于其他打分插件的权重。需同时选中Pod 调度时启用优先集中放置策略。 - int - [1,100000] - 100 - binpackResourceWeight - Binpack插件打分时各种资源所占的比重。需同时选中Pod 调度时启用优先集中放置策略。 - resourceName: string 
- resourceWeight: int 
 - resourceName使用schema进行校验,只允许使用字母、数字、英文半角句号(.)、正斜线(/)和短划线(-)。 
- resourceWeight为整数,取值范围为[1,10000]。 
 - cpu:1 
- memory:1 
 - scorePluginWeights - 打分时各种插件的权重。 说明- NodeResourceFit插件权重与Binpack插件权重冲突。当勾选了Pod 调度时启用优先集中放置策略后,该项配置中请勿配置NodeResourceFit插件的权重。 - plugin: string 
- weight: int 
 - plugin仅支持使用开放的插件列表。 
- weight为整数,取值范围为[1,10000]。 
 - plugin: NodeAffinity 
- weight: 100 
 - percentageOfNodesToScore - 调度时评估的可运行节点的比例。 - 默认值为0,表示调度器会使用默认节点数百分比(基于集群规模确定的值,位于5%到50%之间)执行打分操作。 - int - [0,100] - 0 - 开启共享 GPU 插件的打分功能 - 在使用共享GPU能力(共享GPU调度需要开通AI套件使用)时,调度GPU Pod时优先选择显存申请量及算力申请量更高的GPU。 - bool - false 
- true 
 - true - Pod 调度时启用负载感知的打分能力(loadAwareResourceWeight) - 开启负载感知调度能力,需要安装ack-koordinator组件。 - bool - false 
- true 
 - false - loadAwareThreshold - 对应节点筛选策略,表示资源类型对应的阈值。 - 由资源名resourceName和权重threshold组成的列表。 - resourceName:支持cpu和memory两种类型。 
- threshold:[0,100]。 
 - 默认值为空,即不开启筛选功能。 - resourceName:cpu 
- threshold:80 
 - loadAwareResourceWeight - 对应节点排序策略,表示资源类型对应的打分权重。需要勾选Pod 调度时启用负载感知的打分能力 。 - 由资源名resourceName和权重resourceWeight组成的列表。 - resourceName:使用schema进行校验,仅支持 - cpu或- memory。
- resourceWeight:整数,取值范围为[1,100]。 
 - cpu=1 
- memory=1 
 - loadAwareAggregatedUsageAggregationType - 负载统计值的聚合类型。各类型具体含义为: - avg:平均值。 
- p50:50%分位值,即中位数。 
- p90、p95、p99:分别表示90%、95%、99%分位值。 
 - enum - avg 
- p50 
- p90 
- p95 
- p99 
 - avg - preemptionAlgorithm - ACK Scheduler通过资源模拟判断是否能够驱逐某些低优任务Pod,优先保障高优任务的快速启动。支持策略如下: - Default:Kubernetes社区默认抢占机制。 
- ElasticQuota:基于ElasticQuotaTree进行抢占。 
- Auto:根据集群配置调整抢占策略。 
- None:不开启。 
 - 详情请参见开启抢占。 - enum - Default 
- ElasticQuota 
- Auto 
- None 
 - Auto - enableReservation - 开启资源预留功能。 - boolean - true 
- false 
 - false - featureGates - 调度器启用的特性门控。各个版本支持的特性门控请参见Kubernetes官方文档kube-scheduler。 - string - 不涉及。 - 与Kubernetes社区特性门控保持一致。 
下文示例介绍自定义参数的使用方法。
Binpack自定义参数
Binpack策略与Spread策略对比
| 维度 | Binpack策略 | Spread策略 | 
| 调度策略 | 
 | 
 | 
| 特点 | 减少节点上的资源碎片。 | 
 | 
| 适用场景 | 提升节点利用率场景。 | 节点高可用场景。 | 
使用Binpack自定义参数
您可以在Pod调度时启用Binpack策略,即开启Pod 调度时启用优先集中放置策略,并设置Binpack打分插件相比于其他打分插件的权重。权重越大,Pod调度时越可能优先调度到同一节点上。您也可以设置Binpack插件打分时参考的资源名及资源所占的权重。权重越大,Binpack插件打分时该种资源对Pod调度产生的影响越大。
您可以在组件管理页面的核心组件页签,定位kube-scheduler组件,单击配置,然后在对话框中配置Binpack相关的自定义参数。
| 配置项 | 示例说明 | 
| Pod 调度时启用优先集中放置策略 | 开启开关。 | 
| binpackPluginWeight | 配置Binpack的权重,一般情况下无需更改。当打开Binpack开关后没有产生效果时,可以适当调高Binpack的权重,例如200。详细信息,请参见binpack权重。 | 
| 不同资源的Binpack策略 | 详细的配置示例,请参见Enabling bin packing using MostAllocated strategy。 
 | 
如果您开启了Pod 调度时启用优先集中放置策略,而没有在binpackResourceWeight配置任何resourceName以及resourceWeight时,系统会以CPU和Memory进行Binpack的默认设置,此时Binpack策略与以下设置的效果相同。

相关文档
推荐您启用负载感知调度功能,根据节点的真实资源用量(而不是已申请的资源量)完成节点的调度,请参见使用负载感知调度。