前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新一代企业级容器云平台GaiaStack:支持全类型应用

新一代企业级容器云平台GaiaStack:支持全类型应用

原创
作者头像
腾讯技术工程官方号
修改2017-12-14 17:40:56
3.3K0
修改2017-12-14 17:40:56
举报

作者:罗韩梅

12月7-9日,由中国计算机学会主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、中科天玑数据科技股份有限公司、CSDN协办的2017中国大数据技术大会(BDTC 2017)在北京新云南皇冠假日酒店盛大召开。腾讯技术工程事业群数据平台部资源调度和容器云负责人罗韩梅在12月8日的“大数据分析与生态系统论坛”上,以《腾讯Docker云平台GaiaStack》进行了主题演讲。

大家好,我是罗韩梅。GaiaStack是基于kubernetes打造的Docker私有云平台,腾讯内部所有BG都有产品或者服务在GaiaStack上运行。GaiaStack的本质是一个资源管理和调度平台,作为一个云操作系统服务于上层的各类应用。

GaiaStack是基于kubernetes,但是和kubernetes还是有很多不同。GaiaStack提供了从构建到交付到运行的一整套解决方案,包括代码构建、持续集成、容器服务、镜像仓库、服务编排等功能。我们最初的目标是服务公司内部产品的,现在借助互联网+和腾讯云开放GaiaStack的能力,服务更多的政企用户。

下面是GaiaStack的逻辑架构图,可以看到kubernetes是我们的核心系统,因此GaiaStack对用户交付的基本单元就是pod。但是也可以看到kubernetes只是GaiaStack的一个组件,还有很多其他关键组件。

GaiaStack更详细的物理架构图如下,主要还是基于kubernetes、Docker、Ceph、ES、etcd等开源系统,也有我们自研的很多关键组件,包括webportal、gate、apiswitch、deployment、CI-server等。我们将所有组件划分为三个层次,分别是global层、IDC层和cluster层,将所有集群的公共服务放到global层,由于IDC内部和跨IDC的网络环境差异比较大,所以我们将同一个IDC的多个集群可以共享的组件放到IDC层,如Ceph、Monitor等。

GaiaStack的特性非常多:首先是自动化运维,包括集群管理、监控告警、系统日志管理、用户账户管理等等,提供可视化、自动化的工作,降低使用者的人力成本和学习成本;支持企业内多集群、多租户管理模式,更加适用开发/测试环境的隔离,地区之间共享公共服务、企业内部多种业务共享集群等;全系统HA、热升级,即使GaiaStack平台版本升级,也不会影响应用的执行;协议兼容方面,同时支持Docker compose和kubernetes编排,支持多种Docker用户的使用习惯;更多维度的资源管理,保证可以更加安全的使用容器云;弹性伸缩可以全自动秒级扩容缩容,及时响应业务需求;依托腾讯内部稳定的Ceph服务,开发Docker云硬盘功能;也支持多种不同的网络模式。这里没有列出的还有很多,比如用户日志检索、WebShell、代码构建、操作记录审计等等。

做Docker容器云的厂商也有不少,其特性实现大多大同小异。GaiaStack最大的特色,就是它是一个真正通用的集群OS,目标是支持ALL。这个ALL的支持,根本上是为了做在线和离线业务的资源共享。我们都知道在线服务通常都具有以天为周期的资源特征,但是每个小时资源又多不同,甚至波动很大。为了充分利用资源,我们将在线和离线混布,这是一个具有极大收益的事情。但是kubernetes、Docker、kernel等很多底层系统却还没有准备好。为此,GaiaStack在底层能力建设这块投入了很多工作,主要包括kernel、Docker、Ceph、registry、kubernetes这几个方面。

首先是kernel。Docker云平台使用Docker来做资源的隔离,但本质上是使用了内核的cgroups来实现的。我们要做在线和离线的共享,而共享的前提一定是隔离。Docker和虚拟机相比,最被诟病的就是隔离做的不足,GaiaStack在内核引入对网络入带宽和disk IO的subsystem,来完善我们的资源控制。并且除了资源维度的增加,我们对所有资源还都采用了一种弹性的管理方式。

下面以网络入带宽为例:这个图是没有网络入带宽控制时,两个进程的带宽和时延都得不到任何保证。我们对网络IO的控制目标主要有两个:一是保证配额资源,第二是当有空闲资源时,不要浪费,可以借用其他cgroups的空闲带宽。当然还有优先级相关的控制,以及性能的要求。

加入了GaiaStack的网络入带宽控制之后,对于资源需求分别是50M和800M的两个cgroups,机器可供分配的总带宽是850M,也就是没有空闲带宽,两个cgroups都按照自己的资源需求得到了带宽。第二个图,机器上仍然是850M的总带宽,两个cgroups分别是20和70M,那么有130M的空闲带宽,我们可以看到两个cgroups可以用到超过自己配额的资源。

在diskIO的控制方面,其实cgroups是有一个blkio的子系统的,但是几乎没有哪家Docker云平台使用,根本原因有两个:第一,blkio对buffer IO是没有控制的。

第二,blkio有两个控制策略,分别是io weight和   throttle模式,但是其实这两个模式都不实用。Io weight使用时间片进行分割,而不是通过iops或者bps进行衡量。用户观察到的传输数据波动比较大。而throttle模式本质上是一种hard控制模式,无法充分利用资源。我们对disk IO的控制和前面对网络入带宽的控制目标是一致的。下图是控制效果,对于buffer write的测试,总的带宽有空闲,那么这两个Docker不但可以用到保证值,而且都可以达到ceil值。对于direct write,效果也是类似的。

Docker也是GaiaStack重点建设的底层能力,我们的Docker在腾讯内部是开源的,腾讯很多业务都使用我们的Docker,也有不少团队一起做贡献,当然我们也积极的向社区提交我们的一些patch。我们Docker的优化主要有这几个方面:首先最多的还是bug fix,保证线上的稳定性。另一个重点特性就是热升级的功能,保证当平台要升级Docker daemon时,对上面运行的应用进程完全不影响。第三个部分就是为Docker增加了很多插件,比如弹性内存控制、RBD插件、网络插件等,丰富了Docker的功能。

Ceph是GaiaStack的一个子团队,我们对Ceph的使用主要有两个方面:一是做离线数据的存储。有不少的业务,尤其是非hadoop生态的新的离线业务,他们更喜欢用Cephfs,因为可以完全透明的使用Cephfs,就像使用本地磁盘上的数据一样。Cephfs是Ceph最复杂,也是最不稳定的地方,所以GaiaStack在这块做了不少的优化,包括在可扩展性方面,实现了多MDS,在性能方面,特别针对大目录中大量文件的场景做了性能优化,另外,在内核的Cephfs模块,也fix了大量的内核bug,以及新特性开发。对Ceph的第二个使用是云硬盘。GaiaStack实现了两类云硬盘,普通云硬盘和内置云硬盘。内置云硬盘支持临时云硬盘和可迁移云硬盘。

下面是对kubernetes的建设。这里不得不说kubernetes真的已经很强大了,但是我们如果要把kubernetes用到ALL的场景下,对它的改造也是一言难尽。首先是quota管理,kubernetes的quota是以pod为单位的,而在线应用和离线应用有个很重要的地方在于准入检查,所以对于在线业务,我们不能以pod为单位去检查。在app这里,其实kubernetes已经支持了非常多的应用类型,但是我们发现不论是在线还是离线,实际场景中,还是不够用。比如在线业务,尤其是腾讯的业务,很多都有灰度升级的强烈需求,这里的灰度和kubernetes的灰度还不太一样。很多用户是想长时间的让业务在多版本的稳定状态下,所以我们开发了tapp的应用类型;在网络模式方面,没有哪种网络模式是最优的,只有最适合的。比如host网络性能很好,但是有端口冲突,需要应用适应,特别是使用了第三方库的业务来说,更加困难;Floating IP看起来很方便,但是很多场景下IP资源是有限的;overlay的IP资源没有限制,但是互通性不好;NAT一定程度上解决了端口冲突,但是性能不足,等等,所以GaiaStack让应用可以选择最适合的网络模式;磁盘管理是非常重要的一块,依托我们前面讲的Ceph,我们有些集群已经完全消灭了本地磁盘,全部采用云硬盘,可以让云硬盘跟着pod走,也可以让云硬盘当作临时工作目录,随时创建,随时销毁;最后,对于GPU应用,kubernetes简单的把GPU卡当作一种资源,我们增加了GPU的调度逻辑,考虑了GPU的拓扑关系,让应用可以获得更好的性能。

Registry是GaiaStack的基本组件,我们服务在线应用时,一般没有什么问题,但在离线应用中,需要大规模的应用部署时,性能问题就暴露的比较明显了,为此,我们开发了P2P的Registry。在镜像下载过程中,引入BT协议,在blob上传时,对blob生成种子,在下载镜像的blob时,先下载种子,再通过种子文件下载数据。而在具体的实现中,我们采用了一个外部的agent组件,这样不需要修改Docker daemon,对Docker做到了零入侵。

看下P2P registry的效果,我们可以看到,随着节点数的增加,并没有显著延长镜像的下载时间,并且节省了大量的registry流量。

最后,我们谈谈GaiaStack的开放。GaiaStack立足于开源项目,已经向社区提交了大量的issue,同时,也会以私有云的方式开放给广大政企用户,目前已经上架到腾讯云的黑石上。黑石是在腾讯云直接售卖物理机,在私有云场景下,与Docker结合,可以达到最优的效果,而且GaiaStack也针对黑石的环境做了专门的对接,比如,兼容了黑石网络,GaiaStack自研了遵循CNI网络标准的kubernetes网络插件,与黑石的VPC网络进行了打通,使得容器与容器,容器与黑石物理机,容器与集群外同VPC的服务均可以直接路由。兼容了黑石负载均衡,直接使用容器的VPC IP注册黑石的负载均衡,避免了kubernetes基于iptables NAT实现的nodePort方式的性能损失等。当然,除了在黑石的环境,在腾讯云的虚拟机环境,在用户自己的机房环境下,GaiaStack也可以以私有云的方式服务。为了更好的开放,我们将GaiaStack全面产品化,引入了套件做自动化,可视化的部署和运营系统。比如主机视图、服务视图,也可以在页面上自动扩容集群,下线机器等。同时,为了更好的运营云平台,我们引入了主机管理、服务管理、业务管理、用户管理、监控、告警、日志、配置管理等等,让GaiaStack成为一站式的容器云PAAS平台。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档