6
本文作者: 图灵访谈 | 2015-09-23 07:58 |
Kubernetes是Google开源的容器集群管理系统。它构建在Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-PaaS平台。在项目公开后不久,微软、IBM、VMware、Docker、CoreOS以及SaltStack等多家公司便纷纷加入了Kubernetes社区,为该项目发展作出贡献。
Dawn Chen是Google云平台软件工程师,目前负责Kubernetes项目。图灵访谈在CNUTCon全球容器技术峰会现场采访了Dawn。
拥有超过8年的Google工作经验的Dawn,负责过多层堆栈,包括内核,机管理,群集节点,管理,调度。供职谷歌前,她曾任职于Veritas和Symantec。除了分享有关Kubernetes项目的情况之外,作为一名女性程序员,Dwan也聊了聊她的从业经历与感受。以下是根据Dwan在访谈中的回答整理的内容:
开源是唯一的路
Kubernetes是一个很大的开源项目,我是其中一个负责人,主要负责容器技术这部分,包括管理节点在某台机器上的实现,以及保障每个组件的顺利运行。除此之外,我们还有负责调度的,负责API的,还有负责整个集群以及网络的。对于虚拟机,甚至是裸机来说,我们需要确定内核,库,还有容器技术的调度方式和应用方式。
很多员工在离开Google之后去了其他公司,比如Facebook、Twitter或者腾讯。他们中的很多人都会遇到一个问题,新的公司为什么没有Borg(Google的开源容器集群管理系统)?也有很多人问过我:你们的Kubernetes为什么没有Borg的这个功能、那个功能?可见他们有多么喜欢Borg。
从经验上看,Google过去在总体上虽然不怎么开源,但是却发表了很多相关的论文,比如说对于业界很重要的MapReduce、BigTable论文。有很多开源的人或者公司觉得论文很有价值,然后就想要重新装备这些系统。并不是说Google不愿意开源,否则它也不会去发表这类论文,问题是在于开源需要太多的人力和物力了。后来Google发现,这些系统其实跟我们的系统并不兼容,尤其在API方面。所以我们觉得,Google应该重新检视关于是否开源的决定。况且,作为一家越来越重视云的公司,如果真的要在云上面做文章,那我们唯一能做的事情是什么?就是开源。
容器技术如果不开源的话,我们就应该做到让用户完全信任,无须担心安全问题。如果用户能够完全信赖容器技术,我们就不需要提供虚拟机了,用户也可以不需要SSH他们的机器了(SSH 为 Secure Shell 的缩写,是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议,在正确使用时可弥补网络中的漏洞)。但是我们做不到,现在的容器技术做不到。就算能做到,我们也没有办法去说服使用者去接受纯粹的服务而不是一台机器。因为用户还是会很担心诸如“程序到底在哪里运行”、“他们会不会偷了我的机密”这类问题。
我们大家都相信无论是Google的云还是别人的云,都需要有一个集群管理。我们也相信,容器既然能让Google受益,也能让别人受益。
Kubernetes与Borg
Borg是Google的内部容器管理系统。早在十几年前,Google就已经部署Borg系统对来自于几千个应用程序所提交的job进行接收、调试、启动、停止、重启和监控,实现资源管理的自动化以及跨多个数据中心的资源利用率最大化。Kubernetes项目的创始人Brendan Burns 曾表示, Kubernetes项目的目的就是将Borg最精华的部分提取出来,使现在的开发者能够更简单、直接地应用,Kubernetes以Borg为灵感,但又没那么复杂和功能全面,更强调了模块性和可理解性。
在我看来,Kubernetes与Borg最主要不同就是API。Borg的高层是描述性的,但是在Borg真正实现的组件之间,实际上是命令性的API。而我们在最初设计Kubernetes时就坚持使用描述性的API。
因为使用了描述性API,所以Kubernetes的内部实现不需要有非常复杂的状态机,我们使用了一个比较简单的调和控制回路。所谓“描述性”就是形容你想要的是什么状态,最终要的是什么结果,然后你的调和控制回路(也就是控制系统)知道了这个目标,它会根据现有状况进行调整,一直驱动达到理想的状态。比如你在调度的时候,需要考虑有多少个job在运行,job是在什么情况下运行,有多少个copy在运行,少了一个copy你就多加一个,多了一个你就杀死一个。这两点就是主要贯彻在整个Kubernetes设计中的原则。
Kubernetes与Mesos
Mesos起源于Borg,是Apache下的开源分布式资源管理框架,被称为是分布式系统的内核。Mesos能够成为最优秀的数据中心资源管理器的一个重要功能是面对各种类型的应用,它具备像交警一样的疏导能力。它可以将不同的机器整合在一个逻辑计算机上。总体上看,Mesos是一个master/slave结构(主/从结构),其中,master实际上是一个全局资源调度器,采用某种策略将某个slave上的空闲资源分配给某一个framework,各种framework通过自己的调度器向Mesos master注册,以接入到Mesos中;而Mesos slave主要功能是汇报任务的状态和启动各个framework的执行(executor)。
Mesos的调度在如今已经做得非常成熟和完善了,Mesos的重点就是调度的算法,它不是一个完整的生态系统,也不是一个集群管理系统。与之相比,Kubernetes从一开始就是以一个生态系统为目的而设计的,它有正常检查、监控、记录。
Mesos能把你要做的东西建立在很多要求上,部署到机器上,但是当你要做升级,需要扩大规模或减小规模时,Mesos就无能为力了。Mesos需要与很多别的东西结合,比如现在的Mesos实际上是跟Kubernetes结合的,你可以使用Mesos非常酷炫的调度功能,同时也可以用到Kubernetes自己的集群管理功能。
当然,Kubernetes也会越来越完善,因为我们自己内部的算法也很复杂。我相信Mesos也会逐渐提升。Kubernetes和Mesos都是开源的项目,其实是种互补的关系,或者说是一种良性竞争的关系。所以未来会怎么样,没有人知道。
我不想做大家都觉得会火的事情
可能是因为我一直比较叛逆,父母希望我去学计算机,但是他们越想让我学我就越不想学。到了美国念书时,还是因为计算机给了奖学金,我才去念的。由于我数学很好(我本来是学数理统计的),所以觉得在美国学计算机真的很容易。随着学习越来越深入,我才觉得计算机越学越有意思了。因为用计算机写程序解决的都是生活中的实际的问题,我可以把问题自动化、模拟化。
研究生毕业的时候,我正好赶上2000年第一次互联网泡沫。那个时候很多人都去做web,可能是因为既简单,来钱又快。虽然我也去了硅谷,但也许还是因为叛逆的性格,我就不想去做web,我不太愿意做大家觉得接下来会很火的东西。
我选择去了Veritas的一个研究实验室,这个实验室主要是做存储的,就是给企业做集群管理。但是Veritas本身没有数据中心,它实际上还是传统的软件公司,把自己的东西打包卖出去。
我在Veritas做过很多有趣的项目,这些技术对我今天的工作来说都很有价值。但是当时让我印象最深的是,我们每一个项目做完,都没有办法部署出去。因为Veritas是以研究为导向的软件公司,而不是Google那样的服务型公司,所以这些项目既没有办法跟公司已有的软件结合在一起,所以不能跟公司的基础设施结合(因为Veritas没有面向外界的基础设施),我们很多有意思的研究都没有办法应用。后来研究实验室也越来越不景气,公司又被Symantec买了,变得越来越以商业为导向,于是我就离开了。
在这之后,我面试了几家公司,拿到了三个offer,一个是VMware,一个是Google,还有一个就是Facebook。当时我对Google的印象特别好,因为我很喜欢搜索这个功能。我从第一天听说有搜索的时候(那时还没有Google呢),我就开始使用它了,对我来说搜索改变了我很多。我学计算机比较晚,可能并不算一个典型的工程师,我对很多其他议题都很感兴趣,尤其是一些人文、社会的话题。除了工作,我只要下了班就不会再看计算机方面的东西。VMware和Facebook这两家公司对我来说都不像Google那样有吸引力。我觉得我需要做一个让我感兴趣的东西,然后找一家对我来说有触动的公司。
我去Google的时候本来是做算法的,后来开始做容器技术,很快我自己也成了技术主管。在Google总有新的东西进来,很多技术是从无到有发展的,这份工作不仅让我感觉很有意思,还很有成就感。
偏见限制了女性程序员的地位
我相信无论在中国还是在美国,女工程师都会相对少一点。我认为这是一个传递途径(pipeline)的问题,最起码在美国是这样。读书的时候,尤其在大学,虽然女性读计算机科学的也没有男性多,但数量还算不少;然而到了工作之中,女性程序员就少很多了。
至于原因,我认为主要与以下两点:
总体上而言,对于计算机产业中的女性来说,她们的努力(尤其是在年轻的时候)不太容易被别人重视。当一位女性工程师提出一个观点时,无论是在美国还是在中国,即使这个观点是正确的,也很容易被忽略;相反地,同样的观点如果是由一位男性工程师说出来时,就算他不一定比她说的好,大家还是会附和。
在我做第一份工作的时候,曾经遇到过一个中国的男性工程师,他是一个QA,而我是个开发者。他看见我非常不爽,质疑我这样一个女生做得了程序员吗。我当时觉得,怎么会这样?他为什么会这样说?虽然我今天已经百毒不侵了,当时还是会被这样的事情所影响。不过,虽然我心里不高兴,但我从不会质疑自己作为一名程序员的资质和能力。
此外,家庭教育问题也是很重要的原因。从女孩读书的时候开始,父母可能就会告诉她,身为女性要更重视家庭,做程序员很辛苦。实际上,虽然程序员的工作时间相对长一些,但是很灵活,女性也完全可以在完成工作的同时享受生活。
我个人认为,做任何事的核心理念就是不劳而获是永远不会成功的,除非你根本就不想做这件事。而我们的父辈们却一直在灌输给我们这样一种思想:女性找工作也要兼顾家庭,最好钱多事少离家近。这在我看来根本是不可能的,有得就要有失,我一直相信这一点。所以做任何工作,如果想要有成就感和满足感,你都需要投入心力,无论是做工程师还是其他工作。
我认为,是偏见让很多女性不愿意去做一名软件工程师,并且由于在这一行业里确实女性相对较少,反而加深了这些偏见。但是我觉得时间久了,这些偏见都是可以被克服的。Google在近年来对女性工程师所占员工人口比例的问题上就越来越重视。在我印象中,刚加入Google时的年会上,可能在100多人里面就只有我一位女性;但是现在,同样在100个工程师里面可能有十几位女性。
时代都是往前走的,我们不受影响了就好了,除了你自己没人能挡住你的路。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。