本文翻译自https://blog.cloudera.com/blog/2019/07/yunikorn-a-universal-resource-scheduler/
作者:杨巍威,Wangda Tan, Vinod Kumar Vavilapalli, Sunil Govindan, Wilfred Spiegelenburg
翻译:刘岩
Hello World,已经有一段时间了!
今天我们非常兴奋地宣布开源我们在幕后工作了很久的大数据存储和通用计算平台交叉的一个令人兴奋的新项目 - YuniKorn!- 一个新的独立通用资源调度程序,负责为大数据工作负载分配/管理资源,包括批处理作业和常驻运行的服务。
让我们一起来深入了解一下!
介 绍
YuniKorn是一种轻量级的通用资源调度程序,适用于容器编排系统。它的创建是为了一方面在大规模,多租户环境中有效地实现各种工作负载的细粒度资源共享,另一方面可以动态地创建云原生环境。YuniKorn为混合工作负载提供统一的跨平台调度体验,包括无状态批处理工作负载和状态服务,支持但不限于YARN和Kubernetes。YuniKorn[‘ju:nikɔ:n]是一个虚构的词,“Y”代表YARN,“K”代表K8s,“Uni”代表统一,其发音与“Unicorn”相同。创建它是为了最初支持这两个系统,但最终目的是创建一个可以支持任何容器协调器系统的统一调度程序。
YuniKorn目前有4个组件
yunikorn-scheduler-interface
yunikorn-core
yunikorn-k8shim
yunikorn-web
我们将在下面稍后深入讨论这些问题。
背 景
企业用户在不同的平台上运行工作负载,例如YARN和Kubernetes。他们需要使用不同的资源调度程序,以便规划其工作负载有效地在这些平台上运行。目前,调度程序生态系统是分散的,并且在平衡现有用例(如批处理工作负载)以及云本机体系结构,自动扩展等新需求方面的实现不是最理想的。例如:
- YARN具有批量工作负载的Capacity Scheduler 和Fair Scheduler。
- K8s具有服务的默认调度程序。对于批处理工作负载,社区有Kube-batch,Poseidon,Rubix(Spark的Scheduler扩展)。
我们调查了这些项目,并意识到到目前为止还没有一个完美的方案来支持无状态批处理作业(需要公平性,高调度吞吐量等)和长期运行服务(需要持久化存储,复杂的编排约束,等等。)。这促使我们必须创建一个统一的调度框架来满足所有这些重要需求,并使大数据和云原生社区受益。
架 构
YuniKorn的其中一个设计目标是将调度程序与下面的资源管理系统分离,为此,我们创建了一个定义通信协议的通用调度程序接口。通过利用它,scheduler-core和shim一起工作来处理调度请求。关于YuniKorn组件的解释如下。
图:YuniKorn 架构
YuniKorn的主要模块
YuniKorn -scheduler-interface:调度程序接口是资源管理平台(如YARN / K8s)将通过诸如GRPC /编程语言绑定之类的API与之交谈的抽象层。 | |
---|---|
YuniKorn Core:YuniKorn Core 封装了所有调度算法,它从资源管理平台(如YARN / K8s)下面收集资源,并负责资源分配请求。它决定每个请求的最佳部署位置,然后将响应分配发送到资源管理平台。调度程序核心与下层平台无关,所有通信都通过调度程序接口。 | |
Scheduler Shim Layers:调度程序Shim在主机系统内运行(如YARN / K8s),它负责通过调度程序接口转换主机系统资源和资源请求,并将它们发送到调度程序核心。在做出调度程序决策时,它负责实际的pod /容器绑定。 | |
Scheduler UI:调度程序UI为已托管的节点,计算资源,应用程序和队列提供简单视图。 |
YuniKorn -scheduler-interface:调度程序接口是资源管理平台(如YARN / K8s)将通过诸如GRPC /编程语言绑定之类的API与之交谈的抽象层。
YuniKorn Core:YuniKorn Core 封装了所有调度算法,它从资源管理平台(如YARN / K8s)下面收集资源,并负责资源分配请求。它决定每个请求的最佳部署位置,然后将响应分配发送到资源管理平台。调度程序核心与下层平台无关,所有通信都通过调度程序接口。
Scheduler Shim Layers:调度程序Shim在主机系统内运行(如YARN / K8s),它负责通过调度程序接口转换主机系统资源和资源请求,并将它们发送到调度程序核心。在做出调度程序决策时,它负责实际的pod /容器绑定。
Scheduler UI:调度程序UI为已托管的节点,计算资源,应用程序和队列提供简单视图。
YuniKorn的一些特性
以下是YuniKorn目前支持的调度功能列表:
调度功能支持批处理作业和长期运行/有状态服务
具有最小/最大资源配额的分层池/队列
队列,用户和应用程序之间的资源公平性
基于公平性的跨队列抢占
自定义资源类型(如GPU)调度支持
丰富的编排约束支持
根据策略自动将传入的容器请求映射到队列
对节点使用专用配额/ ACL管理将大的集群拆分成若干子群集
同时,YuniKorn作为调度程序对K8S的一些支持如下:
支持K8s谓词。如pod亲和/反亲和,节点选择器
支持持久化存储,配额申请等
从configmap动态加载调度程序配置(热刷新)
可以在Kubernetes之上部署
YuniKorn Web支持监视调度程序队列,资源使用,应用程序等。
YuniKorn Web UI
YuniKorn用于监控的Web UI
What’s Next ?
在单一系统上运行混合负载存在许多的挑战,YuniKorn是我们打算让这条路径更容易的选择。我们的目标是开始支持各种大数据工作负载运行在K8S集群之上。同时,我们正在努力更好地支持K8S上的Spark,Flink和Tensorflow等工作负载。我们的最终目标是为大数据和云原生世界带来最佳的调度体验。
对YuniKorn感到兴奋?
了解详情可点击下方链接
项目入门:
https://github.com/cloudera/yunikorn-core
如何贡献:
https://github.com/cloudera/yunikorn-core/blob/master/docs/how-to-contribute.md
项目路线图:
https://github.com/cloudera/yunikorn-core/blob/master/docs/roadmap.md
关于原文作者
Weiwei Yang,Cloudera的软件工程师,Apache Hadoop提交者和PMC成员,专注于分布式系统上的资源调度。
Wangda Tan,Cloudera的K8S/Yarn团队资深软件工程师经理,Apache Hadoop PMC成员和提交者。自2011年以来的Apache Hadoop。资源管理,调度系统,计算平台的深度学习。
Sunil Govindan,Cloudera软件工程经理。自2013年以来的Apache Hadoop项目,贡献者,提交者和PMC成员。Hadoop YARN调度。
Wilfred Spiegelenburg,Cloudera软件工程师。6年的Apache Hadoop开发经验,主要在YARN,MapReduce和Spark。
Vinod Kumar Vavilapalli,Hortonworks / Cloudera的工程总监。Apache Hadoop PMC主席。ASF会员。Apache Hadoop创始团队成员之一。主要精力在大数据,大规模调度,容器化支持,扩展性及开源社区。