BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

刘超:Docker比OpenStack更易用,坚定选择Kubernetes
录制于:

| 受访者 刘超 关注 0 他的粉丝 作者 InfoQ 关注 7 他的粉丝 发布于 2017年3月22日 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!
32:50

个人简介 刘超,网易蜂巢解决方案总架构师。10年云计算领域研发及架构经验,Open DC/OS贡献者。长期专注于kubernetes, OpenStack、Hadoop、Docker、Lucene、Mesos等开源软件的企业级应用及产品化。曾出版《Lucene应用开发揭秘》。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

2. 请您简单介绍一下您的技术路线,怎么赶上容器化的潮流?

刘超:很多做容器化的都是做云平台出身的,但是我自己的路线可能有一些不一样,我是做应用和云平台交叉,我一开始做搜索引擎出身,当时涉及到很多分布式系统的东西,但是牵扯到很多优化的时候就会牵扯到下面的网络、存储的东西,就开始对这些Iaas平台进行相对比较深入的研究,后来加入了OpenStack社区,它当时非常火,在OpenStack社区里面感受了开源文化的魅力,大家都可以contribute、发表自己的观点,提bug,提issue,也可以帮着写文档,什么都可以,做了一段OpenStack以后就发现有容器这个东西,就觉得真好。因为OpenStack太复杂,很多复杂的东西在运维的时候就非常头疼,容器好像没有那么头疼,后来就开始看这个东西。觉得用起来比较舒服,无论想要什么环境瞬间就出来了。这时候容器有各种平台,有swarm、Mesos和kubernetes,这三个我们也都试用过,整个社区现在在这三个里面其实还在摇摆,虽然kubernetes处于比较火的状态。为什么觉得kubernetes比较好,容器强调微服务,kubernetes本身的设计就是一个微服务,分成很多的模块,每个模块只做自己的事情,定制化的时候也比较容易,不需要改一个大的工程,比如我们改了kubernetes的调度,我只要碰调度模块就可以了,不需要碰API等模块,只要碰这个模块就可以了,它从平台层就非常符合微服务的概念。

   

3. 我们谈谈网易蜂巢,运行容器的基础设施平台是否采用了IaaS平台,类似OpenStack这样的项目?

刘超:用了Iaas平台的项目,网易蜂巢在做kubernetes之前有一段私有云的历程,在Docker兴起之前OpenStack时代网易一头就扎进去了,刚才说OpenStack很复杂,这里面比较吃工夫的是网络优化、存储优化,需要很多人去做各种调试,但是一旦调好了能支撑很大的应用以后正好容器来了,发现容器也有这个问题,容器虽然有各种好,但是它解决不了网络和存储的问题,需要外面的插件来做,如果用开源的话这些插件没有达到那么成熟的状态。我们就想能否把OpenStack这一层已经积累了很长时间的技术能力应用到容器层,所以这个容器复用了我们在OpenStack这一层做的很多的优化,包括负载均衡、vpn、网络、存储,还包括认证这些东西。

   

4. 突然想到一个问题,您是做OpenStack做过来的,现在OpenStack本身这些东西在container化,您怎么看待这个技术?

刘超:OpenStack本身的容器有两种做法:一种是OpenStack本身所有的组件容器化,方便它的部署;另外一方面OpenStack本身也可以管容器。第二种方法最大的问题就是OpenStack对容器来说太复杂了,它有很多的功能容器本身用不到,容器本身也有自己的机制,不需要融入到OpenStack里面和它绑的太紧,我觉得做哪方面的技术就要冲到那个行业最热的里面去,大家都去contribute,这样使得整个社区完善的非常快,你自己的系统加固、改进也会非常快。第一种方式是把所有的组件进行容器化,这个其实是非常好的,有人把kubernetes控制的容器化,也会把Mesos控制层面容器化,这个容器化会导致它的部署成本和运维非常的简化,比如OpenStack想升级可能一个镜像就升级了。但是也有问题,最大的问题就是Docker本身和原来版本的兼容性的问题,因为Docker的技术发展路线比较激进,向后兼容没有做到特别好,这样导致一个问题:我作为一个管理平台部署到容器里,如果部署在原来版本的容器里面,现在我的容器需要升级了,那么原来的能不能平滑的升级上去,我作为一个管理的层面又不能随便把它干掉,这是一个难点。

   

5. 我们稍微往细节说一下,在持久化存储这块网易蜂巢是如何实现的?

刘超:持久化存储业界的方案用Ceph比较多,我们也是用Ceph集群,持久化存储一般有本地化存储,如果公司有钱可以买SAN或者NAS,如果比较喜欢开源的话就可以用Ceph集群来做,蜂巢的路也是这么走过来的,现在基本上远程云盘都是用Ceph集群。

   

6. Ceph的block storage?

刘超:对,Ceph的block storage,Ceph有FS和block storage,到底用哪个好,FS简单一些,直接能看到一个文件系统,block storage复杂一些,但是它的时间长,稳定性高,FS经过redhat的一个paper测试,它的稳定性没有那么高,不建议上生产。

   

7. 网络方面是ovs+vlan吗?

刘超:对,VXLAN,OVS+VXLAN

   

8. 有没有上一些DPDK?

刘超:上DPDK了。

   

9. 当时怎么考虑这个方案?

刘超:一方面是OpenStack就用OVS,OVS其实是virtual switch开源里面事实上的标准,用开源的用virtual switch的都会采取它进行加固,但是它自己在版本的改进过程中为了性能改进会有一些方案,像DPDK,从用户往内核里面context switch过去,再switch回来,这种多层的context switch会造成性能损耗,DPDK把它抹平,全部在user mode里面,在user mode还有一个好处是可控制的内存量大多了,这时候虚拟机之间包括容器之间包的转换如果在本机相当于内存的拷贝,我们测出来性能就会有很大幅度提升。

   

10. 我昨天听了一个京东云的分享,他们对OVS包的大小做了一些调整,你们这边有吗?

刘超:OVS对特别小的包处理好象有问题,如果小包处理特别多,在VM那端会引起很多中断,导致有问题,这时候会有小包合并或者控制小包发的频率,会做这样的事情。

   

11. 跳到应用上,网易蜂巢是一个CaaS,目前除了网易自己的应用之外,对外提供的服务有没有比较典型的,特殊的应用?

刘超:有,网易的整个风格是自己先用,用了很长时间再开放出去,我们一开始也是自己用,把自己的很多应用搬上来,发现它稳定、能够支撑足够大的量,我们就会对外。我们对外的时候也是率先服务一些非常有自信的行业,比如说考拉,外面的电商有圣特尔、商派,这种电子商务是我们比较大的一个点。他们双十一也要扛很大的量,我们的工程师也是和他们深度合作帮助他们扛住量,这是容器这个时代的服务模式和虚拟机不太一样的地方。如果你买的是虚拟机,虚拟机只要不挂和我的关系不大,你买的是我的虚拟机,但如果你买的是我的容器,很难说我的容器和你的应用没有关系,因为它们已经绑在一块了,这时候我们的架构师整个团队或者工程师整个团队有责任帮他们扛过双十一,我们给你架构梳理,帮你扩容,做容量规划,帮他们扛住过双十一。另外一个想打的点就是网游,我们做了很多的游戏,所以知道网游的一些场景,比如多人同时在线,比如两人对打的时候需要机器临时做一些计算,这个场景特别适合容器,当他们打起来的时候,或者网游公司发起活动,大家都开始玩,当两个人打起来的时候,比如说原来三台机器能撑,现在需要五台、十台,这种互相搏击类游戏CPU消耗比较多,计算消耗比较多所以这种场景更适合容器。我们不光把自己的资源开放给开户,我们的知识、经验都会帮客户做梳理。

   

13. 比如您刚才讲到的游戏例子是怎么做的?

刘超:其实游戏倒还好,做这个事情的时候,需要这个公司从领导层首先要意识到容器化的好处,要有意志要追上技术的潮流,能利用潮流带来的技术优势帮我们的业务,如果是传统的企业我们就要花很长时间说服它。如果他是理念很先进的CEO或者CTO,我们就很容易说服他。我们帮别人做架构改进的时候,也不是贸然说什么东西都打的七零八落的,第一点从非关键性业务做起,第二先做去状态化,先不要把服务拆的七零八落,把信息都保存在统一的存储缓存里面,这样的业务上来以后我们帮它梳理上线。这样他们就开始意识到应用经过这样的改造可以快速迭代了。

   

14. 网易蜂巢在选型的时候选择了kubernetes,它最大的技术优势是什么?当时花了多长时间做选型?

刘超:当时我们决定docker化的时候,docker的集群管理工具产生的三个流派,swarm,kubernetes和mesos还是平分秋色的,我们之所以选定用kubernetes主要是两个考虑,一个是架构一个是社区。架构上是说我们认为一个开源软件要做的足够强大,能成为事实上的标准,首先它的架构要足够开放,允许用户做比较多的定制化,比如开发一些plugin和hook,如果足够开放大家就会涌进来做contribution。可能你的软件一开始并不是那么的完美,只要大家勇于参与进来,不断贡献,它的feature会越来越多,功能也会越来越稳定。另外一个就是它的社区要有一定的热度,社区到了一定的热度,更多的客户就会选取它,OpenStack从诞生开始并不是完美的,有很多的云平台比它完美,比它稳定,但是最后它成为一个翘楚,变成事实的标准就是因为它一开始架构足够开放,可以做很多定制化,所有大的厂商和社区工作者都涌进来,慢慢成为社区最热的东西。就像kubernetes一样,以后kubernetes社区越来越热,进入里面的厂商越来越多,客户也会觉得他用的是社区最热的东西,不用担心它会冷下去,不用担心它会被一两家公司绑死,就是二八原则,热的会越来越热,最终成为标准一样的东西,这就是为什么我们选了kubernetes。    

   

15. 您刚刚提到社区,我们团队是如何看待开源社区的?如何做到自己新增开发特性和上游的平衡?

刘超:开源是非常好的东西,它已经成为互联网+企业的标配,因为开源软件出来以后你可以很快的利用它做prototyping,用它实现自己的业务模型,现在这个时代唯快不破,你如果比你的竞争对手稍微晚一步,最后带来的是生存问题,只有前几名的能生存下来,这就需要我们的架构和软件快速的开发出来,开源软件非常好,功能拿过来就能马上用,能飞快的做出一个东西展现在客户面前,马上验证我的idea行还是不行,赶上当前的节奏。开源是免费吗?其实不是免费的,开源软件从开源到能真正适用你的业务场景,这中间有一段路要走,使用开源软件的架构师需要把整个开源软件的架构、机制,甚至需要一个团队把它的代码了熟于心,知道要进行定制化的时候在哪开发,在哪定制,出现问题的时候能快速的定位,中间有这样一个gap存在。所以开源软件free是free在代码上,但是怎么用好开源软件的知识上是有gap的。包括您刚刚提到我们和upstreaming怎么融合的问题,这需要对开源软件做比较深入的了解。一个非常好的开源软件开始做的时候不会打包成一个大的包给客户,它本身会有一些比如插件的机制,hook的机制,能对它进行定制化,首先你需要对它足够了解,知道出现某一个具体的业务场景的时候能不能通过插件机制来做这个事情,如果发现在某个插件的位置插入代码能做到就非常好,但是这并不能完全满足需要,因为有的时候插到一个点不能满足业务需要,这时需要深度定制,你要改原来的代码,在原来的代码里找到合适的点做开发,这需要架构师有比较好的开发经验,梳理它的代码,模块内部紧耦合,模块之间要松耦合,我们要找到中间的点,如果社区有新的feature进来的时候,你如果能保持api级别的稳定的话,那么在下个版本还是比较容易进,这需要蛮多的经验。

   

16. 您能不能介绍kubernetes社区的文化,比如它的晋升机制,如何成为一个contributor,如何成为maintainer?

刘超:kubernetes是Google开源的,我们响应了很多google开放出来的思想,包括hadoop的hdfs,bigtable,hbase,这些都有,但是Google在整个开源社区里面相对比较高冷,前几年开源社区开各种大会,每个厂商都会说自己做了什么,但是Google很少出来宣讲说我做了什么,好像总有隐藏的黑科技,这时候可能跳出第二大大牛说读了google的paper做了什么。Kubernetes就是一个很好的例子,它托生于google的borg系统,虽然不是borg系统本身,但是它里面很多的思想都来源于borg,这会导致kubernetes整个社区无论从架构设计还是社区文化都非常open,你可以到社区提问题。有人说相对于很多其他商业软件,kubernetes好像文档没有那么完备,但是并不影响大家很方便的使用kubernetes,因为社区足够多,参与的人足够多,有任何问题只要google上一搜或者在社区提问,马上就有人给出答案,非常open。你可以通过可以提BUG,贡献feature,包括改文档都可以成为它的contributor。当你进行了一些比较深入的开发,比如发现了它的一个bug,一些improvement,都可以到社区提。社区是一个刷脸的地方,你要经常出现,你要经常提一些问题或者帮别人一些问题,这样刷脸刷多了,大家可能认识你了觉得你比较活跃,你有一些新的点可以劝服他们,你跟他们交流比较多,这样就可以贡献很多,所以说参与是很重要的,我们专门有一个团队和他们长时间的沟通参与做这个事情。

   

17. 最后一个问题,kubernetes到现在已经发展了一两年,到现在的发展是否满足网易蜂巢的预期,以及您对它的下一阶段有什么期待?

刘超:我们从kubernetes蛮早的版本就开始用了,我们现在的集群里面也有它1.0的集群,最新用到1.3集群,老的应用在1.0的集群,如果它相对比较稳定的话,我们不会贸然把它迁过来。Kubernetes在整个过程中对我们上云,上docker,他们之间的服务发现,服务调度,基本是满足我们的要求的,包括kubernetes组件自己的微服务化也是做得非常好,我们比较容易进行定制。接下来在kubernetes里面有个概念叫federation,可以以同样一个接口管多个kubernetes集群,我们希望这个尽量成熟起来。我们的kubernetes已经相对比较大了,但是对于一般的用户很难把kubernetes集群做到那么大,比如kubernetes建议的集群是千节点,我建多个千节点的集群也能满足要求,这样还有不同部门隔离的要求,这个东西成熟起来对于整个kubernetes铺开是非常有用的。第二个就是kubernetes的编排,希望kubernetes的编排对于复杂应用的编排,尤其是容器之间的多关联更加强大。因为现在用户越来越倾向于希望一键部署一个复杂的系统,如果能够实现的话,它的使用者就会非常舒服,这中间会有一个gap,我们希望有一个类似标准的东西,使复杂应用的部署顺畅起来。

   

18. 非常感谢刘先生接受我们的采访!

 刘超:谢谢。    

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT