Borg和Kubernetes有什么不同?未来的云需要什么?

大家好,我是来自于华为PaaS部门的钟成,目前正在做相关的一些产品研发。我想分享的主题是从Borg到Kubernetes,其实Borg就是Kubernetes的前身。我今天主要会谈三个方面,第一个是Borg的介绍,第二是Kubernetes基于Borg做了哪些改变,以及它的发展方向,第三个话题想谈一下未来的云可能需要一个怎么样的产品或者是怎么样的形态。

Borg是什么?它解决了什么问题?

我们先看第一个话题,就是Borg是什么?它解决了什么问题?

我们看一下这张图,这张图来自于一部电影叫做《星际迷航》相信大家大部分人都看过。Borg是里面的一种外星人,反派,他做什么事情呢?他和其他的文明接触,把你这个文明抢占下来,然后它会和你同化,会把你进行改造,把你改造成一个半人半机器的怪物,你就变成他们这个文明当中的一部分,然后他在这个宇宙当中不断的扩张下去。我觉得这是一个非常酷的种族。而Borg就以这个名字来命名其大规模分布式的集成管理系统。他希望他们的系统也可以把不同的机器同化掉,变成他们自己的机器,然后运行他们自己的程序。

Borg和Kubernetes有什么不同?未来的云需要什么?

对谷歌来说,Borg是一个比较顶层的集成管理系统。在它上面跑了谷歌大部分的应用程序和框架包括Gmail、Google Docs、Web Search这样直接面对客户的一些应用程序。它同时也包括一些底层的框架,(MR),包括它的一些GFS这些分布式的存储系统。也就是说你可以认为所有的应用程序都需要通过它来管理底层的这些物理机。Borg在谷歌已经成功的应用的十多年。

Borg和Kubernetes有什么不同?未来的云需要什么?

大家可以看一下Borg的整体的架构。它也是一个典型的分布式平台的架构,就是一个逻辑上的master,然后下面有很多的节点,每一个节点上有一些它的代理程序。这里就可以看一下,作为谷歌内部的一个工程师怎么样用这个系统呢?他们使用Borgcfg(命令行)或者Web UI提交需要跑的应用(Task) 到系统,Task可以是任何一种东西,比如说他是一个应用程序,或者是一个批处理任务,或者是一个(MR)的任务。他把这个任务通过Borgcfg提交到BorgMaster,然后BorgMaster会接受这个请求,把请求放到队列里面去,并由Scheduler来扫描这个队列,查看这个应用的资源需求,并在集群中寻找匹配的机器。你其实提交的这个任务,它需要多少的资源,你需要怎么样的机器,大概要跑多少时候,他会做一个匹配,就会看到底层有哪些机器是空闲的。然后就把这个任务发配到这个机器上面去,然后开始运行。

Borg和Kubernetes有什么不同?未来的云需要什么?

这个就是总体的一个Borg的框架。一个典型的启动时间,从用户提交应用到应用启动是25秒。其中80%的时间是每个节点上下载这个应用包的时间。大家可以看到这个时间是很快的,它的调度时间还不到5秒,其中20秒是耗在传输这一层上。

关于BorgMaster的调度原理

我后面主要想探讨一下,我今天想说的一个重点就是关于BorgMaster,它这里有很多应用,它怎么样调动这个应用的优先级呢?或者说到底哪台机器应该跑什么应用呢?Borg的做法就是对单个Task做了一个资源上的估量,大家可以看到这里有好几条线,其中一个机器上面最外面的那条虚线就是用户提交的一个资源的一个配额,就是Task再怎么运行也不能超过它的限制,这是一个硬性的限制,如果说超过这个限制,就会限制它,不让它跑。这只是用户提交的数字,大家知道用户提交的数字很多时候是不准确的,你无法预估到底你的程序在你的系统上需要耗多少CPU,占多少内存。Borg是怎么去评估这个资源呢?他在Task启动300秒之后,就进行一个资源回收的工作。大家可以看到中间有一个黄色的区域,黄色的区域就是这个应用程序实际上所消耗的资源。然后它会从外面,慢慢把它推进去,推到绿区的地方,推到绿区的地方划一条线,这条线就是所谓的保留资源,就是Borg这个系统认为你这个应用是长期稳定运行的所需要的资源。

Borg和Kubernetes有什么不同?未来的云需要什么?

这里就有一个问题,为什么Borg要这么做呢?原因是为了把剩下的区域的资源给空出来,如果说我知道这个应用实际上就用了这么多的资源。然后我给它划了一定的安全线之后,剩下的这些资源我就可以调度出来,也就是说可以给到其它的应用程序用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/350a0829475ccf0fd16e383b21d161aa.html