Volcano调度器 本文主要介绍Volcano调度器。 插件简介 Volcano调度器是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。 Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户。(目前Volcano项目已经在Github开源) Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括: 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。 项目开源地址: 安装插件 步骤 1 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,在右侧找到 Volcano ,单击“安装”。 步骤 2 该插件可配置“单实例”、“高可用”或自定义规格。 选择自定义时,volcanocontroller和volcanoscheduler的建议值如下: 小于100个节点,可使用默认配置,即CPU的申请值为500m,限制值为2000m;内存的申请值为500Mi,限制值为2000Mi。 高于100个节点,每增加100个节点(10000个Pod),建议CPU的申请值增加500m,内存的申请值增加1000Mi;CPU的限制值建议比申请值多1500m,内存的限制值建议比申请值多1000Mi。 volcanocontroller和volcanoscheduler的建议值 节点/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默认调度器配置参数。 cacert: '' defaultschedulerconf: actions: 'allocate, backfill' tiers: plugins: name: 'priority' name: 'gang' name: 'conformance' plugins: name: 'drf' name: 'predicates' name: 'nodeorder' plugins: name: 'ccegputopologypredicate' name: 'ccegputopologypriority' name: 'ccegpu' plugins: name: 'nodelocalvolume' name: 'nodeemptydirvolume' name: 'nodeCSIscheduling' name: 'networkresource' servercert: '' serverkey: '' 插件 功能 参数说明 用法演示 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,比如在kubesystem命名空间的Pod,防止这些Pod被驱逐 gang 将一组pod看做一个整体去分配资源 priority 使用用户自定义负载的优先级进行调度 overcommit 将集群的资源放到一定倍数后调度,提高负载入队效率。负载都是deployment的时候,建议去掉此插件或者设置扩大因子为2.0。 overcommitfactor: 扩大因子,默认是1.2 plugins: name: overcommit arguments: overcommitfactor: 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 ccegputopologypredicate GPU拓扑调度预选算法 ccegputopologypriority GPU拓扑调度优选算法 ccegpu 结合CCE的GPU插件支持GPU资源分配,支持小数GPU配置 numaaware numa拓扑调度 weight: 插件的权重 networkresource 支持预选过滤ENI需求节点,参数由CCE传递,不需要手动配置 NetworkType: 网络类型(eni或者vpcrouter类型) nodelocalvolume 支持预选过滤不符合local volume需求节点 nodeemptydirvolume 支持预选过滤不符合emptydir需求节点 nodeCSIscheduling 支持预选过滤everest组件异常节点 步骤 4 单击“安装”。