节点池亲和性调度
在替换节点池、节点滚动升级等场景中,需要使用新节点池替换旧节点池。在这些场景下,为做到业务不感知,可以在业务触发变更时,将业务的Pod软亲和调度到新的节点池上。这种软亲和调度会尽量将新创建的Pod或者重调度的Pod调度到新的节点池,如果新节点池资源不足,或者新节点池无法调度,也要能将Pod调度到旧节点池上。节点池替换、节点滚动升级等场景中,业务不需要也不应该感知,所以不会在业务负载中声明节点亲和配置,而需要在集群调度层面,使用软亲和方式,在业务变更时将Pod尽量调度到新的节点池上。
Volcano的目标是在业务负载未配置节点软亲和时,在调度层将业务的Pod软调度到指定节点上。
调度优先级介绍
节点池软亲和调度,是通过节点池上的标签(Label)进行软亲和,具体是通过给每一个节点进行打分的机制来排序筛选最优节点。
原则:尽可能把Pod调度到带有相关标签的节点上。
打分公式如下:
score = weight * MaxNodeScore * haveLabel
参数说明:
- weight:节点池软亲和plugin的权重。
- MaxNodeScore:节点最大得分,值为100。
- haveLabel:节点上是否存在插件中配置的label,如果有,值为1,如果节点上没有,值为0。
前提条件
- 已创建v1.19.16及以上版本的集群,具体操作请参见购买Standard/Turbo集群。
- 集群中已安装1.11.5及以上版本的Volcano插件,具体操作请参见Volcano调度器。
配置Volcano节点池软亲和调度策略
- 在节点池上配置用于亲和调度的标签。
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。
- 单击节点池名称后的“更新”,在弹出的“更新节点池”页面中配置参数,在“K8s标签”中配置对应的标签。
示例如下:
- 单击左侧导航栏的“配置中心”,切换至“调度配置”页面,选择Volcano调度器找到对应的“专家模式”,单击“开始使用”。
- 设置Volcano调度器配置参数,JSON格式的配置示例如下。
... "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { // 开启节点池亲和性调度 "name": "nodepoolaffinity", // 节点池亲和性调度权重及标签设置 "arguments": { "nodepoolaffinity.weight": 10000, "nodepoolaffinity.label": "nodepool1=nodepool1" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, ...
- 完成以上配置后,单击“确定”。