更新时间:2024-09-29 GMT+08:00

节点池亲和性调度

在替换节点池、节点滚动升级等场景中,需要使用新节点池替换旧节点池。在这些场景下,为做到业务不感知,可以在业务触发变更时,将业务的Pod软亲和调度到新的节点池上。这种软亲和调度会尽量将新创建的Pod或者重调度的Pod调度到新的节点池,如果新节点池资源不足,或者新节点池无法调度,也要能将Pod调度到旧节点池上。节点池替换、节点滚动升级等场景中,业务不需要也不应该感知,所以不会在业务负载中声明节点亲和配置,而需要在集群调度层面,使用软亲和方式,在业务变更时将Pod尽量调度到新的节点池上。

Volcano的目标是在业务负载未配置节点软亲和时,在调度层将业务的Pod软调度到指定节点上。

调度优先级介绍

节点池软亲和调度,是通过节点池上的标签(Label)进行软亲和,具体是通过给每一个节点进行打分的机制来排序筛选最优节点。

原则:尽可能把Pod调度到带有相关标签的节点上。

打分公式如下:

score = weight * MaxNodeScore * haveLabel

参数说明:

  • weight:节点池软亲和plugin的权重。
  • MaxNodeScore:节点最大得分,值为100。
  • haveLabel:节点上是否存在插件中配置的label,如果有,值为1,如果节点上没有,值为0。

前提条件

配置Volcano节点池软亲和调度策略

  1. 在节点池上配置用于亲和调度的标签。

    1. 登录CCE控制台。
    2. 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。
    3. 单击节点池名称后的“更新”,在弹出的“更新节点池”页面中配置参数,在“K8s标签”中配置对应的标签。

      示例如下:

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

  3. 设置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"
                        }
                    ]
                }
            ]
        },
    ...

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