非商业转载请注明作译者、出处,并保留本文的原始链接: http://www.ituring.com.cn/article/203520
张磊,浙江大学计算机学院博士生,科研人员,VLIS实验室云计算组技术负责人、策划人。Kubernetes项目贡献者和维护者,Docker项目贡献者。前Cloud Foundry中国团队和百度私有云项目组成员。InfoQ、CSDN、《程序员》杂志等多篇浙大系技术文章的贡献者和策划人,他还是 《Docker——容器与容器云》 一书的主要作者之一。
是。
大概是由于中学时候就开始玩电脑,然后自然而然就进入了计算机专业。由于我的兴趣主要在云计算以及Linux操作系统上,所以我的导师跟课题都是跟这些相关的。
2011年我们开始专注于开源云计算技术,当时开源的力量正在逐渐浮现。后来事实证明我们对趋势的判断是对的,因为从那个时候开始,软件的开发和发布以及整个生命周期就发生了改变。从此以后,可以说开源技术掌握了云计算行业,甚至是整个计算机行业的主流发展态势。于是,我们开始更深入地钻研Cloud Foundry, Docker, Kubernetes这样的技术,并且作为这些项目的贡献者成为了社区中的重要成员。
首先,云计算这个领域本身就比较特殊,它其实没有很多基础性研究,所以这个领域的学术跟工业是分不开的,中间没有一个明显的界限。比如,伯克利的AMP实验室做的一套高性能数据分析系统,最终开源出去就变成现在的明星项目Spark,成为工业界大数据的事实标准。在这些领域中,没有任何一个界限能够划定哪些技术是学术的,而工业界不能用。因为云计算本来就是“站在巨人肩膀上”的一种技术,它基于已有的分布式系统来做进一步的创新和整合。
我主要负责实验室云计算团队的技术工作 ,以及与技术相关的其他事宜,包括开源以及一些商业上的技术合作。
我们实验室最开始的研究方向就是软件工程以及计算机软件。实验室一开始就注重从学校的角度跟知名企业建立强强联合的关系,致力于为工业界提供最好的大规模信息系统的开发技术和能力。在那个时候,我们的主要关注点是金融信息系统的开发,并且同全球最大的资金托管机构美国道富银行建立了紧密的合作研发关系。从这个时候开始,我们向工业界输出了大量的技术能力,整个北美市场的股票交易系统的后台都是我们实验室师生参与重新开发的。而软件技术发展到现在,新一代的大规模分布式系统开始更多地以知名开源项目作为表现形式,这些技术也就自然成为我们新的关注点。其中最重要的还是云计算技术,但是我们略有侧重,更关注轻量化的云计算技术,我们认为这将是一个新的变革。
首先肯定有人才上的合作,因为学校本来是人才,我们会选择一些从事这个方向的优秀的学生,联合工业界的公司,比如去道富,VMware,思科总部或者百度等等,完成一个以技术研究为核心,以实际开发为途径的长期合作学习的过程。学生不是实习几个月然后回来,而是从开始到毕业,从研究的方向到最后的毕业论文都跟这些公司的真实技术场景紧密相关,并且专注于这些IT巨头的核心技术以及云计算平台的开发和研究工作。
容器技术不是一种新技术,它其实很早就存在了。在此之前,我们搞Linux内核的时候已经用过类似的技术,而且做PaaS用到的技术也是基于Linux容器的,所以我们团队很久以前就对这种技术有过很多接触和研究。2013年的时候,我们同学主要在从事的是VMware的Warden容器的研发,紧接着Docker就出现了,并且比前一代容器技术要完善很多,所以我们就自然而然地转到了Docker上。这就是为什么Docker一出现就会引起我们的关注。轻量化的云计算技术一定会以这样的方式实现,只不过实现不同,而我们肯定会选择更好的实现。
我是从Cloud Foundry团队出来的,而Cloud Foundry是一个纯粹的开源项目,它没有市场人员和项目经理这样的角色来干扰工程师的工作,所有贡献者都是通过远程协作和结对编程来贡献代码的。我,以及我们实验室的大多数同学从一开始就是这样一种工作模式,所以对于我们来说,参与开源项目是很自然的,而且我们也不像其他公司那样寻求互等的商业利益。
我们认为开源项目是一定要参与的,不仅要参与,还要学会主导项目的方向,成为维护者和更重要的核心代码贡献者。我刚才讲过,我们的愿景就是要基于开源软件做事情,做研究也好,做进一步的商业活动也好,一定要进入到社区里面,而不仅仅是一个使用者。
我也在 《Docker——容器和容器云》 里提到过,Docker本身确实有安全问题,但是一定要分场景讨论。比如,什么样的场景下我会在一台裸机上部署Docker;什么样的场景下我会让Docker容器跑在虚拟机里面。在目前这种情况下,如果你是一个公有云提供商,我认为你还是要把容器拷在你的虚拟机里面,防止出现逃逸状况。
我们在书里讲过,你的Docker容器和整个Docker Daemon环境最好做安全加固,在操作系统层面做很多加固,设置权限,并且在整个系统的设计上把权限设计和授权设计摆在第一位,逐层来把不正确的行为过滤掉。另外,一定要区分场景。对于私有云的话,安全要求满足第一点就可以了。但是对于公有云来说,一定要做最高等级的安全预案。
以上是从业务方面讲,但是从技术方面讲,容器本身的安全问题是很难解决的,但是有一些努力的方向非常值得我们关注。比如最新的Rocket集成了英特尔在CPU上的一些虚拟化技术来做到硬件加固,这就是等级很高的安全技术。另外还有像国内赵鹏他们做的Hyper,是一个基于虚拟化技术的容器,它跟虚拟机的安全系数几乎是一样的。所以我觉得从另一方面说,这些技术应该得到大家的重视,并且集成到我们现有的解决方案里面。
第一个问题在于Docker所属公司本身的强势,以及他们自己想做一揽子事情的态度。这个问题使得Docker现在变得非常臃肿,而且导致本来应该专注解决的问题没有解决掉。如果他们投入主要力量来解决容器的安全问题,我觉得反而要比现在的态势好。
第二,我们使用Docker也好,对它做二次开发也好,其实我们不要把自己的眼光局限在Docker上面。让Docker只做容器的事情其实是最好的选择,其余的事情交给更专业的人。我们不要过分相信来自某些商业化的宣传,比如一个人或者一个团队就能完成从开发到部署到运维的所有流程。哪怕你一开始可以,但是随着业务的正常增长,技术发展到一定程度之后你一定是做不到的。所以一定是专业的人做专业的事。
容器镜像不单指Docker镜像,它很久之前就已经存在了。容器镜像作为一种软件的发布方式,现在已经得到了大家的认可,成为了行业的事实标准。并且由于容器镜像本身已经存在了很久,所以它本身标准的普及是比较容易的。所以OCP的成立其实是为这种镜像发布的方式提供了一个技术上的标准。
以前,这一套东西虽然可以做标准,但是没有技术来支撑它,现在有了。我们通过标准容器来支撑标准镜像。所以,这两个标准如果能够在OCP里面得到统一,我相信它对整个软件工程将来的发展都是有很大影响的。我们现在学校的课程里就已经引入了完全基于容器的软件工程设计模式,谷歌也提出了基于容器的编程模型,将来的软件工程一定会向这方向发展。
我们最近也跟谷歌的人一起交流了很久,首先,Kubernetes确实背负了很多Borg之前的优秀的设计理念,其中包括Borg在谷歌内部大规模集群业务的应用。虽然现在还有一些应用我们看不到,但是Kubernetes将来的发展目标一定是用来解决这些问题。
Mesos和Kubernetes在一开始发展时其实是非常直接的竞争对手,因为这两者关注的事情有很多是一致的。但是随着这两个项目的继续发展,它们已经形成了合作关系。比如,Mesos本来就是一个优秀的调度器,那么接下来Mesos会更关注这个业务。并且Mesos可以被更方便地集成到Kubernetes里,作为Kubernetes的一个核心调度器来工作。
这两个项目现在的关注点其实是不一样的,使用的场景也不一样。在今后的发展中,它们会逐渐融合对方的优点。互相之间的集成会越来越多,互相之间的重合会越来越少。
首先,作为一所学校,要学会如何在我们国家的体制下,在不影响正常的教学、科研的前提下,获得企业的支持。学校需要鼓励学生在看似枯燥的学业中找到真正的个人兴趣点。比如我们实验室就涌现出了非常多的代码贡献者、作者、领域内的小专家。因为我们实验室从一开始就鼓励个人发展自己的兴趣,并且鼓励同学向大家分享你的工作成果。这样,工业界会自然而然地关注过来,合作也接踵而至。
另一方面,如果学校自身的硬件条件很强,技术水平很高的话,学校就可以为工业界做出很多贡献,无论是开源贡献,还是参与到工业的开发。并且还有一点很重要,就是学校要想办法把实验室的技术和研究经验转化成工程上可以应用到增值需求里的东西,而不只是埋头写论文。所以,我们实验室在硕士生阶段,不会提出苛刻的论文要求。我们更希望你的论文是对一个开源项目的贡献,或者是我们和产业界合作的课题的相关实际工程经验。
同时,我们也在浙大试点了一个学院,整个软件学院在以更加工程的方式推动科研的走向。我们课题组从十年前开始做这样的事情,所以学术跟产业之间的脱轨问题我们这边几乎是没有的。
首先对于一个学生,尤其是CS专业的学生,我认为实习是最重要的。你一定要想办法在跟导师融洽相处的前提下,寻求到与自己专业相关的实习机会,并且珍惜这些机会,因为实习能够使你的专业技能得到锻炼。并且你应该想办法把实习转化成毕业论文,或者是学校要求的课程设计。这样的经历会对你在工业界的影响力也好,工作也好,起到很大的积极作用。
我们在书的后记里面讲过,不止是Docker,对于任何一个开源项目来说,都有这样的三个或四个阶段。首先,你要去用,而且不只要用,还要变成一个优秀的玩家。对于开源项目的所有指令、所有设计,你应该有一个感性认识。
在这个基础之上就是源码,要读源码。读源码是一件非常有意思的事,但是在这个过程中,你要学会提问,带着问题去读源码,才会有收获。
然后就是转化,转化包括几种情况。比如,你可以将容器技术转化成你们实验室的某个项目的基础或者工作中的整个项目。另外,你要学会对项目做贡献。从最开始的找bug、解决bug、修改文档,到最后提出自己的特性、融入到社区里,只有这样你才能够获得最多的知识,以最快的速度提高自己在这个领域中的能力。
这三步之后,如果你在这个方面做得更多,可以考虑一些商业化的事情。比如你可以做一些相关的买卖,或者在你的公司里推广这些开源技术。
这本书应该更适合在第二或第三阶段阅读。
这本书的一个特点就是它倾向于把原理帮你从源码中抽象出来,而不仅仅带你走读代码。因为代码很快会过时,所以我们特别注重抽象原理。在第三阶段的时候,你要去做开发,所以你对技术的熟悉程度和原理必然要有一个深刻的认识。而这本书的很多实践章节,包括我们对代码的整个框架结构的分析,会对你有很大的帮助。
首先,我们不认为容器就是Docker,我们认为它只是容器技术一种优秀的实现。所以我们的书叫 《Docker——容器与容器云》 ,我们更关注所有基于容器的云平台的实现方式。你可以把容器理解为我们现在的虚拟机,把容器云理解为OpenStack,所以我们这本书肯定要先讲虚拟机原理,以此为基础我们才能讲清楚容器云,也就是容器的大规模管理方式。
很多目前市面上的书只关注于Docker本身,而我们更关注Docker背后的 libcontainer
也就是 runc
的工作原理,于此同时,我们还非常关注所谓的容器技术与大规模容器集群管理的结合方式。我们非常想为大家解决的一个问题就是,真正的大规模容器集群管理应该是什么样的。我们认为Kubernetes现在的方向是非常好的,所以在书中我们对它做了一个非常详细深入的解读,这在国内外应该是首次,而且从谷歌和CoreOS工程师的反馈来看,甚至在国外可能也是第一次。