首页 > 其他分享 >Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力

Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力

时间:2024-09-27 20:01:03浏览次数:1  
标签:10 github 细粒度 队列 sh Volcano volcano com

本文分享自华为云社区《Volcano v1.10.0 版本正式发布!10大功能全面提升统一调度和细粒度资源管理能力》,作者:云容器大未来

 

近日,Volcano社区v1.10.0版本[1]正式发布(Branch:release-1.10[2]),此次版本增加了以下新特性:

  • 新增队列优先级设置策略
  • 支持细粒度的GPU资源共享与回收
  • 支持Pod Scheduling Readiness调度
  • 支持Sidecar container调度
  • 增强vcctl命令行工具功能
  • Volcano支持Kubernetes v1.30
  • 增强Volcano安全性
  • 优化Volcano性能
  • 提升GPU监控功能
  • 优化helm chart包安装升级流程

▶ 新增队列优先级设置策略

在传统的大数据处理场景下,用户可以直接设置队列优先级来控制作业的调度顺序,为了更好的帮助用户从Hadoop/Yarn迁移到云原生平台,Volcano也支持了在队列层面直接设置优先级,降低大数据用户的迁移成本,提升用户体验和资源利用效率。

队列是Volcano中的一种基本资源,不同队列有着优先级区分,在默认情况下,队列的优先级是由队列的share值决定的,share值是由队列中已分配的资源量除以队列的总容量计算得到的,不需要用户手动配置,share值越小,则代表队列中已分配的资源比例越小,即队列越不饱和,需要优先分配资源,因此队列的share越小,队列的优先级越高,在分配资源时会优先分配给share较小的队列,以保证资源分配的公平性。

但是在生产环境尤其是大数据处理场景下,用户更希望可以直接设置队列的优先级,从而能更直观的知道不同队列的优先级顺序,由于share值是实时计算得到的,因此会根据队列分配资源的饱和程度而实时变化,为了更加直观的表示队列优先级同时支持用户自行配置,Volcano在share值的基础上为队列新增了priority字段,支持用户配置队列优先级,priority越高则表示队列优先级越高,会优先分配资源给高优先级的队列,并且在回收队列资源时会优先回收低优先级队列内的作业。

队列优先级定义:

type QueueSpec struct {
...
  // Priority define the priority of queue. Higher values are prioritized for scheduling and considered     later during reclamation.
  // +optional
  Priority int32 `json:"priority,omitempty" protobuf:"bytes,10,opt,name=priority"`
}

同时为了兼容share值的使用方式,Volcano在计算队列优先级时也会考虑share值,默认情况下用户不设置队列优先级或者队列的优先级相等时,Volcano会再比较队列的share值,此时share越小队列优先级越高。用户可以根据实际场景选择设置不同的优先级策略,即priority和share两种方式。

关于队列优先级设计文档,请参考:Queue Priority[3]

关于队列优先级设计文档,请参考:Queue Priority[3]

 支持细粒度的GPU资源共享与回收

Volcano在v1.9版本发布了弹性队列容量capacity调度功能,用户可以直接为队列设置每一维度资源的容量,同时支持基于deserved的队列弹性容量调度,实现了更加细粒度的队列资源共享和回收机制。

弹性队列容量capacity调度的设计文档请参考:Capacity scheduling Design[4]

使用指导请参考:Capacity Plugin User Guide[5]

为队列配置每一维度deserved使用样例:

apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: demo-queue
spec:
  reclaimable: true
  deserved: # set the deserved field.
    cpu: 64
    memeory: 128Gi
    nvidia.com/a100: 40
    nvidia.com/v100: 80

在v1.10版本中,Volcano在弹性队列容量capacity的基础上,支持了上报不同型号的GPU资源,NVIDIA默认的Device Plugin在上报GPU资源时无法区分GPU型号,统一上报为nvidia.com/gpu,AI训推任务无法根据业务特点选择不同型号的GPU,比如A100、T4等型号的GPU,为了解决这一问题,以满足不同类型的AI任务需求,Volcano在Device Plugin层面支持上报不同型号的GPU资源到节点,配合capacity插件实现更加细粒度的GPU资源共享和回收。

关于Device Plugin上报不同型号GPU的实现和使用指导,请参考:GPU Resource Naming[6]

注意:

capacity在v1.10.0版本中作为了默认的队列管理插件,capacity与proportion插件互相冲突,当升级到v1.10.0后,你需要再设置队列的deserved字段,以保证队列功能正常工作,具体的使用说明请参考:Capacity Plugin User Guide[7]

capacity插件根据用户指定的队列deserved值来划分集群资源,而proportion插件则根据队列权重动态划分集群资源,用户可以根据实际场景选择使用capacity或者proportion插件进行队列管理。proportion插件的介绍请参考:proportion plugin[8]

支持Pod Scheduling Readiness调度

Pod 一旦创建就被认为已准备好进行调度,在 Kube-scheduler 中,它会尽力寻找合适的节点来放置所有Pending的 Pod。然而,在现实情况下,某些 Pod 可能会长时间处于“缺少必要资源”状态,这些 Pod 实际上以不必要的方式干扰调度程序(以及 Cluster AutoScaler 等下游组件)的决策和运行,造成资源浪费等问题。Pod Scheduling Readiness是 Kube-sheduler 的一项新增功能,在Kubernetes v.1.30版本GA,成为了一个稳定特性,它通过设置Pod的schedulingGates字段来控制Pod的调度时机。

在前面的版本中,Volcano已集成了K8s默认调度器的所有算法,全面涵盖了Kube-scheduler的原生调度功能。因此,Volcano能够无缝替代Kube-scheduler,作为云原生平台下的统一调度器,支持微服务和AI/大数据工作负载的统一调度。在最新发布的v1.10版本中,Volcano更是引入了Pod Scheduling Readiness调度能力,进一步满足了用户在多样化场景下的调度需求。

关于Pod Scheduling Readiness特性的文档,请参考:Pod Scheduling Readiness | Kubernetes[9]

Volcano支持Pod Scheduling Readiness调度的设计文档,请参考:Proposal for Support of Pod Scheduling Readiness by ykcai-daniel · Pull Request #3581 · volcano-sh/volcano (github.com)[10]

支持Sidecar container调度

Sidecar container是一种相对于业务容器而言的辅助容器,通常用来辅助业务容器的运行,比如收集业务容器日志、监控、初始化网络等。

在Kubernetes v1.28之前,Sidecar container只是一种概念,并没有单独的API来标识一个容器是否是Sidecar container,Sidecar容器和业务容器处于同等地位,有着相同的生命周期,Kubelet会并发启动所有Sidecar容器和业务容器,这样带来的问题是Sidecar容器可能会在业务容器启动之后才启动,并且在业务容器结束之前先结束,而我们期望的是Sidecar容器先于业务容器启动,并在业务容器结束之后再结束,这样就能保证Sidecar容器收集的日志,监控等信息是完整的。

Kubernetes v1.28在API层面支持了Sidecar container,并对init container、Sidecar container、业务container做了统一的生命周期管理,同时调整了Pod的request/limit资源计算方式,该特性在v1.29成为Beta特性。

该特性在设计阶段经历了漫长的讨论时间,特性本身并不复杂,主要的考虑点在于兼容旧的使用方式,如果定义一个除了init container、业务容器之外的新的容器类型,会对API有较大的破坏性,同时周边组件适配该特性的话会有较多的侵入式修改,带来很多额外开销,因此Kubernetes社区并没有引入新的容器类型来支持Sidecar container,而是直接复用了init container,通过设置init container的restartPolicy为Always来标识Sidecar container,完美的解决了API兼容性问题和Sidecar容器的生命周期问题。

在调度层面,该特性的影响在于Pod申请的request资源计算方式有所变化,因为Sidecar container作为一种特殊的init container是持久运行的,需要将Sidecar container的request值累加到业务容器的request值上,因此需要重新计算init container、Sidecar container和业务容器的资源request值。

Volcano调度器在新版本更改了Sidecar container的资源计算方式,支持了Sidecar container的调度,用户可以使用Volcano调度Sidecar container。

关于Sidecar container的详细信息,请参考:Sidecar Containers | Kubernetes[11]

增强vcctl命令行工具功能

vcctl是操作Volcano内置CRD资源的一个命令行工具,可以方便的用来查看/删除/暂停/恢复vcjob资源,并支持查看/删除/开启/关闭/更新queue资源。Volcano在新版本对vcctl做了功能增强,新增以下功能:

  • 支持创建/删除/查看/描述jobflow和jobtemplate资源
  • 支持查询指定队列里的vcjob
  • 支持通过queue和vcjob过滤查询Pod

vcctl的详细指导文档,请参考:vcctl Command Line Enhancement[12]

Volcano支持Kubernetes v1.30

Volcano版本紧跟Kubernetes社区版本节奏,对Kubernetes的每个大版本都进行支持,目前最新支持的版本为v1.30,并运行了完整的UT、E2E用例,保证功能和可靠性。

如果您想参与Volcano适配Kubernetes新版本的开发工作,请参考:adapt-k8s-todo[13] 进行社区贡献。

增强Volcano安全性

Volcano一直都很重视开源软件供应链的安全,在license合规、安全漏洞披露和修复、仓库分支保护、CI检查等方面遵循OpenSSF定义的规范,Volcano近期在Github Action加入了新的workflow,它会在代码合入时运行OpenSSF安全性检查,并实时更新软件安全评分,持续提升软件安全性。

同时Volcano对各个组件的RBAC权限进行了收缩,只保留必要的权限,避免了潜在的越权风险,提升了系统的安全性。

相关PR参见:

Added the scorecard github action and its badge by harshitasao · Pull Request #3655 · volcano-sh/volcano[14]

Shrink permissions of vc scheduler & controller by Monokaix · Pull Request #3545 · volcano-sh/volcano (github.com)[15]

Add pre-install&pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com)[16]

优化Volcano性能

在大规模场景下,Volcano做了很多性能优化的工作,主要包括:

  • 优化vcjob更新策略,降低vcjob的更新和同步频次,降低API Server压力,提升提交任务的QPS
  • vc controller新增controller gate开关,用户可以选择关闭不需要的controller,减低内存占用和CPU负载
  • 所有的controller使用共享的informer,减少内存占用

提升GPU监控功能

新版本的Volcano针对GPU监控指标做了优化和增强,修复了GPU监控不精确的问题,并在GPU的算力和显存监控指标上新增了节点信息,方便用户更加直观的查看每个节点上每一张GPU的算力、显存的总量和已分配量。

详细PR参见:Update volcano-vgpu monitoring system by archlitchi · Pull Request #3620 · volcano-sh/volcano (github.com)[17]

优化helm chart包安装升级流程

Volcano针对helm chart的安装、升级流程进行了优化,并支持安装helm chart包设置更多自定义参数,主要包括:

  • 利用helm的hook机制,在安装成功Volcano之后,自动删除volcano-admission-init这一job,避免后续使用helm upgrade升级失败的问题,相关PR参见:Add pre-install&pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com)[18]
  • 每次安装成功后更新Volcano admission需要的secret文件,避免在不指定helm包名情况下,重复安装卸载volcano导致volcano admission处理失败的问题,详细PR参见:Update volcano-admission secret when it already exists by Monokaix · Pull Request #3653 · volcano-sh/volcano (github.com)[19]
  • 支持为helm包中的资源对象设置通用label,相关PR参见:Add common labels for chart objects by Aakcht · Pull Request #3511 · volcano-sh/volcano (github.com)[20]
  • 支持通过helm为Volcano组件设置日志等级,相关PR参见:Expose volcano components (controller, scheduler, etc.) log level control to the helm chat values by chenshiwei-io · Pull Request #3656 · volcano-sh/volcano (github.com)[21]
  • 支持通过helm设置Volcano组件的镜像代理仓库,相关PR参见:add image registry for helm by calvin0327 · Pull Request #3436 · volcano-sh/volcano (github.com)[22]
  • 支持通过helm设置容器级别的securityContext,相关PR参加:feat: Add securityContext support at container level in helm chart templates by lekaf974 · Pull Request #3704 · volcano-sh/volcano (github.com)[23]

 

参考资料

[1] v1.10.0版本: https://github.com/volcano-sh/volcano/releases/tag/v1.10.0

[2] Branch:release-1.10: https://github.com/volcano-sh/volcano/tree/release-1.10

[3] Queue Priority: https://github.com/volcano-sh/volcano/blob/master/docs/design/queue-priority.md

[4] Capacity scheduling Design: https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md

[5] Capacity Plugin User Guide: https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_capacity_plugin.md

[6] GPU Resource Naming: https://github.com/volcano-sh/devices/tree/release-1.1/docs/resource-naming

[7] Capacity Plugin User Guide: https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_capacity_plugin.md

[8] proportion plugin: https://volcano.sh/en/docs/plugins/#proportion

[9] Pod Scheduling Readiness | Kubernetes: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/

[10] Proposal for Support of Pod Scheduling Readiness by ykcai-daniel · Pull Request #3581 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3581

[11] Sidecar Containers | Kubernetes: https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/

[12] vcctl Command Line Enhancement: https://github.com/volcano-sh/volcano/blob/master/docs/design/command-line-enhancement.md#new-format-of-volcano-command-line

[13] adapt-k8s-todo: https://github.com/volcano-sh/volcano/blob/master/docs/design/adapt-k8s-todo.md

[14] Added the scorecard github action and its badge by harshitasao · Pull Request #3655 · volcano-sh/volcano: https://github.com/volcano-sh/volcano/pull/3655

[15] Shrink permissions of vc scheduler & controller by Monokaix · Pull Request #3545 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3545

[16] Add pre-install&pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3504

[17] Update volcano-vgpu monitoring system by archlitchi · Pull Request #3620 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3620/

[18] Add pre-install&pre-upgrade hook for admission-init job by Monokaix · Pull Request #3504 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3504

[19] Update volcano-admission secret when it already exists by Monokaix · Pull Request #3653 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3653

[20] Add common labels for chart objects by Aakcht · Pull Request #3511 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3511

[21] Expose volcano components (controller, scheduler, etc.) log level control to the helm chat values by chenshiwei-io · Pull Request #3656 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3656

[22] add image registry for helm by calvin0327 · Pull Request #3436 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3436

[23] feat: Add securityContext support at container level in helm chart templates by lekaf974 · Pull Request #3704 · volcano-sh/volcano (github.com): https://github.com/volcano-sh/volcano/pull/3704

 

Volcano云原生批量计算公开课

Volcano云原生批量计算公开课由CNCF首个批量计算社区Volcano核心贡献者开发,通过理论学习+实践操作,帮助学习者由浅入深了解批量计算原理和生产场景应用,晋升批量计算达人!点击免费学习Volcano云原生批量计算公开课

社区介绍:Volcano 是业界首个云原生批量计算引擎,也是 CNCF 首个和唯一的批量计算项目。项目主要用于 AI、大数据、基因、渲染等诸多高性能计算场景,对主流通用计算框架均有很好的支持。目前,Volcano在人工智能、大数据、基因测序等海量数据计算和分析场景已得到快速应用,已完成对 Spark、Flink、Tensorflow、PyTorch、Argo、MindSpore、Paddlepaddle 、Kubeflow、MPI、Horovod、Mxnet、KubeGene、Ray 等众多主流计算框架的支持,并构建起完善的上下游生态。

Volcano官网:https://volcano.sh

GitHub: https://github.com/volcano-sh/volcano

每周例会:https://zoom.us/j/91804791393

点击关注,第一时间了解华为云新鲜技术~

标签:10,github,细粒度,队列,sh,Volcano,volcano,com
From: https://www.cnblogs.com/huaweiyun/p/18436465

相关文章

  • 9.27 模拟赛(NOIP十三连测 #10)
    2024--梦熊&太戈--NOIP十三连测#10【订正】-比赛-梦熊联盟(mna.wang)复盘开T1。差分转化。模拟了一下样例感觉方案好像是唯一确定的,不需要贪心/DP。但不太能证。想了会感觉找不出反例。然后写完了。对拍没挂。用时不到\(30\)分钟。T2。\(m\le20\)且数据随机感觉很......
  • 骨传导耳机品牌排行榜分享:360度实测分析10款抢手骨传导耳机!
    随着科技的不断进步和人们生活方式的变化,骨传导耳机以其独特的传声方式和开放式设计,逐渐成为运动爱好者、户外活动家以及听力障碍人士的新宠。不同于传统耳机将声音直接导入耳道,骨传导耳机通过振动颅骨将声音传递至内耳,不仅能够保护听力,还能在享受音乐的同时保持对外界环境的感......
  • 《华为云DTSE》期刊免费下载:10个案例读懂云上架构升级策略
    本文分享自华为云社区《《华为云DTSE》期刊第四期赋能云专刊,赋能云场景下DTSE服务各类开发者的案例分享》,作者:HuaweiCloudDeveloper。 把公司的开发者平台统一在一起,是华为云所担负的任务,其最终目的是要汇聚开发者、做厚“黑土地”,支撑三大根生态的发展壮大。这也意味着,作为支......
  • KylinV10麒麟系统使用Nexus搭建YUM仓库代理
    安装Nexus(docker版本,宿主主机是啥系统无所谓)安装Nexus的服务器必须要有网,如果没网的话,前面还需要搭建NGINX反向代理下载镜像root@ubuntu:/#dockerpullsonatype/nexus3:3.38.1创建目录root@ubuntu:~#mkdir-p/data/nexus3/dataroot@ubuntu:~#chmod777/data/nexus3/启动镜像......
  • 10个高效的Python爬虫框架
    ​前言小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!Scrapyscrapy官网:https://scrapy.org/scrapy中文文档:https://www.osgeo.cn/scrapy/intro/oScrapy......
  • P10603 BZOJ4372 烁烁的游戏 题解
    题目传送门前置知识动态树分治|动态开点线段树|标记永久化解法考虑动态点分治。两种操作本质上是将luoguP6329【模板】点分树|震波的操作互换了下,将原需支持单点修改、区间查询的数据结构换成需支持区间修改、单点查询的数据结构即可。区间修改、单点查询的动态开......
  • 人人都能手写的chrome插件,帮我省了1000多块钱
    在网购的世界里,价格波动常常让人感到无奈。《京东价保》插件通过定时监控已购商品价格变化,降价自动申请京东价格保护,帮我省下了不少钱。作为一个前端开发工程师,这让我意识到,手写一个浏览器插件是一件很有趣且有意义的事。于是,我决定尝试自己动手,开发一个简单的二维码生成器插件,各位......
  • 【21 ZR联赛集训 day10】身经百战
    【21ZR联赛集训day10】身经百战显然每个怪物是独立的。我们考虑对操作建带权边,答案就是求最短路。但是点数太多,于是我们可以对怪物血量和所有\(a_i,b_i\)离散化一下,因为我们只需要考虑这些点,注意\(1\)也要离散化,因为我们需要考虑\(1\)。一个小优化,如果\(a_i>b_i\)且......
  • 【21 ZR联赛集训 day10】不知道高到哪里去了
    【21ZR联赛集训day10】不知道高到哪里去了二分答案。设敌人的速度是\(1\),二分我的速度\(v\),我可以从\(C\)走到\(T\)当对于每个我到达的点\(u\),敌人无法比我先到达,即敌人到达\(u\)最短用时比我大。先求敌人到每个结点的最短路,然后对于二分的一个\(v\),从\(C\)开始搜......
  • 2024年10月CISAW课程安排
    信息安全保障人员(CISAW)各方向的第一阶段和第二阶段培训本月将以线上+线下模式开展CISAW根据专业领域分为多个类别,如安全集成、安全运维、风险评估、应急服务、软件安全开发等,通过培训后可获得全国通用的信息安全保障人员认证证书。CCRC-DSO数据安全官,CCRC-DSA数据安全评估......