2022 Kubernetes 批处理和HPC发展一览
2022 年 5 月 16 日到 20 日,年度最顶级的云原生旗舰会议 KubeCon + CloudNativeCon Europe 2022,在西班牙 — 瓦伦西亚举行。在这里聚集了全球的云原生技术专家、产品或解决方案供应商和使用者,对云原生进行广泛充分地交流和讨论。
随着 Kubernetes 生态的不断繁荣,越来越多的批处理作业和高性能作业逐步迁移至 Kubernetes 平台,充分利用 Kubernetes 的可扩展性和可移植性,但是 Kubernetes 对这些工作负载的支持方面还需改进提升。因此,在此次 KubeCon 举办期间,社区组织了一次 Batch + HPC 专题日,齐聚领域内各路专家一起讨论如何在云原生场景下更好地支持批处理作业和高性能作业。
大会上,宣布成立了 Kubernetes WG Batch,并对相关的技术和项目(例如:Kueue、Resource Orchestration、Volcano、Pulsar)等,进行了分享和探讨,下面一起来了解一下。
01 新成立:Kubernetes Batch workingGroup
Kubernetes 最初是一个通用的编排框架,是为服务应用程序而构建的,并且希望能支持越来越多的有状态应用程序。当前,Kubernetes 社区发现 Kubernetes 对批处理作业的支持,存在很多不足,并且整个云原生社区中存在着重复造轮子的现象,于是决定成立批处理工作小组 (Batch WG),讨论如何在 Kubernetes 上更好地支持批处理作业。
批处理工作小组 (Batch WG) 的目标是统一用户部署批处理工作负载的方式,以提高可移植性并简化对 Kubernetes 供应者的可支持性。优化主要涉及四个方面:SIG 应用程序、SIG 自动伸缩、SIG 节点、SIG 调度。当前有三个工作主线:
- 改进 Job API 以支持更广泛的工作负载 (MPI、ML、AI)。
- Job 管理、队列、资源调配、调度和自动缩放。
- 对专用硬件的运行时和调度支持 (加速器、NUMA、RDMA 等)。
如果你有与批处理相关的项目 、增强方案或原型,可以邮件联系:
➔ slack.k8s.io #wg-batch
➔ wg-batch@k8s.io
➔ git.k8s.io/community/wg-batch
02 Kueue:基于 K8s原生的作业队列和弹性配额管理器
Kubernetes 的大多数核心组件都是以 Pod 为中心的,而对于批处理工作负载,只关注 pod 是不够的,比如,集群容量是有限的,需要能对集群资源进行配额和成本管理。因此用户希望有一种公平高效、共享资源的简单方法,能在 Kubernetes 实现传统批处理调度器中常见的排队功能。
Kueue 正是一个基于 K8s 原生的作业队列和弹性配额管理器,无需重复实现现有功能,如自动缩放、Pod 调度、作业生命周期管理和准入控制等,原生支持 batch/v1.Job API ,可用于集成自定义工作负载,支持公平共享和资源灵活性。Kueue 和现有的 Kubernetes 组件完美融合,不用担心功能差异,让客户使用更简单。
下一步的开发计划是:与常见定制工作负载的集成:Spark、Kubeflow 等;作业抢占机制;预算管理;多集群支持。
项目地址:
https://github.com/kubernetes-sigs/kueue
03 Resource Orchestration:NUMA 感知调度
当前,kubernetes 调度对 NUMA 是无感知的,资源管理器只存在于 Kubelet 中,导致当我们在 kubelet 上启用拓扑管理策略,如 “single-numa-node”,可能会引发大量 Topology Affinity Error 错误的 Pod。为了解决这个问题,同时也为了让有硬件需求的 HPC 作业或者性能敏感的应用程序能在 Kubernetes 上更好地运行,RedHat 团队向 Kubernetes 贡献了 NUMA 感知调度相关代码,主要实现逻辑如下:
- 引入 NodeResourceTopology CRD,负责维护资源信息,供调度插件调用;
- Agent 组件以 daemonset 的形式部署在每一个节点之上,负责更新 NRT 中资源使用情况;
- 集成调度插件,通过预选和优选进行常规的调度操作。
目前,NUMA 感知调度相关代码维护在
kubernetes-sig/scheduler-plugins 项目中,未来计划合并入 kubernetes 主库。
组织地址:
https://github.com/k8stopologyawareschedwg
04 Volcano:用于计算密集型工作负载的云原生批调度系统
**Volcano 是一个云原生批处理系统,也是 CNCF 的第一个批处理计算项目。**主要用在高性能计算 (HPC) 领域,如大数据、人工智能、基因计算。**Volcano 提供基于作业的公平共享、优先级、抢占、回收和队列管理功能,这些功能对 HPC 用户非常重要。**Volcano 在大数据、人工智能和 HPC 计算领域与 spark operator、fink operator、kubeflow、Cromwell 等计算生态系统进行了集成。今年,Volcano 还集成了 spark 与它的定制批量调度程序。贡献者正在开发许多新功能,例如,针对 HPC 用户的协同定位、弹性培训、vGPU、吞吐量优化和多集群调度。
自 2019 年开源以来,Volcano 已经被全球 50 多个用户成功部署,帮助用户加速 AI 培训、服务、大数据分析等,同时结合其他云原生项目提高集群利用率。
项目地址:
https://github.com/volcano-sh/volcano
05 Apache Pulasr:下一代云原生分布式消息流平台
**Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,**集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,在全球乃至国内都得到了广泛的应用。其商业化公司 StreamNative 与「DaoCloud 道客」也有着深入的合作。
随着 Apache Pulsar 社区的不断发展,越来越多的连接器将会接入 Pulsar,为了提高数据抽取和数据分发的可用性,Pulsar 和 NiFi 结合是一个不错的选择。NiFi 将充分发挥自身在 ELT、ETL、数据处理、转换、验证和批处理方面的优势。
项目地址:
http://github.com/apache/pulsar/
06 其他项目
此外,大会还分享了一些比较热门的项目。
Ray
**Ray:一个开源框架,为构建分布式应用程序提供简单、通用的 API。**可以减少 DL(深度学习) 模型的培训、扩展、部署和服务的复杂性障碍,让更多不同的用户能够访问 DL。
项目地址:
https://github.com/ray-project
Apache YuniKorn
**Apache YuniKorn :一个用于批处理工作负载的 Kubernetes 调度器插件。**使用 Apache YuniKorn 可以通过高级选项来调度批处理工作负载,如工作负载排队和配额共享等,并且不会影响传统的非批处理 Kubernetes 工作负载。
项目地址:
https://github.com/apache/yunikorn-core
随着云原生技术的广泛应用,越来越多的用户希望能在 K8s 上,进行高性能的工作负载,如 Apache Spark、PMLS(Petuum)、TensorFlow 等。在 K8s 中运行这些工作负载则需要高级功能,如公平调度、排队、作业管理 (暂停/恢复) 和数据管理等。Kubernetes 成为 AI、大数据和高性能批量计算的下一代基础设施已是大势所趋。在云原生场景下,如何更好地支持批处理作业和高性能作业,既是机遇,也是挑战。未来呼啸而来,期待与你一起成为未来行道者。