滴水恩情 发表于 2024-5-24 09:52:55

Volcano社区新版本发布!7大功能全面加强队列本领与调度稳定性

本文分享自华为云社区《Volcano 社区 v1.9.0 版本正式发布!全面加强队列本领与调度稳定性》,作者:云容器大将来。
北京时间2024年5月21日,Volcano社区v1.9.0版本正式发布,此次版本增加了以下新特性:

[*]支持弹性队列容量capacity调度
[*]支持队列与节点间的亲和调度
[*]Volcano支持Kubernetes v1.29
[*]GPU共享支持节点打分调度
[*]加强scheduler metrics指标
[*]新增License合规性检查
[*]提拔调度稳定性
Volcano是业界首个云原生批量盘算项目,于2019年6月在上海 KubeCon 正式开源,并在2020年4月成为 CNCF 官方项目。2022年4月,Volcano 正式晋级为CNCF 孵化项目。Volcano 社区开源以来,受到众多开发者、互助伙伴和用户的认可和支持。截至目前,累计有600+全球开发者参与社区贡献。
https://bbs-img.huaweicloud.com/blogs/img/20240521/1716272264724381477.png
支持弹性队列容量capacity调度

Volcano现在使用proportion插件来进行队列管理,用户可以设置队列的guarantee、capability等字段来设置队列的预留资源和容量上限。并通过设置队列的weight值来实现集群内的资源共享,队列按照weight值按比例划分集群资源,但这种队列管理方式存在以下题目:

[*]队列划分的资源容量通过权重表现,不够直观。
[*]队列内的所有资源使用类似的比例进行划分,不能为队列的每一维资源单独设置容量。
基于以上考虑,Volcano实现了新的队列弹性容量管理本领,它支持:

[*]用户可以直接为队列设置每一维度资源的容量,而不是设置weigh值来实现。
[*]基于deserved的队列弹性容量调度,支持队列的资源共享和回收。
好比在AI大模子训练中分别为队列中差别的GPU型号如A100和V100,设置差别的资源容量。同时在集群资源空闲时,队列可以复用其他空闲队列的资源,并在必要时进行资源回收,直到回收到用户为队列设置的资源容量为止,即应得资源量deserved,从而实现弹性容量本领。
使用改功能时必要设置队列的deserved字段,为每一维资源设置应得资源量。同时必要在调度配置中打开capacity插件,并关闭proportion插件。
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队列弹性容量调度的完整使用例子,请参考:How to use capacity plugin
关于弹性队列容量设计文档,请参考Capacity scheduling Design
支持队列与节点间的亲和调度

队列通常关联着公司内的部分,而差别部分通常必要使用差别的异构资源范例,好比大模子训练团队必要使用NIVDIA的Tesla GPU,而保举团队必要使用AMD的GPU,当用户提交作业到队列时,必要根据队列的属性将作业自动调度到对应资源范例的节点上。
为此Volcano实现了队列和节点的亲和调度本领,用户只需在队列的affinity字段设置必要亲和的节点标签,Volcano会自动将提交到当前队列的作业调度到队列关联的节点上,用户无需单独设置作业的亲和性,而只需同一设置队列的亲和性,提交到队列的作业都会根据队列与节点的亲和性将作业调度到对应的节点。
该特性同时支持硬亲和、软亲和、反亲和调度,使用时必要为节点设置key为volcano.sh/nodegroup-name的标签,然后设置队列的affinity字段,指定硬亲和、软亲和和反亲和的标签值。例如如下的队列设置,表示提交到该队列的作业必要调度到标签值为groupname1和groupname2的节点,并优先调度到标签值为groupname2的节点,同时,作业不能调到到标签值为groupname3和groupname4的节点,当资源不足时则也可以调度到标签值为groupname3的节点上。
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
name: default
spec:
    reclaimable: true
    weight: 1
    affinity:            # added field
      nodeGroupAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - <groupname1>
      - <groupname2>   
      preferredDuringSchedulingIgnoredDuringExecution:
      - <groupname1>
      nodeGroupAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - <groupname3>
      - <gropuname4>
      preferredDuringSchedulingIgnoredDuringExecution:
      - <groupname3>该功能对应的调度插件名为nodegroup,完整使用例子请参考:How to use nodegroup plugin
具体设计文档请参考:The nodegroup design
GPU共享功能支持节点打分调度

GPU共享是Volcano v1.8版本推出的GPU共享与隔离方案,提供GPU共享、设备显存控制本领,以提拔AI训练推理场景下GPU资源利用率低的题目。v1.9在该功能底子上新增了对GPU节点打分的策略,从而可以在作业分配时选择最优的节点,进一步提拔资源利用率,用户可以设置差别的打分策略。目前支持以下两种策略:

[*]Binpack:提供GPU卡粒度的binpack算法,优先把一个节点上的已经分配了资源的GPU卡占满,避免资源碎片和浪费。
[*]Spread:优先使用空闲的GPU卡而不是已经分配了资源的共享卡。
具体使用文档请参考:How to use gpu sharing
Volcano支持Kubernetes v1.29

Volcano版本紧跟Kubernetes社区版本节奏,对Kubernetes的每个大的基数版本都进行支持,目前最新支持的版本为v1.29,并运行了完整的UT、E2E用例,保证功能和可靠性。如果您想参与Volcano适配Kubernetes新版本的开发工作,请参考:https://github.com/volcano-sh/volcano/pull/3459 进行社区贡献。
加强scheduler metrics指标

Volcano使用了client-go客户端和Kubernetes交互,尽管客户端可以设置QPS来避免请求被限流,但是客户端实际使用的QPS到底达到了多少却很难观察到,为了实时观测到客户端请求的频率,Volcano新增了client-go客户端的metrics指标,用户可以通过访问metrics接口,查看GET、POST等请求在每秒钟的请求数量,从而确定每秒钟实际使用的QPS,以此决定是否必要调解客户端设置的QPS。同时client-go的相关指标还包括客户端证书轮转周期统计、每个请求的response size统计等。
用户可以使用curl http://$volcano_scheduler_pod_ip:8080/metrics 来获取volcano scheduler的所有具体指标。
具体PR见: Add rest client metrics by Monokaix · Pull Request #3274 · volcano-sh/volcano (github.com)
新增License合规性检查

为了加强Volcano社区开源license合规治理规范,避免引入传染性开源协议,规避潜在风险,Volcano社区引入了开源license合规检查工具,所谓传染性协议指的是使用了该协议作为开源许可的软件在修改、使用、复制之后生成的衍生作品,也必须以该协议进行开源。开发者提交的PR会引入的三库如果包含了传染性开源协议好比GPL,LGPL等,CI门禁会进行拦截,开发者必要将三方库替换为松自由软件许可协议好比MIT、Apache 2.0,BSD等,以通过开源license合规检查。
提拔调度稳定性

Volcano v1.9.0版本在抢占、调度失败重试、避免内存泄漏、安全性加强等方面做了较多优化,具体内容包括:

[*]修复极端情况下deployment频繁扩缩容导致的pod无法调度的题目,详见PR:[cherry-pick for release-1.9]fix PodGroup being incorrectly deleted due to frequent creation and deletion of pods by guoqinwill · Pull Request #3376 · volcano-sh/volcano (github.com)
[*]修复Pod抢占题目:详见PR:ignore PredicateFn err info for preempt & reclaim scheduler plugin by LivingCcj · Pull Request #3458 · volcano-sh/volcano (github.com)
[*]优化Pod调度失败重试机制:详见PR:fix errTask channel memory leak by bibibox · Pull Request #3435 · volcano-sh/volcano (github.com)
[*]metrics指标优化:详见PR:Fix queue metrics when there are no jobs in it by Monokaix · Pull Request #3463 · volcano-sh/volcano (github.com)
[*]安全性加强:详见PR:Remove list secret in controller ClusterRole by lekaf974 · Pull Request #3449 · volcano-sh/volcano (github.com)
致谢贡献者

Volcano 1.9.0 版本包含了来自多位社区贡献者的代码提交,在此对各位贡献者表示由衷的感谢:贡献者GitHub ID

https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=Yjg2ZWY3ZGRjMzY1MTI1MDBhY2QxYmUzNWJhODEzNDQsMTcxNjUxMzcwOTY3Nw==参考资料: How to use capacity plugin:
https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_capacity_plugin.md Capacity scheduling Design:
https://github.com/volcano-sh/volcano/blob/master/docs/design/capacity-scheduling.md How to use nodegroup plugin:
https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_nodegroup_plugin.md The nodegroup design:
https://github.com/volcano-sh/volcano/blob/master/docs/design/node-group.md How to use gpu sharing:
https://github.com/volcano-sh/volcano/blob/master/docs/user-guide/how_to_use_gpu_sharing.md Add rest client metrics by Monokaix · Pull Request #3274 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3274 fix PodGroup being incorrectly deleted due to frequent creation and deletion of pods by guoqinwill · Pull Request #3376 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3376 ignore PredicateFn err info for preempt & reclaim scheduler plugin by LivingCcj · Pull Request #3458 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3458 fix errTask channel memory leak by bibibox · Pull Request #3435 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3435 Fix queue metrics when there are no jobs in it by Monokaix · Pull Request #3463 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3463 Remove list secret in controller ClusterRole by lekaf974 · Pull Request #3449 · volcano-sh/volcano (github.com):
https://github.com/volcano-sh/volcano/pull/3449 
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Volcano社区新版本发布!7大功能全面加强队列本领与调度稳定性