插件简介
Volcano调度器是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。
Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户。(目前Volcano项目已经在Github开源)
Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括:
- 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。
- 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。
- 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。
项目开源地址:https://github.com/volcano-sh/volcano
安装插件
步骤 1 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,在右侧找到 Volcano ,单击“安装”。
步骤 2 该插件可配置“单实例”、“高可用”或自定义规格。
选择自定义时,volcano-controller和volcano-scheduler的建议值如下:
- 小于100个节点,可使用默认配置,即CPU的申请值为500m,限制值为2000m;内存的申请值为500Mi,限制值为2000Mi。
- 高于100个节点,每增加100个节点(10000个Pod),建议CPU的申请值增加500m,内存的申请值增加1000Mi;CPU的限制值建议比申请值多1500m,内存的限制值建议比申请值多1000Mi。
volcano-controller和volcano-scheduler的建议值
节点/Pods规模 | 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 |
步骤 3 配置volcano默认调度器配置参数。
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'
- plugins:
- name: 'nodelocalvolume'
- name: 'nodeemptydirvolume'
- name: 'nodeCSIscheduling'
- name: 'networkresource'
server_cert: ''
server_key: ''
插件 | 功能 | 参数说明 | 用法演示 |
---|---|---|---|
binpack | 将pod调度到资源使用较高的节点以减少资源碎片 | binpack.weight:binpack插件本身在所有插件打分中的权重 binpack.cpu:cpu资源在资源比重的比例,默认是1 binpack.memory:memory资源在所有资源中的比例,默认是1l binpack.resources: |
- 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被驱逐 | - | - |
gang | 将一组pod看做一个整体去分配资源 | - | - |
priority | 使用用户自定义负载的优先级进行调度 | - | - |
overcommit | 将集群的资源放到一定倍数后调度,提高负载入队效率。负载都是deployment的时候,建议去掉此插件或者设置扩大因子为2.0。 | overcommit-factor: 扩大因子,默认是1.2 | - plugins: - name: overcommit arguments: overcommit-factor: 2.0 |
drf | 根据作业使用的主导资源份额进行调度,用的越少的优先 | - | - |
predicates | 预选节点的常用算法,包括节点亲和,pod亲和,污点容忍,node ports重复,volume limits,volume zone匹配等一系列基础算法 | - | - |
nodeorder | 优选节点的常用算法 | nodeaffinity.weight:节点亲和性优先调度,默认值是1 podaffinity.weight:pod亲和性优先调度,默认值是1 leastrequested.weight:资源分配最少的的节点优先,默认值是1 balancedresource.weight:node上面的不同资源分配平衡的优先,默认值是1 mostrequested.weight:资源分配最多的的节点优先,默认值是0 tainttoleration.weight:污点容忍高的优先调度,默认值是1 imagelocality.weight:node上面有pod需要镜像的优先调度,默认值是1 selectorspread.weight: 把pod均匀调度到不同的节点上,默认值是0 volumebinding.weight: local pv延迟绑定调度,默认值是1 podtopologyspread.weight: pod拓扑调度,默认值是2 |
- plugins: - name: nodeorder arguments: leastrequested.weight: 1 mostrequested.weight: 0 nodeaffinity.weight: 1 podaffinity.weight: 1 balancedresource.weight: 1 tainttoleration.weight: 1 imagelocality.weight: 1 volumebinding.weight: 1 podtopologyspread.weight: 2 |
cce-gpu-topology-predicate | GPU拓扑调度预选算法 | - | - |
cce-gpu-topology-priority | GPU拓扑调度优选算法 | - | - |
cce-gpu | 结合CCE的GPU插件支持GPU资源分配,支持小数GPU配置 | - | - |
numaaware | numa拓扑调度 | weight: 插件的权重 | |
networkresource | 支持预选过滤ENI需求节点,参数由CCE传递,不需要手动配置 | NetworkType: 网络类型(eni或者vpc-router类型) | - |
nodelocalvolume | 支持预选过滤不符合local volume需求节点 | - | - |
nodeemptydirvolume | 支持预选过滤不符合emptydir需求节点 | - | - |
nodeCSIscheduling | 支持预选过滤everest组件异常节点 | - | - |
步骤 4 单击“安装”。
在控制台中修改volcano-scheduler配置
Volcano允许用户在安装,升级,编辑时,编写Volcano调度器配置信息,并将配置内容同步到volcano-scheduler-configmap里。
本节介绍如何使用自定义配置,以便用户让volcano-scheduler能更适合自己的场景。
说明
仅Volcano 1.7.1及以上版本支持该功能。在新版插件界面上合并了原plugins.eas_service和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功能。
- 使用eas_service配置,示例如下:
{
"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": "eas",
"custom": {
"availability_zone_id": "",
"driver_id": "",
"endpoint": "",
"flavor_id": "",
"network_type": "",
"network_virtual_subnet_id": "",
"pool_id": "",
"project_id": "",
"secret_name": "eas-service-secret"
}
}
]
},
{
"plugins": [
{
"name": "nodelocalvolume"
},
{
"name": "nodeemptydirvolume"
},
{
"name": "nodeCSIscheduling"
},
{
"name": "networkresource"
}
]
}
]
},
"server_cert": "",
"server_key": ""
}
- 使用ief配置,示例如下:
{
"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": "ief",
"enableBestNode": true
}
]
},
{
"plugins": [
{
"name": "nodelocalvolume"
},
{
"name": "nodeemptydirvolume"
},
{
"name": "nodeCSIscheduling"
},
{
"name": "networkresource"
}
]
}
]
},
"server_cert": "",
"server_key": ""
}
保留原volcano-scheduler-configmap配置
假如在某场景下希望插件升级后时沿用原配置,可参考以下步骤:
步骤 1 查看原volcano-scheduler-configmap配置,并备份。
示例如下:
#kubectl edit cm volcano-scheduler-configmap -n kube-systemapiVersion: 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做过修改。如果是,需要把修改内容同步到升级界面里。
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
版本记录
CCE插件版本记录
插件版本
支持的集群版本
1.7.1
/v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/
1.6.5
/v1.19.*|v1.21.*|v1.23.*/
1.4.2
/v1.15.*|v1.17.*|v1.19.*|v1.21.*/
1.3.3
/v1.15.*|v1.17.*|v1.19.*/
1.3.1
/v1.15.*|v1.17.*|v1.19.*/
1.2.5
/v1.15.*|v1.17.*|v1.19.*/
1.2.3
/v1.15.*|v1.17.*|v1.19.*/