摘要:Volcano主要是基于Kubernetes作的一个批处理系统,但愿上层的HPC、中间层大数据的应用以及最下面一层AI可以在统一Kubernetes上面运行的更高效。
Volcano产生的背景
上图是咱们作的一个分析,咱们将其分为三层,最下面为资源管理层,中间为领域的框架,包括AI的体系、HPC、Batch, WKflow的管理以及像如今的一些微服务及流量治理等。再往上是行业以及一些行业的应用。node
随着一些行业的应用变得复杂,它对所需求的解决方案也愈来愈高。举个例子在10多年之前,在金融行业提供解决方案时,它的架构是很是简单的,可能须要一个数据库,一个ERP的中间件,就能够解决银行大部分的业务。算法
而如今,天天要收集大量的数据,它须要spark去作数据分析,甚至须要一些数据湖的产品去创建数据仓库,而后去作分析,产生报表。同时它还会用 AI的一些系统,来简化业务流程等。sql
所以,如今的一些行业应用与10年前比,变得很复杂,它可能会应用到下面这些领域框架里面的一个或多个。其实对于行业应用,它的需求是在多个领域框架做为一个融合,领域框架的诉求是下面的资源管理层可以提供统一的资源管理。数据库
Kubernetes如今愈来愈多的承载了统一的资源管理的角色,它能够为 HPC这些行业领域框架提供服务,也能够做为大数据领域的资源管理层。Volcano主要是基于Kubernetes作的一个批处理系统,但愿上层的HPC、中间层大数据的应用以及最下面一层AI可以在统一Kubernetes上面运行的更高效。api
Volcano要解决什么样的问题?
挑战 1: 面向高性能负载的调度策略性能优化
e.g. fair-share, gang-scheduling
挑战 2: 支持多种做业生命周期管理网络
e.g. multiple pod template, error handling
挑战 3: 支持多种异构硬件session
e.g. GPU, FPGA
挑战 4: 面向高性能负载的性能优化架构
e.g. scalability, throughput, network, runtime
挑战 5:支持资源管理及分时共享并发
e.g. Queue, Reclaim
Volcano架构体系
蓝色部分是 K8s自己的组件,绿色的部分是Volcano新加的一些组件。
做业提交流程:
一、经过 Admission 后,kubectl 将在 kube-apiserver中建立 Job (Volcano CRD) 对像
二、JobController 根据 Job 的配置建立 相应的 Pods e.g. replicas
三、Pod及PodGroup建立 后,vc-scheduler 会到 kube-apiserver 获取Pod/PodGroup 以及 node 信息
四、获取信息后,vc-scheduler 将根据其配置的调度策略为每个 Pod 选取合适节点
五、在为Pod分配节点后,kubelet 将从kube-apiserver中取得Pod的配置,启动相应的容器
须要强调的几点:
vc-scheduler 中的调度策略都以插件的形式存在, e.g. DRF, Priority, Gang
vc-controllers 包含了 QueueController, JobController,PodGroupController 以及 gc-controller
vc-scheduler 不只能够调度批量计算的做业,也能够调度微服务做业;而且能够经过 multi-scheduler 功能与 kube-scheduler 共存
部分组件介绍
Controller
左边为Volcano Job Controller,不仅调度使用的Volcano,Job的生命周期管理、做业管理都在这里面包含。咱们提供了统一的做业管理,你只要使用Volcano,也不须要建立各类各样的操做,就能够直接运行做业。
右边为CRD Job Controller,经过下面的PodGroup去作集成。
scheduler架构体系
Scheduler支持动态配置和加载。左边为apiserver,右边为整个Scheduler,apiserver里有Job、Pod、Pod Group;Scheduler分为三部分,第一层为Cache,中间层为整个调度的过程,右边是以插件形式存在的调度算法。Cache会将apiserver里建立的Pod、Pod Group这些信息存储并加工为Jobinfors。中间层的OpenSession会从Cache里拉取Pod、Pod Group,同时将右边的算法插件一块儿获取,从而运行它的调度工做。
状态之间根据不一样的操做进行转换,见下图。
另外,咱们在Pod和Pod的状态方面增长了不少状态,图中蓝色部分为K8s自带的状态;绿色部分是session级别的状态,一个调度周期,咱们会建立一个session,它只在调度周期内发挥做用,一旦过了调度周期,这几个状态它是失效的;黄色部分的状态是放在Cache内的。咱们加这些状态的目的是减小调度和API之间的一个交互,从而来优化调度性能。
Pod的这些状态为调度器提供了更多优化的可能。例如,当进行Pod驱逐时,驱逐在Binding和Bound状态的Pod要比较驱逐Running状态的Pod的代价要小 (思考:还有其它状态的Pod能够驱逐吗?);而且状态都是记录在Volcano调度内部,减小了与kube-apiserver的通讯。但目前Volcano调度器仅使用了状态的部分功能,好比如今的preemption/reclaim仅会驱逐Running状态下的Pod;这主要是因为分布式系统中很难作到彻底的状态同步,在驱逐Binding和Bound状态的Pod会有不少的状态竞争。
在功能上面能带来哪些好处?
- 支持多种类型做业混合部署
- 支持多队列用于多租户资源共享,资源规划;并分时复用资源
- 支持多种高级调度策略,有效提高整集群资源利用率
- 支持资源实时监控,用于高精度资源调度,例如 热点,网络带宽;容器引擎,网络性能优化, e.g. 免加载
分布式训练场景:
Gang-scheduler
Case 1: 1 job with 2ps + 4workers
Case 2: 2 jobs with 2ps + 4workers
Case 3: 5 jobs with 2ps + 4workers
在Volcano和 kubeflow+kube-scheduler作对比,Case 1在资源充足的时候效果是差很少的;Case 2是在没有足够的资源的状况下同时运行两个做业,若是没有 gang-scheduling,其中的一个做业会出现忙等 ;Case 3看成业数涨到5后,很大几率出现死锁;通常只能完成2个做业。
IOAware
3个做业的执行时间总和; 每一个做业带2ps + 4workers
默认调度器执行时间波动较大
执行时间的提升量依据数据在做业中的比例而定
减小 Pod Affinity/Anti-Affinity,提升调度器的总体性能
大数据场景
Spark-sql-perf (TP-DCS, master)
104 queries concurrently
(8cpu, 64G, 1600SSD) * 4nodes
Kubernetes 1.13
Driver: 1cpu,4G; Executor: (1cpu,4G)*5
若是没有固定的driver节点,最多同时运行 26 条查询语句
因为Volcano提供了做业级的资源预留,整体性能提升了~30%
HPC场景
MPI on Volcano
规划
GPU共享特性
1)算力优化:
- GPU硬件加速,TensorCore
- GPU共享
- 昇腾改造
2)调度算法优化:
Job/Task模型,提供AI类Job统一批量调度
多任务排队,支持多租户/部门共享集群
单Job内多任务集群中最优化亲和性调度、Gang Scheduling等
主流的PS-Worker、Ring AllReduce等分布式训练模型
3)流程优化
- 容器镜像
- CICD流程
- 日志监控
Volcano能够支持更大规模的一个集群调度,咱们如今是1万个节点百万容器,调度的性能每秒达到2000个Pod。
1)编排:
Etcd 分库分表,e.g. Event 放到单独库,wal/snapshot 单独挂盘
经过一致性哈希分散处理,实现 controller-manager 多活
Kube-apiserver 基于工做负载的弹性扩容
2)调度:
经过 EquivalenceCache,算法剪枝 等技术提高单调度器的吞吐性能
经过共享资源视图实现调度器多活,提高调度速率
3)网络:
经过trunkport提高单节点容器密度及单集群ENI容量
经过 Warm Pool 预申请网口,提高网口发放速度
基于eBPF/XDP 支持大规模、高度变化的云原生应用网络,e.g. Service, network policy
4)引擎:
containerd 并发 启动优化
支持shimv2,提高单节点容器密度
镜像下载加速 Lazy loading
Cromwell社区集成
Cromwell是一个流程调度软件,它能够定义不一样的做业,这个软件在基因测序以及基因计算领域里应用是比较普遍的。
Cromwell 社区原生支持Volcano
企业版已经上线 华为云 GCS
经过 cromwell 支持做业依赖
Volcano 提供面向做业、数据依赖的调度
Volcano CLI
KubeSim
简介:
集群进行性能测试及调度的描述工具
不受资源限制,模拟大规模K8S集群
完整的K8S API调用,不会真正建立pod
已经支持产品侧大规模专项及调度专项的模拟工做
整体结构:
Worker cluster:承载kubemark虚拟节点,hollow pod
Master cluster:管理kubemark虚拟节点,hollow node
Hollow pod = hollow kubelet + hollow proxy
社区活跃度:
• 1.4k star,300+ fork,150+ 贡献者
• 3 Maintainer,7 Reviewer
• 30 家企业、科研机构
目前使用Volcano的部分企业