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個工程師里面可能有十幾位女性。
時代都是往前走的,我們不受影響了就好了,除了你自己沒人能擋住你的路。