6
本文作者: 圖靈訪談 | 2015-09-23 07:58 |
Kubernetes是Google開源的容器集群管理系統(tǒng)。它構(gòu)建在Docker技術(shù)之上,為容器化的應(yīng)用提供資源調(diào)度、部署運行、服務(wù)發(fā)現(xiàn)、擴容縮容等整一套功能,本質(zhì)上可看作是基于容器技術(shù)的mini-PaaS平臺。在項目公開后不久,微軟、IBM、VMware、Docker、CoreOS以及SaltStack等多家公司便紛紛加入了Kubernetes社區(qū),為該項目發(fā)展作出貢獻。
Dawn Chen是Google云平臺軟件工程師,目前負(fù)責(zé)Kubernetes項目。圖靈訪談在CNUTCon全球容器技術(shù)峰會現(xiàn)場采訪了Dawn。
擁有超過8年的Google工作經(jīng)驗的Dawn,負(fù)責(zé)過多層堆棧,包括內(nèi)核,機管理,群集節(jié)點,管理,調(diào)度。供職谷歌前,她曾任職于Veritas和Symantec。除了分享有關(guān)Kubernetes項目的情況之外,作為一名女性程序員,Dwan也聊了聊她的從業(yè)經(jīng)歷與感受。以下是根據(jù)Dwan在訪談中的回答整理的內(nèi)容:
開源是唯一的路
Kubernetes是一個很大的開源項目,我是其中一個負(fù)責(zé)人,主要負(fù)責(zé)容器技術(shù)這部分,包括管理節(jié)點在某臺機器上的實現(xiàn),以及保障每個組件的順利運行。除此之外,我們還有負(fù)責(zé)調(diào)度的,負(fù)責(zé)API的,還有負(fù)責(zé)整個集群以及網(wǎng)絡(luò)的。對于虛擬機,甚至是裸機來說,我們需要確定內(nèi)核,庫,還有容器技術(shù)的調(diào)度方式和應(yīng)用方式。
很多員工在離開Google之后去了其他公司,比如Facebook、Twitter或者騰訊。他們中的很多人都會遇到一個問題,新的公司為什么沒有Borg(Google的開源容器集群管理系統(tǒng))?也有很多人問過我:你們的Kubernetes為什么沒有Borg的這個功能、那個功能?可見他們有多么喜歡Borg。
從經(jīng)驗上看,Google過去在總體上雖然不怎么開源,但是卻發(fā)表了很多相關(guān)的論文,比如說對于業(yè)界很重要的MapReduce、BigTable論文。有很多開源的人或者公司覺得論文很有價值,然后就想要重新裝備這些系統(tǒng)。并不是說Google不愿意開源,否則它也不會去發(fā)表這類論文,問題是在于開源需要太多的人力和物力了。后來Google發(fā)現(xiàn),這些系統(tǒng)其實跟我們的系統(tǒng)并不兼容,尤其在API方面。所以我們覺得,Google應(yīng)該重新檢視關(guān)于是否開源的決定。況且,作為一家越來越重視云的公司,如果真的要在云上面做文章,那我們唯一能做的事情是什么?就是開源。
容器技術(shù)如果不開源的話,我們就應(yīng)該做到讓用戶完全信任,無須擔(dān)心安全問題。如果用戶能夠完全信賴容器技術(shù),我們就不需要提供虛擬機了,用戶也可以不需要SSH他們的機器了(SSH 為 Secure Shell 的縮寫,是目前較可靠、專為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,在正確使用時可彌補網(wǎng)絡(luò)中的漏洞)。但是我們做不到,現(xiàn)在的容器技術(shù)做不到。就算能做到,我們也沒有辦法去說服使用者去接受純粹的服務(wù)而不是一臺機器。因為用戶還是會很擔(dān)心諸如“程序到底在哪里運行”、“他們會不會偷了我的機密”這類問題。
我們大家都相信無論是Google的云還是別人的云,都需要有一個集群管理。我們也相信,容器既然能讓Google受益,也能讓別人受益。
Kubernetes與Borg
Borg是Google的內(nèi)部容器管理系統(tǒng)。早在十幾年前,Google就已經(jīng)部署B(yǎng)org系統(tǒng)對來自于幾千個應(yīng)用程序所提交的job進行接收、調(diào)試、啟動、停止、重啟和監(jiān)控,實現(xiàn)資源管理的自動化以及跨多個數(shù)據(jù)中心的資源利用率最大化。Kubernetes項目的創(chuàng)始人Brendan Burns 曾表示, Kubernetes項目的目的就是將Borg最精華的部分提取出來,使現(xiàn)在的開發(fā)者能夠更簡單、直接地應(yīng)用,Kubernetes以Borg為靈感,但又沒那么復(fù)雜和功能全面,更強調(diào)了模塊性和可理解性。
在我看來,Kubernetes與Borg最主要不同就是API。Borg的高層是描述性的,但是在Borg真正實現(xiàn)的組件之間,實際上是命令性的API。而我們在最初設(shè)計Kubernetes時就堅持使用描述性的API。
因為使用了描述性API,所以Kubernetes的內(nèi)部實現(xiàn)不需要有非常復(fù)雜的狀態(tài)機,我們使用了一個比較簡單的調(diào)和控制回路。所謂“描述性”就是形容你想要的是什么狀態(tài),最終要的是什么結(jié)果,然后你的調(diào)和控制回路(也就是控制系統(tǒng))知道了這個目標(biāo),它會根據(jù)現(xiàn)有狀況進行調(diào)整,一直驅(qū)動達到理想的狀態(tài)。比如你在調(diào)度的時候,需要考慮有多少個job在運行,job是在什么情況下運行,有多少個copy在運行,少了一個copy你就多加一個,多了一個你就殺死一個。這兩點就是主要貫徹在整個Kubernetes設(shè)計中的原則。
Kubernetes與Mesos
Mesos起源于Borg,是Apache下的開源分布式資源管理框架,被稱為是分布式系統(tǒng)的內(nèi)核。Mesos能夠成為最優(yōu)秀的數(shù)據(jù)中心資源管理器的一個重要功能是面對各種類型的應(yīng)用,它具備像交警一樣的疏導(dǎo)能力。它可以將不同的機器整合在一個邏輯計算機上??傮w上看,Mesos是一個master/slave結(jié)構(gòu)(主/從結(jié)構(gòu)),其中,master實際上是一個全局資源調(diào)度器,采用某種策略將某個slave上的空閑資源分配給某一個framework,各種framework通過自己的調(diào)度器向Mesos master注冊,以接入到Mesos中;而Mesos slave主要功能是匯報任務(wù)的狀態(tài)和啟動各個framework的執(zhí)行(executor)。
Mesos的調(diào)度在如今已經(jīng)做得非常成熟和完善了,Mesos的重點就是調(diào)度的算法,它不是一個完整的生態(tài)系統(tǒng),也不是一個集群管理系統(tǒng)。與之相比,Kubernetes從一開始就是以一個生態(tài)系統(tǒng)為目的而設(shè)計的,它有正常檢查、監(jiān)控、記錄。
Mesos能把你要做的東西建立在很多要求上,部署到機器上,但是當(dāng)你要做升級,需要擴大規(guī)?;驕p小規(guī)模時,Mesos就無能為力了。Mesos需要與很多別的東西結(jié)合,比如現(xiàn)在的Mesos實際上是跟Kubernetes結(jié)合的,你可以使用Mesos非??犰诺恼{(diào)度功能,同時也可以用到Kubernetes自己的集群管理功能。
當(dāng)然,Kubernetes也會越來越完善,因為我們自己內(nèi)部的算法也很復(fù)雜。我相信Mesos也會逐漸提升。Kubernetes和Mesos都是開源的項目,其實是種互補的關(guān)系,或者說是一種良性競爭的關(guān)系。所以未來會怎么樣,沒有人知道。
我不想做大家都覺得會火的事情
可能是因為我一直比較叛逆,父母希望我去學(xué)計算機,但是他們越想讓我學(xué)我就越不想學(xué)。到了美國念書時,還是因為計算機給了獎學(xué)金,我才去念的。由于我數(shù)學(xué)很好(我本來是學(xué)數(shù)理統(tǒng)計的),所以覺得在美國學(xué)計算機真的很容易。隨著學(xué)習(xí)越來越深入,我才覺得計算機越學(xué)越有意思了。因為用計算機寫程序解決的都是生活中的實際的問題,我可以把問題自動化、模擬化。
研究生畢業(yè)的時候,我正好趕上2000年第一次互聯(lián)網(wǎng)泡沫。那個時候很多人都去做web,可能是因為既簡單,來錢又快。雖然我也去了硅谷,但也許還是因為叛逆的性格,我就不想去做web,我不太愿意做大家覺得接下來會很火的東西。
我選擇去了Veritas的一個研究實驗室,這個實驗室主要是做存儲的,就是給企業(yè)做集群管理。但是Veritas本身沒有數(shù)據(jù)中心,它實際上還是傳統(tǒng)的軟件公司,把自己的東西打包賣出去。
我在Veritas做過很多有趣的項目,這些技術(shù)對我今天的工作來說都很有價值。但是當(dāng)時讓我印象最深的是,我們每一個項目做完,都沒有辦法部署出去。因為Veritas是以研究為導(dǎo)向的軟件公司,而不是Google那樣的服務(wù)型公司,所以這些項目既沒有辦法跟公司已有的軟件結(jié)合在一起,所以不能跟公司的基礎(chǔ)設(shè)施結(jié)合(因為Veritas沒有面向外界的基礎(chǔ)設(shè)施),我們很多有意思的研究都沒有辦法應(yīng)用。后來研究實驗室也越來越不景氣,公司又被Symantec買了,變得越來越以商業(yè)為導(dǎo)向,于是我就離開了。
在這之后,我面試了幾家公司,拿到了三個offer,一個是VMware,一個是Google,還有一個就是Facebook。當(dāng)時我對Google的印象特別好,因為我很喜歡搜索這個功能。我從第一天聽說有搜索的時候(那時還沒有Google呢),我就開始使用它了,對我來說搜索改變了我很多。我學(xué)計算機比較晚,可能并不算一個典型的工程師,我對很多其他議題都很感興趣,尤其是一些人文、社會的話題。除了工作,我只要下了班就不會再看計算機方面的東西。VMware和Facebook這兩家公司對我來說都不像Google那樣有吸引力。我覺得我需要做一個讓我感興趣的東西,然后找一家對我來說有觸動的公司。
我去Google的時候本來是做算法的,后來開始做容器技術(shù),很快我自己也成了技術(shù)主管。在Google總有新的東西進來,很多技術(shù)是從無到有發(fā)展的,這份工作不僅讓我感覺很有意思,還很有成就感。
偏見限制了女性程序員的地位
我相信無論在中國還是在美國,女工程師都會相對少一點。我認(rèn)為這是一個傳遞途徑(pipeline)的問題,最起碼在美國是這樣。讀書的時候,尤其在大學(xué),雖然女性讀計算機科學(xué)的也沒有男性多,但數(shù)量還算不少;然而到了工作之中,女性程序員就少很多了。
至于原因,我認(rèn)為主要與以下兩點:
總體上而言,對于計算機產(chǎn)業(yè)中的女性來說,她們的努力(尤其是在年輕的時候)不太容易被別人重視。當(dāng)一位女性工程師提出一個觀點時,無論是在美國還是在中國,即使這個觀點是正確的,也很容易被忽略;相反地,同樣的觀點如果是由一位男性工程師說出來時,就算他不一定比她說的好,大家還是會附和。
在我做第一份工作的時候,曾經(jīng)遇到過一個中國的男性工程師,他是一個QA,而我是個開發(fā)者。他看見我非常不爽,質(zhì)疑我這樣一個女生做得了程序員嗎。我當(dāng)時覺得,怎么會這樣?他為什么會這樣說?雖然我今天已經(jīng)百毒不侵了,當(dāng)時還是會被這樣的事情所影響。不過,雖然我心里不高興,但我從不會質(zhì)疑自己作為一名程序員的資質(zhì)和能力。
此外,家庭教育問題也是很重要的原因。從女孩讀書的時候開始,父母可能就會告訴她,身為女性要更重視家庭,做程序員很辛苦。實際上,雖然程序員的工作時間相對長一些,但是很靈活,女性也完全可以在完成工作的同時享受生活。
我個人認(rèn)為,做任何事的核心理念就是不勞而獲是永遠(yuǎn)不會成功的,除非你根本就不想做這件事。而我們的父輩們卻一直在灌輸給我們這樣一種思想:女性找工作也要兼顧家庭,最好錢多事少離家近。這在我看來根本是不可能的,有得就要有失,我一直相信這一點。所以做任何工作,如果想要有成就感和滿足感,你都需要投入心力,無論是做工程師還是其他工作。
我認(rèn)為,是偏見讓很多女性不愿意去做一名軟件工程師,并且由于在這一行業(yè)里確實女性相對較少,反而加深了這些偏見。但是我覺得時間久了,這些偏見都是可以被克服的。Google在近年來對女性工程師所占員工人口比例的問題上就越來越重視。在我印象中,剛加入Google時的年會上,可能在100多人里面就只有我一位女性;但是現(xiàn)在,同樣在100個工程師里面可能有十幾位女性。
時代都是往前走的,我們不受影響了就好了,除了你自己沒人能擋住你的路。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。