12月7-9日,由中国计算机学会主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、中科天玑数据科技股份有限公司、CSDN协办的2017中国大数据技术大会(BDTC 2017)在北京新云南皇冠假日酒店盛大召开。腾讯技术工程事业群数据平台部资源调度和容器云负责人罗韩梅在12月8日的“大数据分析与生态系统论坛”上,以《腾讯Docker云平台GaiaStack》进行了主题演讲。
大家好,我是罗韩梅。GaiaStack是基于kubernetes打造的Docker私有云平台,腾讯内部所有BG都有产品或者服务在GaiaStack上运行。GaiaStack的本质是一个资源管理和调度平台,作为一个云操作系统服务于上层的各类应用。
![](https://i-blog.csdnimg.cn/blog_migrate/723f3769e883d039c2eacdbbe549157b.png)
GaiaStack是基于kubernetes,但是和kubernetes还是有很多不同。GaiaStack提供了从构建到交付到运行的一整套解决方案,包括代码构建、持续集成、容器服务、镜像仓库、服务编排等功能。我们最初的目标是服务公司内部产品的,现在借助互联网+和腾讯云开放GaiaStack的能力,服务更多的政企用户。
![](https://i-blog.csdnimg.cn/blog_migrate/e578670bbf96daa5dd2ae32a90c214d9.png)
下面是GaiaStack的逻辑架构图,可以看到kubernetes是我们的核心系统,因此GaiaStack对用户交付的基本单元就是pod。但是也可以看到kubernetes只是GaiaStack的一个组件,还有很多其他关键组件。
![](https://i-blog.csdnimg.cn/blog_migrate/3129b719cc4af8bc1dafc7727beca52b.png)
GaiaStack更详细的物理架构图如下,主要还是基于kubernetes、Docker、Ceph、ES、etcd等开源系统,也有我们自研的很多关键组件,包括webportal、gate、apiswitch、deployment、CI-server等。我们将所有组件划分为三个层次,分别是global层、IDC层和cluster层,将所有集群的公共服务放到global层,由于IDC内部和跨IDC的网络环境差异比较大,所以我们将同一个IDC的多个集群可以共享的组件放到IDC层,如Ceph、Monitor等。
![](https://i-blog.csdnimg.cn/blog_migrate/78716c0347b2698ab26ca1937fe422c8.png)
GaiaStack的特性非常多:首先是自动化运维,包括集群管理、监控告警、系统日志管理、用户账户管理等等,提供可视化、自动化的工作,降低使用者的人力成本和学习成本;支持企业内多集群、多租户管理模式,更加适用开发/测试环境的隔离,地区之间共享公共服务、企业内部多种业务共享集群等;全系统HA、热升级,即使GaiaStack平台版本升级,也不会影响应用的执行;协议兼容方面,同时支持Docker compose和kubernetes编排,支持多种Docker用户的使用习惯;更多维度的资源管理,保证可以更加安全的使用容器云;弹性伸缩可以全自动秒级扩容缩容,及时响应业务需求;依托腾讯内部稳定的Ceph服务,开发Docker云硬盘功能;也支持多种不同的网络模式。这里没有列出的还有很多,比如用户日志检索、WebShell、代码构建、操作记录审计等等。
![](https://i-blog.csdnimg.cn/blog_migrate/dffa558a9258b36174ee92693e3f005d.png)
做Docker容器云的厂商也有不少,其特性实现大多大同小异。GaiaStack最大的特色,就是它是一个真正通用的集群OS,目标是支持ALL。这个ALL的支持,根本上是为了做在线和离线业务的资源共享。我们都知道在线服务通常都具有以天为周期的资源特征,但是每个小时资源又多不同,甚至波动很大。为了充分利用资源,我们将在线和离线混布,这是一个具有极大收益的事情。但是kubernetes、Docker、kernel等很多底层系统却还没有准备好。为此,GaiaStack在底层能力建设这块投入了很多工作,主要包括kernel、Docker、Ceph、registry、kubernetes这几个方面。
![](https://i-blog.csdnimg.cn/blog_migrate/ec3d3408a8275cef0111e09a90f2aeac.png)
首先是kernel。Docker云平台使用Docker来做资源的隔离,但本质上是使用了内核的cgroups来实现的。我们要做在线和离线的共享,而共享的前提一定是隔离。Docker和虚拟机相比,最被诟病的就是隔离做的不足,GaiaStack在内核引入对网络入带宽和disk IO的subsystem,来完善我们的资源控制。并且除了资源维度的增加,我们对所有资源还都采用了一种弹性的管理方式。
![](https://i-blog.csdnimg.cn/blog_migrate/005c4084da997aa54d49907a9b29cfa2.png)
下面以网络入带宽为例:这个图是没有网络入带宽控制时,两个进程的带宽和时延都得不到任何保证。我们对网络IO的控制目标主要有两个:一是保证配额资源,第二是当有空闲资源时,不要浪费,可以借用其他cgroups的空闲带宽。当然还有优先级相关的控制,以及性能的要求。
![](https://i-blog.csdnimg.cn/blog_migrate/cccb12a387560576536ce0592772caa1.png)
加入了GaiaStack的网络入带宽控制之后,对于资源需求分别是50M和800M的两个cgroups,机器可供分配的总带宽是850M,也就是没有空闲带宽,两个cgroups都按照自己的资源需求得到了带宽。第二个图,机器上仍然是850M的总带宽,两个cgroups分别是20和70M,那么有130M的空闲带宽,我们可以看到两个cgroups可以用到超过自己配额的资源。