更新时间:2024-03-22 GMT+08:00
分享

Volcano调度器

插件简介

Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。

Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户,最大支持1000Pod/s的调度并发数,轻松应对各种规模的工作负载,大大提高调度效率和资源利用率。

Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括:

  • 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。
  • 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。
  • 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。

目前Volcano项目已经在Github开源,项目开源地址:https://github.com/volcano-sh/volcano

本文介绍如何在CCE集群中安装及配置Volcano插件,具体使用方法请参见Volcano调度

在使用Volcano作为调度器时,建议将集群中所有工作负载都使用Volcano进行调度,以避免多调度器同时工作导致的一些调度资源冲突问题。

安装插件

  1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”
  2. 在安装插件页面,设置“规格配置”

    表1 Volcano插件规格配置

    参数

    参数说明

    插件规格

    该插件可配置“单实例”“高可用”“自定义”规格。

    实例数

    选择上方插件规格后,显示插件中的实例数。

    选择“自定义”规格时,您可根据需求调整插件实例数。

    容器

    选择插件规格后,显示插件容器的CPU和内存配额。

    选择“自定义”规格时,volcano-controller和volcano-scheduler的建议值如下:

    • 小于100个节点,可使用默认配置,即CPU的申请值为500m,限制值为2000m;内存的申请值为500Mi,限制值为2000Mi。
    • 高于100个节点,每增加100个节点(10000个Pod),建议CPU的申请值增加500m,内存的申请值增加1000Mi;CPU的限制值建议比申请值多1500m,内存的限制值建议比申请值多1000Mi。
      说明:

      申请值推荐计算公式:

      • CPU申请值:计算“目标节点数 * 目标Pod规模”的值,并在表2中根据“集群节点数 * Pod规模”的计算值进行插值查找,向上取最接近规格的申请值及限制值。

        例如2000节点和2w个Pod的场景下,“目标节点数 * 目标Pod规模”等于4000w,向上取最接近的规格为700/7w(“集群节点数 * Pod规模”等于4900w),因此建议CPU申请值为4000m,限制值为5500m。

      • 内存申请值:建议每1000个节点分配2.4G内存,每1w个Pod分配1G内存,二者叠加进行计算。(该计算方法相比表2中的建议值会存在一定的误差,通过查表或计算均可)

        即:内存申请值 = 目标节点数/1000 * 2.4G + 目标Pod规模/1w * 1G。

        例如2000节点和2w个Pod的场景下,内存申请值 = 2 * 2.4G + 2 * 1G = 6.8G

    表2 volcano-controller和volcano-scheduler的建议值

    集群节点数/Pod规模

    CPU Request(m)

    CPU Limit(m)

    Memory Request(Mi)

    Memory Limit(Mi)

    50/5k

    500

    2000

    500

    2000

    100/1w

    1000

    2500

    1500

    2500

    200/2w

    1500

    3000

    2500

    3500

    300/3w

    2000

    3500

    3500

    4500

    400/4w

    2500

    4000

    4500

    5500

    500/5w

    3000

    4500

    5500

    6500

    600/6w

    3500

    5000

    6500

    7500

    700/7w

    4000

    5500

    7500

    8500

  3. 设置插件支持的“参数配置”

    配置Volcano默认调度器配置参数,详情请参见表4
    colocation_enable: ''
    default_scheduler_conf:
      actions: 'allocate, backfill'
      tiers:
        - plugins:
            - name: 'priority'
            - name: 'gang'
            - name: 'conformance'
            - name: 'lifecycle'
              arguments:
                lifecycle.MaxGrade: 10
                lifecycle.MaxScore: 200.0
                lifecycle.SaturatedTresh: 1.0
                lifecycle.WindowSize: 10
        - plugins:
            - name: 'drf'
            - name: 'predicates'
            - name: 'nodeorder'
        - plugins:
            - name: 'cce-gpu-topology-predicate'
            - name: 'cce-gpu-topology-priority'
            - name: 'cce-gpu'
        - plugins:
            - name: 'nodelocalvolume'
            - name: 'nodeemptydirvolume'
            - name: 'nodeCSIscheduling'
            - name: 'networkresource'
    tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 60
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 60
    表3 Volcano高级配置参数说明

    插件

    功能

    参数说明

    用法演示

    colocation_enable

    是否开启混部能力。

    参数值:

    • true:表示开启混部。
    • false:表示不开启混部。

    -

    default_scheduler_conf

    负责Pod调度的组件配置,由一系列action和plugin组成。具有高度的可扩展性,您可以根据需要实现自己的action和plugin。

    主要包括actions和tiers两部分:

    • actions:定义调度器需要执行的action类型及顺序。
    • tiers:配置plugin列表。

    -

    actions

    定义了调度各环节中需要执行的动作,action的配置顺序就是scheduler的执行顺序。详情请参见Actions

    调度器会遍历所有的待调度Job,按照定义的次序依次执行enqueue、allocate、preempt、backfill等动作,为每个Job找到一个最合适的节点。

    支持的参数值:

    • enqueue:负责通过一系列的过滤算法筛选出符合要求的待调度任务并将它们送入待调度队列。经过这个action,任务的状态将由pending变为inqueue。
    • allocate:负责通过一系列的预选和优选算法筛选出最适合的节点。
    • preempt:负责根据优先级规则为同一队列中高优先级任务执行抢占调度。
    • backfill:负责将处于pending状态的任务尽可能的调度下去以保证节点资源的最大化利用。
    actions: 'allocate, backfill'
    说明:

    配置action时,preempt和enqueue不可同时使用。

    plugins

    根据不同场景提供了action中算法的具体实现细节,详情请参见Plugins

    支持的参数值请参见表4

    -

    tolerations

    插件实例对节点污点的容忍度设置。

    默认配置下,插件实例可以运行在拥有“node.kubernetes.io/not-ready”“node.kubernetes.io/unreachable”污点,且污点效果值为NoExecute的节点上,但会在60秒后被驱逐。

    tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 60
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 60
    表4 支持的Plugins列表

    插件

    功能

    参数说明

    用法演示

    binpack

    将Pod调度到资源使用较高的节点(尽量不往空白节点分配),以减少资源碎片。

    arguments参数:

    • binpack.weight:binpack插件本身在所有插件打分中的权重。
    • binpack.cpu:CPU资源在所有资源中的权重,默认是1。
    • binpack.memory:内存资源在所有资源中的权重,默认是1。
    • binpack.resources:Pod请求的其他自定义资源类型,例如nvidia.com/gpu。可添加多个并用英文逗号隔开。
    • binpack.resources.<your_resource>:自定义资源在所有资源中的权重,可添加多个类型的资源,其中<your_resource>为binpack.resources参数中定义的资源类型。例如binpack.resources.nvidia.com/gpu。
    - plugins:
      - name: binpack
        arguments:
          binpack.weight: 10
          binpack.cpu: 1
          binpack.memory: 1
          binpack.resources: nvidia.com/gpu, example.com/foo
          binpack.resources.nvidia.com/gpu: 2
          binpack.resources.example.com/foo: 3

    conformance

    跳过关键Pod(比如在kube-system命名空间的Pod),防止这些Pod被驱逐。

    -

    - plugins:
      - name: 'priority'
      - name: 'gang'
        enablePreemptable: false
      - name: 'conformance'

    lifecycle

    通过统计业务伸缩的规律,将有相近生命周期的Pod优先调度到同一节点,配合autoscaler的水平扩缩容能力,快速缩容释放资源,节约成本并提高资源利用率。

    1. 统计业务负载中Pod的生命周期,将有相近生命周期的Pod调度到同一节点

    2. 对配置了自动扩缩容策略的集群,通过调整节点的缩容注解,优先缩容使用率低的节点

    arguments参数:
    • lifecycle.WindowSize:为int型整数,不小于1,默认为10。

      记录副本数变更的次数,负载变化规律、周期性明显时可适当调低;变化不规律,副本数频繁变化需要调大。若过大会导致学习周期变长,记录事件过多。

    • lifecycle.MaxGrade:为int型整数,不小于3,默认为3。

      副本分档数,如设为3,代表分为高中低档。负载变化规律、周期性明显时可适当调低;变化不规律,需要调大。若过小会导致预测的生命周期不够准确。

    • lifecycle.MaxScore:为float64浮点数,不小于50.0,默认为200.0。

      lifecycle插件的最大得分,等效于插件权重。

    • lifecycle.SaturatedTresh:为float64浮点数,小于0.5时取值为0.5;大于1时取值为1,默认为0.8。

      用于判断节点利用率是否过高的阈值,当超过该阈值,调度器会优先调度作业至其他节点。

    - plugins:
      - name: priority
      - name: gang
        enablePreemptable: false
      - name: conformance
      - name: lifecycle
        arguments:
          lifecycle.MaxGrade: 10
          lifecycle.MaxScore: 200.0
          lifecycle.SaturatedTresh: 1.0
          lifecycle.WindowSize: 10
    说明:
    • 对不希望被缩容的节点,需要手动标记长周期节点,为节点添加volcano.sh/long-lifecycle-node: true的annotation。对未标记节点,lifecycle插件将根据节点上负载的生命周期自动标记。
    • MaxScore默认值200.0相当于其他插件权重的两倍,当lifecycle插件效果不明显或与其他插件冲突时,需要关闭其他插件,或将MaxScore调大。
    • 调度器重启后,lifecycle插件需要重新记录负载的变化状况,需要统计数个周期后才能达到最优调度效果。

    gang

    将一组Pod看做一个整体进行资源分配。观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。

    说明:

    使用gang调度策略时,当集群剩余的资源大于等于Job的最小运行数量的1/2、但小于Job的最小运行数量时,不会触发autoscaler扩容。

    • enablePreemptable:
      • true:表示开启抢占。
      • false:表示不开启抢占。
    • enableJobStarving:
      • true: 表示按照Job的minAvailable进行抢占。
      • false:表示按照Job的replicas进行抢占。
      说明:
      • Kubernetes原生工作负载(如Deployment)的minAvailable默认值为1,建议配置enableJobStarving: false。
      • AI大数据场景,创建vcjob时可指定minAvailable值,推荐配置enableJobStarving: true。
      • Volcano 1.11.5之前的版本enableJobStarving默认为true,1.11.5之后的版本默认配置为false。
    - plugins:
      - name: priority
      - name: gang
        enablePreemptable: false
        enableJobStarving: false
      - name: conformance

    priority

    根据自定义的负载优先级进行调度。

    -

    - plugins:
      - name: priority
      - name: gang
        enablePreemptable: false
      - name: conformance

    overcommit

    将集群的资源放到一定倍数后调度,提高负载入队效率。负载都是deployment的时候,建议去掉此插件或者设置扩大因子为2.0。

    说明:

    该插件在Volcano 1.6.5及以上版本中支持使用。

    arguments参数:

    • overcommit-factor:扩大因子,默认是1.2。
    - plugins:
      - name: overcommit
        arguments:
          overcommit-factor: 2.0

    drf

    DRF调度算法(Dominant Resource Fairness)可以根据作业使用的主导资源份额进行调度,资源份额较小的作业将具有更高优先级。

    -

    - plugins:
      - name: 'drf'
      - name: 'predicates'
      - name: 'nodeorder'

    predicates

    预选节点的常用算法,包括节点亲和、Pod亲和、污点容忍、Node重复,volume limits,volume zone匹配等一系列基础算法。

    -

    - plugins:
      - name: 'drf'
      - name: 'predicates'
      - name: 'nodeorder'

    nodeorder

    优选节点的常用算法,通过模拟分配从各个维度为节点打分,找到最适合当前作业的节点。

    打分参数:

    • nodeaffinity.weight:节点亲和性优先调度,默认值是2。
    • podaffinity.weight:Pod亲和性优先调度,默认值是2。
    • leastrequested.weight:资源分配最少的节点优先,默认值是1。
    • balancedresource.weight:节点上面的不同资源分配平衡的优先,默认值是1。
    • mostrequested.weight:资源分配最多的节点优先,默认值是0。
    • tainttoleration.weight:污点容忍高的优先调度,默认值是3。
    • imagelocality.weight:节点上面有Pod需要镜像的优先调度,默认值是1。
    • selectorspread.weight:把Pod均匀调度到不同的节点上,默认值是0。
    • podtopologyspread.weight:Pod拓扑调度,默认值是2。
    - plugins:
      - name: nodeorder
        arguments:
          leastrequested.weight: 1
          mostrequested.weight: 0
          nodeaffinity.weight: 2
          podaffinity.weight: 2
          balancedresource.weight: 1
          tainttoleration.weight: 3
          imagelocality.weight: 1
          podtopologyspread.weight: 2

    cce-gpu-topology-predicate

    GPU拓扑调度预选算法

    -

    - plugins:
      - name: 'cce-gpu-topology-predicate'
      - name: 'cce-gpu-topology-priority'
      - name: 'cce-gpu'

    cce-gpu-topology-priority

    GPU拓扑调度优选算法

    -

    - plugins:
      - name: 'cce-gpu-topology-predicate'
      - name: 'cce-gpu-topology-priority'
      - name: 'cce-gpu'

    cce-gpu

    结合CCE的GPU插件支持GPU资源分配,支持小数GPU配置。

    说明:
    • 1.10.5及以上版本的插件不再支持该插件,请使用xgpu插件。
    • 小数GPU配置的前提条件为CCE集群GPU节点为共享模式,检查集群是否关闭GPU共享,请参见集群配置管理中的enable-gpu-share参数。

    -

    - plugins:
      - name: 'cce-gpu-topology-predicate'
      - name: 'cce-gpu-topology-priority'
      - name: 'cce-gpu'

    xgpu

    支持GPU虚拟化资源分配。

    -

    - plugins:
      - name: 'cce-gpu-topology-predicate'
      - name: 'cce-gpu-topology-priority'
      - name: 'cce-gpu'
      - name: 'xgpu'

    numa-aware

    NUMA亲和性调度,详情请参见NUMA亲和性调度

    arguments参数:

    • weight:插件的权重。
    - plugins:
      - name: 'nodelocalvolume'
      - name: 'nodeemptydirvolume'
      - name: 'nodeCSIscheduling'
      - name: 'networkresource'
        arguments:
          NetworkType: vpc-router
      - name: numa-aware
        arguments:
          weight: 10

    networkresource

    支持预选过滤ENI需求节点,参数由CCE传递,不需要手动配置。

    arguments参数:

    • NetworkType:网络类型(eni或者vpc-router类型)。
    - plugins:
      - name: 'nodelocalvolume'
      - name: 'nodeemptydirvolume'
      - name: 'nodeCSIscheduling'
      - name: 'networkresource'
        arguments:
          NetworkType: vpc-router

    nodelocalvolume

    支持预选过滤不符合local volume需求的节点。

    -

    - plugins:
      - name: 'nodelocalvolume'
      - name: 'nodeemptydirvolume'
      - name: 'nodeCSIscheduling'
      - name: 'networkresource'

    nodeemptydirvolume

    支持预选过滤不符合emptydir需求的节点。

    -

    - plugins:
      - name: 'nodelocalvolume'
      - name: 'nodeemptydirvolume'
      - name: 'nodeCSIscheduling'
      - name: 'networkresource'

    nodeCSIscheduling

    支持预选过滤everest组件异常的节点。

    -

    - plugins:
      - name: 'nodelocalvolume'
      - name: 'nodeemptydirvolume'
      - name: 'nodeCSIscheduling'
      - name: 'networkresource'

  4. 设置插件实例的“调度策略”

    • 调度策略对于DaemonSet类型的插件实例不会生效。
    • 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
    表5 插件调度配置

    参数

    参数说明

    多可用区部署

    • 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区。
    • 强制模式:插件Deployment实例强制调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将无法全部运行。

    节点亲和

    • 不亲和:插件实例不指定节点亲和调度。
    • 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。
    • 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。
    • 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。

      同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。

    容忍策略

    容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。

    插件会对实例添加针对node.kubernetes.io/not-readynode.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。

    详情请参见容忍策略

  5. 单击“安装”

组件说明

表6 Volcano组件

容器组件

说明

资源类型

volcano-scheduler

负责Pod调度。

Deployment

volcano-controller

负责CRD资源的同步。

Deployment

volcano-admission

Webhook server端,负责Pod、Job等资源的校验和更改。

Deployment

volcano-agent

云原生混部agent,负责节点QoS保障、CPU Burst和动态资源超卖等。

DaemonSet

resource-exporter

负责上报节点的NUMA拓扑信息。

DaemonSet

在控制台中修改volcano-scheduler配置

volcano-scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action 中算法的具体实现细节。volcano-scheduler具有高度的可扩展性,您可以根据需要实现自己的action和plugin。

Volcano允许用户在安装,升级,编辑时,编写Volcano调度器配置信息,并将配置内容同步到volcano-scheduler-configmap里。

当前小节介绍如何使用自定义配置,以便用户让volcano-scheduler能更适合自己的场景。

仅Volcano 1.7.1及以上版本支持该功能。在新版插件界面上合并了原resource_exporter_enable等选项,以新选项default_scheduler_conf代替。

您可登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”“升级”,并在“参数配置”中设置Volcano调度器配置参数。

  • 使用resource_exporter配置,示例如下:
    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "allocate, backfill",
            "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": "numa-aware" # add this also enable resource_exporter
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }

    开启后可以同时使用volcano-scheduler的numa-aware插件功能和resource_exporter功能。

保留原volcano-scheduler-configmap配置

假如在某场景下希望插件升级后时沿用原配置,可参考以下步骤:

  1. 查看原volcano-scheduler-configmap配置,并备份。

    示例如下:
    # kubectl edit cm volcano-scheduler-configmap -n kube-system
    apiVersion: v1
    data:
      default-scheduler.conf: |-
        actions: "enqueue, allocate, backfill"
        tiers:
        - plugins:
          - name: priority
          - name: gang
          - name: conformance
        - plugins:
          - name: drf
          - name: predicates
          - name: nodeorder
          - name: binpack
            arguments:
              binpack.cpu: 100
              binpack.weight: 10
              binpack.resources: nvidia.com/gpu
              binpack.resources.nvidia.com/gpu: 10000
        - plugins:
          - name: cce-gpu-topology-predicate
          - name: cce-gpu-topology-priority
          - name: cce-gpu
        - plugins:
          - name: nodelocalvolume
          - name: nodeemptydirvolume
          - name: nodeCSIscheduling
          - name: networkresource

  2. 在控制台“参数配置”中填写自定义修改的内容:

    {
        "ca_cert": "",
        "default_scheduler_conf": {
            "actions": "enqueue, allocate, backfill",
            "tiers": [
                {
                    "plugins": [
                        {
                            "name": "priority"
                        },
                        {
                            "name": "gang"
                        },
                        {
                            "name": "conformance"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "drf"
                        },
                        {
                            "name": "predicates"
                        },
                        {
                            "name": "nodeorder"
                        },
                        {
                            "name": "binpack",
                            "arguments": {
                                "binpack.cpu": 100,
                                "binpack.weight": 10,
                                "binpack.resources": "nvidia.com/gpu",
                                "binpack.resources.nvidia.com/gpu": 10000
                            }
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "cce-gpu-topology-predicate"
                        },
                        {
                            "name": "cce-gpu-topology-priority"
                        },
                        {
                            "name": "cce-gpu"
                        }
                    ]
                },
                {
                    "plugins": [
                        {
                            "name": "nodelocalvolume"
                        },
                        {
                            "name": "nodeemptydirvolume"
                        },
                        {
                            "name": "nodeCSIscheduling"
                        },
                        {
                            "name": "networkresource"
                        }
                    ]
                }
            ]
        },
        "server_cert": "",
        "server_key": ""
    }

    使用该功能时会覆盖原volcano-scheduler-configmap中内容,所以升级时务必检查是否在volcano-scheduler-configmap做过修改。如果是,需要把修改内容同步到升级界面里。

Prometheus指标采集

volcano-scheduler通过端口8080暴露Prometheus metrics指标。您可以自建Prometheus采集器识别并通过http://{{volcano-schedulerPodIP}}:{{volcano-schedulerPodPort}}/metrics路径获取volcano-scheduler调度相关指标。

Prometheus指标暴露仅支持Volcano插件1.8.5及以上版本。

表7 关键指标说明

指标名称

指标类型

描述

Labels

e2e_scheduling_latency_milliseconds

Histogram

端到端调度时延毫秒(调度算法+绑定)

-

e2e_job_scheduling_latency_milliseconds

Histogram

端到端作业调度时延(毫秒)

-

e2e_job_scheduling_duration

Gauge

端到端作业调度时长

labels=["job_name", "queue", "job_namespace"]

plugin_scheduling_latency_microseconds

Histogram

插件调度延迟(微秒)

labels=["plugin", "OnSession"]

action_scheduling_latency_microseconds

Histogram

动作调度时延(微秒)

labels=["action"]

task_scheduling_latency_milliseconds

Histogram

任务调度时延(毫秒)

-

schedule_attempts_total

Counter

尝试调度Pod的次数。“unschedulable”表示无法调度Pod,而“error”表示内部调度器问题

labels=["result"]

pod_preemption_victims

Gauge

选定的抢占受害者数量

-

total_preemption_attempts

Counter

集群中的抢占尝试总数

-

unschedule_task_count

Gauge

无法调度的任务数

labels=["job_id"]

unschedule_job_count

Gauge

无法调度的作业数

-

job_retry_counts

Counter

作业的重试次数

labels=["job_id"]

Volcano 1.0.0版本升级说明

Volcano 1.0.0版本与后续版本不兼容,不支持在控制台升级。如想使用新版本Volcano插件,需要先卸载1.0.0版本,然后再在控制台安装新版本。

执行如下命令可以卸载Volcano。

kubectl delete crd jobs.batch.volcano.sh

kubectl delete crd commands.bus.volcano.sh

Volcano插件卸载说明

卸载插件时,会将Volcano的自定义资源(表8)全部清理,已创建的相关资源也将同步删除,重新安装插件不会继承和恢复卸载之前的任务信息。如集群中还存在正在使用的Volcano自定义资源,请谨慎卸载插件。

表8 Volcano自定义资源

名称

API组

API版本

资源级别

Command

bus.volcano.sh

v1alpha1

Namespaced

Job

batch.volcano.sh

v1alpha1

Namespaced

Numatopology

nodeinfo.volcano.sh

v1alpha1

Cluster

PodGroup

scheduling.volcano.sh

v1beta1

Namespaced

Queue

scheduling.volcano.sh

v1beta1

Cluster

版本记录

建议升级到跟集群配套的最新Volcano版本。

表9 Volcano调度器版本记录

插件版本

支持的集群版本

更新特性

1.12.1

v1.19.16

v1.21

v1.23

v1.25

v1.27

v1.28

应用弹性扩缩容性能优化

1.11.21

v1.19.16

v1.21

v1.23

v1.25

v1.27

v1.28

  • 支持Kubernetes v1.28
  • 支持负载感知调度
  • 镜像OS更新为HCE 2.0
  • 优化CSI资源抢占能力
  • 优化负载感知重调度能力
  • 优化混部场景抢占能力

1.11.9

v1.19.16

v1.21

v1.23

v1.25

v1.27

  • 优化昇腾芯片rank table排序能力
  • 支持应用弹性伸缩场景下的优先级调度

1.11.6

v1.19.16

v1.21

v1.23

v1.25

v1.27

  • 支持Kubernetes v1.27
  • 支持重调度功能
  • 支持节点池亲和调度能力
  • 优化调度性能

1.10.14

v1.19.16

v1.21

v1.23

v1.25

  • 支持GPU资源抢占
  • 优化混部弹性限流功能
  • 增强可用区拓扑分布能力
  • 优化昇腾芯片rank table排序能力
  • 优化GPU虚拟化功能
  • 提升与CA联动扩容效率
  • 提升调度稳定性
  • 优化持久卷调度逻辑
  • 优化日志信息

1.10.7

v1.19.16

v1.21

v1.23

v1.25

修复本地持久卷插件未计算预绑定到节点的pod的问题

1.10.5

v1.19.16

v1.21

v1.23

v1.25

  • volcano agent支持资源超卖。
  • 添加针对GPU资源字段的校验admission:nvidia.com/gpu应小于1或者为正整数,volcano.sh/gpu-core.percentage应小于100并为5的倍数。
  • 修复存在PVC绑定失败的场景下,后续提交Pod调度慢的问题。
  • 修复节点上存在长时间Teminating Pod场景下,新提交Pod无法运行的问题。
  • 修复并发创建挂载PVC的Pod的场景下,volcano重启的问题。

1.9.1

v1.19.16

v1.21

v1.23

v1.25

  • 修复networkresource插件计数pipeline pod占用subeni问题
  • 修复binpack插件对资源不足节点打分问题
  • 修复对结束状态未知的Pod的资源的处理
  • 优化事件输出
  • 默认高可用部署

1.7.2

v1.19.16

v1.21

v1.23

v1.25

  • Volcano支持v1.25集群
  • 提升Volcano调度性能

1.7.1

v1.19.16

v1.21

v1.23

v1.25

Volcano支持v1.25集群

1.4.7

v1.15

v1.17

v1.19

v1.21

删除Pod状态Undetermined,以适配集群Autoscaler的弹性能力。

1.4.5

v1.17

v1.19

v1.21

volcano-scheduler的部署方式由StatefulSet调整为Deployment,修复节点异常时Pod无法自动迁移的问题

1.4.2

v1.15

v1.17

v1.19

v1.21

  • 修复跨GPU分配失败问题
  • 适配更新后的EAS API

1.3.7

v1.15

v1.17

v1.19

v1.21

  • 支持在/离线作业混合部署及资源超卖功能
  • 优化集群调度吞吐性能
  • 修复特定场景下调度器panic的问题
  • 修复CCE v1.15集群中volcano作业volumes.secret校验失败的问题
  • 修复挂载volume,作业调度不成功的问题

1.3.3

v1.15

v1.17

v1.19

v1.21

修复GPU异常导致的调度器崩溃问题;修复特权Init容器准入失败问题

1.3.1

v1.15

v1.17

v1.19

  • 升级Volcano框架到最新版本
  • 支持Kubernetes v1.19版本
  • 添加numa-aware插件
  • 修复多队列场景下Deployment扩缩容的问题
  • 调整默认开启的算法插件

1.2.5

v1.15

v1.17

v1.19

  • 修复某些场景下OutOfcpu的问题
  • 修复queue设置部分capability情况下Pod无法调度问题
  • 支持volcano组件日志时间与系统时间保持一致
  • 修复队列间多抢占问题
  • 修复ioaware插件在某些极端场景下结果不符合预期的问题
  • 支持混合集群

1.2.3

v1.15

v1.17

v1.19

  • 修复因为精度不够引发的训练任务OOM的问题
  • 修复CCE v1.15以上版本GPU调度的问题,暂不支持任务分发时的CCE版本滚动升级
  • 修复特定场景下队列状态不明的问题
  • 修复特定场景下作业挂载PVC panic的问题
  • 修复GPU作业无法配置小数的问题
  • 添加ioaware插件
  • 添加ring controller
分享:

    相关文档

    相关产品