打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度

简介: ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。

【阅读原文】戳:打破资源边界、告别资源浪费:ACK One多集群Spark和AI作业调度


 

概述

 

 

 

在云原生时代,随着业务的发展(如业务遍布全球、已达单一集群承载上限)、容灾需求的迫切、安全合规的要求等原因,越来越多的用户采用多Kubernetes集群来承载业务。而在Kubernetes集群中部署业务应用时,出于应用可靠性考虑,管理员通常会预留相当的资源Buffer来应对负载波动,这样就会导致大多数时间内,容器的请求资源远高于实际使用的资源,集群资源利用率低;此时,我们往往会在多集群中运行离线任务来提升资源利用率,但如何确定哪个集群具有充足资源,将离线任务调度到哪个集群,如何确保离线任务的运行不影响已运行的在线服务,则是更为重要的问题。

 

Spark作为大数据和AI领域中广泛使用的分布式计算框架,ACK One多集群AI作业调度支持Spark作业的多集群调度与分发,并结合ACK Koordinator的在离线混部的能力,可以解决上述问题,在不影响集群中正在运行的在线业务的前提下,根据各集群实际剩余资源来进行调度,最大化多集群中闲置资源的利用率。

 

 

 

 

ACK One多集群AI作业调度与分发

 

 

 

分布式云容器平台ACK One[1]是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级分布式云容器平台,提供多集群统一管理能力。通过ACK One注册集群[2]将您的其他公共云厂商和IDC K8s集群接入到阿里云容器服务ACK控制台,并由舰队对这些注册集群以及云上的ACK、ACK Edge集群进行多集群统一的应用分发、流量管理、可观测运维管理、安全管理等。

 

ACK One多集群AI作业调度与分发[3]是阿里云面向多集群和混合云场景提供的多集群AI作业调度和分发的能力。当单一ACK集群无法满足大规模AI训练和推理任务的资源需求,或当前已有的多个ACK集群有较多资源闲置时,您可以使用该能力,将任务调度到多个集群,以满足您的资源需求。具有以下能力:

 

1. 支持多种作业类型:PyTorchJob、SparkApplication、TFJob。

 

2. 多集群Gang调度:通过预占或动态资源检测,实现作业的多集群Gang调度,确保任务下发到子集群后能够调度,提升任务调度效率。

 

3. 多租户配额管理:用户可以使用ElasticQuotaTree提供的基于Namespace的资源管理,在多租户场景下限制各租户的资源使用量。

 

4. 任务优先级调度:依据用户在AI任务中的PodTemplate中定义的PriorityClass,确保高优先级任务优先获得集群资源。

 

5. 多种任务排队策略配置:您可以灵活定义各队列的排队策略,满足优先提高集群利用率或优先保证任务优先级两种使用方式,支持阻塞调度模式和非阻塞调度模式。

 

6. 作业失败后的重调度:作业在子集群中失败后,Global Scheduler将回收该作业,并对其进行重调度,调度到其他符合条件且资源充足的集群。

 

 

具体流程如下:

 

1. 舰队提交PyTorchJob、SparkApplication或TFJob等类型作业和分发策略PropagationPolicy。

 

2. 舰队对作业进行优先级调度和租户配额管理Capacity Scheduling。

 

3. 舰队中的Global Scheduler,对出队列的作业进行多集群动态资源调度和多集群Gang调度,对满足条件的集群进行资源预占或动态资源检查,调度失败则重新入队列。

 

4. 调度成功后,作业按策略分发到对应的ACK集群中。

 

5. 若作业运行失败,Global Scheduler将回收作业,并对其进行重调度,调度到其他符合条件且资源充足的集群。

 

 

 

 

基于实际剩余资源的多集群Spark作业调度与分发

 

 

 

基于集群实际剩余资源的多集群Spark作业的调度和分发方案,主要依赖以下三部分能力:

 

1. ACK One舰队的多集群Spark作业的调度和分发,包括对实际剩余资源的感知调度。

 

2. ACK Koordinator[4]的单集群在离线混部[5]能力。

 

3. ACK Spark Operator[6]支持Koordinator在离线混部特性。

 

 

基于实际剩余资源的调度

 

在单ACK集群中基于实际剩余资源的调度,即为ACK Koordinator的动态资源超卖。ACK Koordinator使用Batch的概念描述实际剩余资源,并通过Kubernetes的Extended Resource[7]将其记录在Node上。从下图我们可以看到,当基于Scheduler按照默认的Request资源进行调度时,4是闲置的资源,可新调度的资源仅有最上方的浅灰色部分;而基于Koordinator的Batch资源进行调度,则可以将闲置的资源充分利用起来(5+6)。为性能考虑,Koordinator还可以设置一定的比例的预留资源,设置方式可详见ACK Koordinator启用动态资源超卖[8]

 

 

依据ACK Koordinator的该混部能力,ACK Spark Operator实现了,支持根据相应注解,将SparkApplication的driver和executor所需资源,转换为Koordiantor的Batch资源,由ACK Scheduler调度Pod时根据Batch资源进行调度。

 

在多集群维度,舰队的Gloabl Scheduler在进行多集群作业调度时,动态资源调度会动态感知子集群剩余资源,如果是Spark作业,会根据相应的注解,将为driver和executor所需资源检测各子集群的Batch资源是否充足,结合Global Scheduler的多集群Gang调度,来决定将作业分发到哪个集群中。在1.28及以上版本的ACK集群中,舰队会通过资源预占能力来提升作业调度的成功率。并且舰队的Gloabl Scheduler还会监视子集群中Spark作业运行状态,若driver因资源不足而无法运行,则在一定时间后回收该SparkApplication,并重调度到其他资源充足的子集群中。

 

 

完整方案流程

 

 

完整的基于集群实际剩余资源的多集群Spark作业的调度和分发方案流程如下:

 

1. 环境准备:

 

a. 创建ACK One舰队,并将多个ACK集群关联到舰队,由舰队统一管理;

b. 在各ACK集群中安装ACK Koordinator,并通过配置管理混部策略[9]

c. 确定要分发的SparkApplication的命名空间,在舰队和各ACK集群中创建该命名空间,并在安装ACK Spark Operator时配置为其处理的命名空间。

 

2. 在ACK One舰队中SparkApplication和PropagationPolicy,舰队的多集群调度组件(Global Scheduler)会根据每个关联子集群的实际剩余资源,来匹配Spark作业资源请求,完成调度。在1.28及以上版本的ACK集群中,舰队会通过资源预占能力来提升作业调度的成功率。

 

a. 该步骤,可同时使用PriorityClass,将提交的Spark作业设置为低优先级,以确保证提交的Spark作业不会抢占在线服务资源、影响在线服务产品的正常运行。

 

3. 舰队调度作业成功后,会将该SparkApplication分发至调度选中的ACK集群中。

 

4. 若作业运行失败,Global Scheduler将回收作业,并对其进行重调度,调度到其他符合条件且资源充足的集群。

 

另外,通过PriorityClass降低Spark作业的优先级,和ACK Koordinator自身支持QoS能力,可以确保运行的Spark作业不会影响对应集群中在线服务的正常运行。

 

 

 

 

总结

 

 

 

综上所述,ACK One多集群Spark作业的调度与分发,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。ACK One还支持PytorchJob、TFJob等其他AI作业类型的多集群调度。更多内容可详见基于实际剩余资源的多集群Spark调度最佳实践[10]ACK One多集群AI作业调度与分发[11]


欢迎加入ACK One 客户交流钉钉群,与我们一同交流。(钉钉群号:35688562

 

相关链接:

 

[1] 分布式云容器平台ACK One

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview?spm=a2c4g.11186623.help-menu-85222.d_0_0.40da5219xR6Z65

 

[2] ACK One注册集群

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/registered-clusters/?spm=a2c4g.11186623.help-menu-85222.d_2_1.2b35378dwcWYvK

 

[3] ACK One多集群AI作业调度与分发

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/job-orchestration/?spm=a2c4g.11186623.help-menu-85222.d_2_2_6.71195e02FZkssP&scm=20140722.H_384018._.OR_help-T_cn~zh-V_1

 

[4] ACK Koordinator

https://help.aliyun.com/zh/ack/product-overview/ack-koordinator-fka-ack-slo-manager?spm=a2c4g.11186623.0.0.d82c3b9b3LPvwq#task-2172306

 

[5] 在离线混部

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/overview-of-the-colocation-of-different-types-of-workloads/

 

[6] ACK Spark Operator

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/use-cases/use-spark-operator-to-run-spark-jobs-on-ack?spm=a2c4g.11186623.help-menu-search-85222.d_1

 

[7] Extended Resource

https://kubernetes.io/docs/tasks/administer-cluster/extended-resource-node/

 

[8] ACK Koordinator启用动态资源超卖

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/dynamic-resource-overcommitment?spm=a2c4g.11186623.0.0.e64f5c3amRjfwv#2116a59cdccbf

 

[9] 管理混部策略

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/getting-started-2?spm=a2c4g.11186623.help-menu-85222.d_2_14_7_1_0.e64f5c3amRjfwv#section-038-0op-zeh

 

[10] 基于实际剩余资源的多集群Spark调度最佳实践

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-spark-job-scheduling-and-distribution-based-on-actual-resource-availability?spm=a2c4g.11186623.help-menu-85222.d_2_2_6_2.7a225cb66Jo1TS#f5115a37fabz7

 

[11] ACK One多集群AI作业调度与分发

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/job-orchestration/?spm=a2c4g.11186623.help-menu-85222.d_2_2_6.5d575e02ZeVEm7&scm=20140722.H_384018._.OR_help-T_cn~zh-V_1



我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
3月前
|
运维 监控 Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。文章介绍了 ACK One+ACS 的弹性架构如何解决了春招的燃眉之急,让智联招聘的技术团队能够聚焦创新业务开发,欢迎关注。
|
3月前
|
运维 Kubernetes Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
|
4月前
|
人工智能 PyTorch 算法框架/工具
ACK AI Profiling:从黑箱到透明的问题剖析
本文从一个通用的客户问题出发,描述了一个问题如何从前置排查到使用AI Profiling进行详细的排查,最后到问题定位与解决、业务执行过程的分析,从而展现一个从黑箱到透明的精细化的剖析过程。
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
156 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
2月前
|
运维 Kubernetes 持续交付
ACK One GitOps:让全球化游戏服务持续交付更简单
ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
|
4月前
|
存储 人工智能 测试技术
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
OSSFS 2.0通过轻量化协议设计、协程化技术及FUSE3低级API重构,实现大文件顺序读写与小文件高并发加载的显著提升,在实际测试中表现出高达数十倍的吞吐量增长。适用于机器学习训练、推理等对高带宽低延迟要求严苛的场景,同时支持静态和动态挂载方式,方便用户在ACK集群中部署使用。
465 34

热门文章

最新文章

推荐镜像

更多