新聞中心
Borg 到 Kubernetes,未來(lái)的云需要什么
作者:鐘成 2015-11-02 16:36:13
云計(jì)算 本文圍繞三個(gè)方面介紹從Borg到Kubernetes有什么不同,分別是Borg的介紹、Kubernetes基于Borg做了哪些改變,以及它的發(fā)展方向,最后對(duì)未來(lái)的云可能需要一個(gè)怎么樣的產(chǎn)品或者是怎么樣的形態(tài)展開(kāi)討論。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到撫順縣網(wǎng)站設(shè)計(jì)與撫順縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋撫順縣地區(qū)。
我是來(lái)自于華為PaaS部門(mén)的鐘成,目前正在做相關(guān)的一些產(chǎn)品研發(fā)。我想分享的主題是從Borg到Kubernetes,其實(shí)Borg就是 Kubernetes的前身。我今天主要會(huì)談三個(gè)方面,第一個(gè)是Borg的介紹,第二是Kubernetes基于Borg做了哪些改變,以及它的發(fā)展方向,第三個(gè)話(huà)題想談一下未來(lái)的云可能需要一個(gè)怎么樣的產(chǎn)品或者是怎么樣的形態(tài)。
Borg是什么?它解決了什么問(wèn)題?
我們先看第一個(gè)話(huà)題,就是Borg是什么?它解決了什么問(wèn)題?
我們看一下這張圖,這張圖來(lái)自于一部電影叫做《星際迷航》相信大家大部分人都看過(guò)。Borg是里面的一種外星人,反派,他做什么事情呢?他和其他的文明接觸,把你這個(gè)文明搶占下來(lái),然后它會(huì)和你同化,會(huì)把你進(jìn)行改造,把你改造成一個(gè)半人半機(jī)器的怪物,你就變成他們這個(gè)文明當(dāng)中的一部分,然后他在這個(gè)宇宙當(dāng)中不斷的擴(kuò)張下去。我覺(jué)得這是一個(gè)非??岬姆N族。而B(niǎo)org就以這個(gè)名字來(lái)命名其大規(guī)模分布式的集成管理系統(tǒng)。他希望他們的系統(tǒng)也可以把不同的機(jī)器同化掉,變成他們自己的機(jī)器,然后運(yùn)行他們自己的程序。
對(duì)谷歌來(lái)說(shuō),Borg是一個(gè)比較頂層的集成管理系統(tǒng)。在它上面跑了谷歌大部分的應(yīng)用程序和框架包括Gmail、Google Docs、Web Search這樣直接面對(duì)客戶(hù)的一些應(yīng)用程序。它同時(shí)也包括一些底層的框架,(MR),包括它的一些GFS這些分布式的存儲(chǔ)系統(tǒng)。也就是說(shuō)你可以認(rèn)為所有的應(yīng)用程序都需要通過(guò)它來(lái)管理底層的這些物理機(jī)。Borg在谷歌已經(jīng)成功的應(yīng)用的十多年。
大家可以看一下Borg的整體的架構(gòu)。它也是一個(gè)典型的分布式平臺(tái)的架構(gòu),就是一個(gè)邏輯上的master,然后下面有很多的節(jié)點(diǎn),每一個(gè)節(jié)點(diǎn)上有一些它的代理程序。這里就可以看一下,作為谷歌內(nèi)部的一個(gè)工程師怎么樣用這個(gè)系統(tǒng)呢?他們使用Borgcfg(命令行)或者Web UI提交需要跑的應(yīng)用(Task) 到系統(tǒng),Task可以是任何一種東西,比如說(shuō)他是一個(gè)應(yīng)用程序,或者是一個(gè)批處理任務(wù),或者是一個(gè)(MR)的任務(wù)。他把這個(gè)任務(wù)通過(guò)Borgcfg提交到 BorgMaster,然后BorgMaster會(huì)接受這個(gè)請(qǐng)求,把請(qǐng)求放到隊(duì)列里面去,并由Scheduler來(lái)掃描這個(gè)隊(duì)列,查看這個(gè)應(yīng)用的資源需求,并在集群中尋找匹配的機(jī)器。你其實(shí)提交的這個(gè)任務(wù),它需要多少的資源,你需要怎么樣的機(jī)器,大概要跑多少時(shí)候,他會(huì)做一個(gè)匹配,就會(huì)看到底層有哪些機(jī)器是空閑的。然后就把這個(gè)任務(wù)發(fā)配到這個(gè)機(jī)器上面去,然后開(kāi)始運(yùn)行。
這個(gè)就是總體的一個(gè)Borg的框架。一個(gè)典型的啟動(dòng)時(shí)間,從用戶(hù)提交應(yīng)用到應(yīng)用啟動(dòng)是25秒。其中80%的時(shí)間是每個(gè)節(jié)點(diǎn)上下載這個(gè)應(yīng)用包的時(shí)間。大家可以看到這個(gè)時(shí)間是很快的,它的調(diào)度時(shí)間還不到5秒,其中20秒是耗在傳輸這一層上。
關(guān)于BorgMaster的調(diào)度原理
我后面主要想探討一下,我今天想說(shuō)的一個(gè)重點(diǎn)就是關(guān)于BorgMaster,它這里有很多應(yīng)用,它怎么樣調(diào)動(dòng)這個(gè)應(yīng)用的優(yōu)先級(jí)呢?或者說(shuō)到底哪臺(tái)機(jī)器應(yīng)該跑什么應(yīng)用呢?Borg的做法就是對(duì)單個(gè)Task做了一個(gè)資源上的估量,大家可以看到這里有好幾條線,其中一個(gè)機(jī)器上面最外面的那條虛線就是用戶(hù)提交的一個(gè)資源的一個(gè)配額,就是Task再怎么運(yùn)行也不能超過(guò)它的限制,這是一個(gè)硬性的限制,如果說(shuō)超過(guò)這個(gè)限制,就會(huì)限制它,不讓它跑。這只是用戶(hù)提交的數(shù)字,大家知道用戶(hù)提交的數(shù)字很多時(shí)候是不準(zhǔn)確的,你無(wú)法預(yù)估到底你的程序在你的系統(tǒng)上需要耗多少 CPU,占多少內(nèi)存。Borg是怎么去評(píng)估這個(gè)資源呢?他在Task啟動(dòng)300秒之后,就進(jìn)行一個(gè)資源回收的工作。大家可以看到中間有一個(gè)黃色的區(qū)域,黃色的區(qū)域就是這個(gè)應(yīng)用程序?qū)嶋H上所消耗的資源。然后它會(huì)從外面,慢慢把它推進(jìn)去,推到綠區(qū)的地方,推到綠區(qū)的地方劃一條線,這條線就是所謂的保留資源,就是Borg這個(gè)系統(tǒng)認(rèn)為你這個(gè)應(yīng)用是長(zhǎng)期穩(wěn)定運(yùn)行的所需要的資源。
這里就有一個(gè)問(wèn)題,為什么Borg要這么做呢?原因是為了把剩下的區(qū)域的資源給空出來(lái),如果說(shuō)我知道這個(gè)應(yīng)用實(shí)際上就用了這么多的資源。然后我給它劃了一定的安全線之后,剩下的這些資源我就可以調(diào)度出來(lái),也就是說(shuō)可以給到其它的應(yīng)用程序用。
綠色的這一塊是黃色的塊加上一些安全區(qū)組成的,每過(guò)幾秒重新計(jì)算一遍應(yīng)用程序耗費(fèi)了多少資源。這實(shí)際上是一個(gè)動(dòng)態(tài)的過(guò)程,它并不是說(shuō)劃走了之后就再也不能變了。綠色的方塊是可以一直拓展到外面的虛線的范圍之內(nèi)。這就是對(duì)單個(gè)Task做的一個(gè)策略。然后通過(guò)他對(duì)系統(tǒng)上跑的應(yīng)用做了一個(gè)區(qū)分。就是說(shuō),他先想了一下,到底有哪些應(yīng)用,這些應(yīng)用有什么樣的特性。其中有一類(lèi)應(yīng)用就是所謂的生產(chǎn)型的應(yīng)用,就是prod task,其特征就是永遠(yuǎn)都是不停止的,他是一個(gè)長(zhǎng)進(jìn)程,它永遠(yuǎn)是面向用戶(hù)的,比如說(shuō)Gmail或者是Web Search,它中間不可能斷的,它的響應(yīng)時(shí)間是幾微秒到幾百毫秒。然后這種任務(wù)就是說(shuō),你必須要優(yōu)先保證它的運(yùn)行,它的短期性能波動(dòng)是比較敏感的。
還有一類(lèi)任務(wù)就是所謂的non-prod task,他是一個(gè)批處理任務(wù),類(lèi)似像Map Reduce,它不是直接面向用戶(hù)的,對(duì)性能不是非常的敏感,跑完了就完了,下一個(gè)再跑就是下一個(gè)任務(wù)了,不是一個(gè)長(zhǎng)進(jìn)程。
為什么要區(qū)分任務(wù)?
當(dāng)prod task的資源任務(wù)消耗比較大的時(shí)候,比如說(shuō)很多人突然都來(lái)上一個(gè)網(wǎng)站,這個(gè)網(wǎng)站的服務(wù)器內(nèi)存CPU就會(huì)非常高。這個(gè)時(shí)候,在這臺(tái)機(jī)器上應(yīng)用資源不足的時(shí)候,他就會(huì)把Non-prod task殺掉,殺掉之后讓它去其他的機(jī)器上去運(yùn)行。但是在空閑的時(shí)候,就可以讓任務(wù)繼續(xù)回來(lái)。這樣的話(huà),我就可以充分利用這臺(tái)機(jī)器上的所有時(shí)間點(diǎn)上的資源,可以把這些東西塞的比較滿(mǎn)。最后谷歌的測(cè)試結(jié)果是,大概20%的工作負(fù)載可以跑在回收資源上。這個(gè)數(shù)據(jù)其實(shí)是非常大的。對(duì)谷歌有那么多臺(tái)的機(jī)器,你可以省下20%的資源,對(duì)它來(lái)說(shuō)就是非常非常多的錢(qián)。
Borg的價(jià)值
我這里稍微總結(jié)一下,Borg這套系統(tǒng)給谷歌提供了什么樣的價(jià)值。它主要是提供了三個(gè)方面。第一個(gè)是隱藏的資源管理和故障處理的細(xì)節(jié),讓用戶(hù)可以專(zhuān)注于應(yīng)用開(kāi)發(fā)。用戶(hù)不用操心底層的系統(tǒng)是怎么操作的,就算我掛了他也會(huì)幫我啟起來(lái)。第二個(gè)是本身提供高可靠性和高可用性的操作,并支持應(yīng)用程序做到高可靠高可用。第三個(gè)是在數(shù)以萬(wàn)計(jì)的機(jī)器上高資源利用率運(yùn)行。
對(duì)于Borg具體怎么做到這三個(gè)方面,google有一篇很長(zhǎng)的論文《在Google使用Borg進(jìn)行大規(guī)模集群的管理》,里面有很多細(xì)節(jié),今天就不展開(kāi)說(shuō)了。
#p#
Kubernetes架構(gòu)
自從谷歌把Borg這個(gè)系統(tǒng)推出之后,對(duì)內(nèi)部來(lái)說(shuō)是非常成功,但是在外面的社區(qū),其實(shí)大家都不知道這個(gè)東西到底是怎么做的,也不知道他內(nèi)部是怎么實(shí)現(xiàn)的。后來(lái)做Borg的那批人他們就做了另外一個(gè)軟件,這個(gè)軟件就是Kubernetes,Kubernetes總體而言你可以認(rèn)為是Borg的一個(gè)開(kāi)源的版本,但是Kubernetes和Borg有一些不一樣,我后面會(huì)大致的講一下。這是Kubernetes的架構(gòu),大家其實(shí)可以看到,它的這個(gè)架構(gòu)和Borg的架構(gòu)基本上是類(lèi)似的,包括用戶(hù)怎么用的也是類(lèi)似的。用戶(hù)通過(guò)用kubectl這么一個(gè)命令行工具,把任務(wù)提交上來(lái)。
Kubernetes與Borg的區(qū)別
Borg在谷歌已經(jīng)運(yùn)行了十年,而且機(jī)器的規(guī)模量非常大,他一個(gè)集群就是一萬(wàn)臺(tái),甚至更多。而 Kubernetes是2014年才出來(lái)的,我個(gè)人認(rèn)為這是針對(duì)亞馬遜,亞馬遜的公有云非常的成功,谷歌也想進(jìn)入這個(gè)領(lǐng)域,他的方式就是把 Kubernetes這個(gè)系統(tǒng)開(kāi)源推出來(lái),在業(yè)界產(chǎn)生一定的影響力,讓大家都去用。這樣的話(huà),后面就可以和亞馬遜競(jìng)爭(zhēng)一下,這是我個(gè)人推測(cè)他們的一個(gè)想法。
Borg底層用的是lxc的容器,而Kubernetes是用的Docker容器。Borg是用C++編寫(xiě)的,Kubernetes是用Go語(yǔ)言編寫(xiě)的。Borg在集群調(diào)度的性能上做了很多的優(yōu)化,Kubernetes還沒(méi)有做非常多的優(yōu)化,目前他在這方面還是比較土的,后面還有很多工作需要做。 Borg的單集群能夠調(diào)度的機(jī)器有上萬(wàn)臺(tái),而按Kubernetes目前只能支持幾百臺(tái),這是目前的數(shù)據(jù)。
然后我們?cè)倏匆幌?,?duì)于這兩個(gè)系統(tǒng)的用戶(hù)來(lái)說(shuō)它們有什么區(qū)別。Borg的用戶(hù)其實(shí)就是谷歌的一批工程師,大家也知道谷歌工程師都是世界比較頂尖的工程師,他們?cè)趯?xiě)這個(gè)程序的時(shí)候就考慮過(guò)程序會(huì)跑在云上,他知道這個(gè)程序是分布式的。他在寫(xiě)這個(gè)應(yīng)用的時(shí)候,就會(huì)針對(duì)這個(gè)系統(tǒng)做非常多的優(yōu)化,在設(shè)計(jì)的時(shí)候就知道我應(yīng)該做一個(gè)分布式的系統(tǒng)。但是Kubernetes他想做的事情更多一些,就是除了運(yùn)行這些分布式的系統(tǒng)之外,他還想就是說(shuō)能夠支持一些,他首先是支持Docker的這些容器,但是他還希望支持一些比較傳統(tǒng)的,比較菜的,技術(shù)水平一般的人寫(xiě)的這些應(yīng)用程序。他在這方面做了一些工作。一個(gè)是用了 Docker容器,這樣的話(huà)就支持很多東西了。還有內(nèi)他還可以?huà)燧d外部的持久層,就是你可以把一些分布層面的系統(tǒng)掛在那個(gè)系統(tǒng)上面。我的容器就去讀取外部的分布式的存儲(chǔ)。這樣的話(huà),我這個(gè)容器就算是掛了,我這個(gè)數(shù)據(jù)也可以比較安全的保存。另外他就提供了一些監(jiān)控還有一些日志的功能。但是這些功能是不是夠呢,這還是有一定的疑問(wèn)的。后期如果說(shuō)我想用Kubernetes來(lái)跑一些傳統(tǒng)的應(yīng)用,那我肯定還會(huì)對(duì)這些應(yīng)用和系統(tǒng)做一定程度的改造,但至少?zèng)]有困難到無(wú)法完成。
這個(gè)是它Kubernetes設(shè)計(jì)上的一些特色,Kubernetes的網(wǎng)絡(luò)架構(gòu)是每一個(gè)Pod都有一個(gè)單獨(dú)的IP,這樣的應(yīng)用更加友好一些。寫(xiě)應(yīng)用程序的人就不用考慮沖突這種情況。還有就是它分組的模式,就是我這些容器如何分組。Borg是一個(gè)比較專(zhuān)家的系統(tǒng),他有230多個(gè)參數(shù),但是 Kubernetes是非常簡(jiǎn)單的大概就是三四個(gè)描述文件就完了。
Borg和Kubernetes的形象化總結(jié)
這里就是我對(duì)Borg和Kubernetes的一個(gè)形象化的總結(jié)。Borg就是一個(gè)噴氣式飛機(jī)的駕駛系統(tǒng),非常的專(zhuān)業(yè)和高大上,他適用于谷歌這樣的大公司,它有幾百萬(wàn)的機(jī)器。Kubernetes是一個(gè)它的簡(jiǎn)化版,它是一輛設(shè)計(jì)優(yōu)良的轎車(chē),它適合中小型公司,用它來(lái)對(duì)自己的集群進(jìn)行調(diào)度。
未來(lái)Kubernetes這邊也會(huì)做一些相應(yīng)的工作,包括多租戶(hù)支持,包括容器持久化、集群規(guī)模的提升、利用率和網(wǎng)絡(luò)方面的等等。
未來(lái)的云需要什么?
最后可以說(shuō)是我個(gè)人的一些思考。我們未來(lái)的云到底需要什么樣的東西。大家可以看到,自從計(jì)算機(jī)風(fēng)靡以來(lái),有很多的系統(tǒng),很多的軟件,一波又一波的起來(lái),有一部分的系統(tǒng)或者說(shuō)軟件是比較成功的,可以長(zhǎng)久存在下去,比如說(shuō)像Java、或者是C,或者是像Windows這樣,還有一些系統(tǒng)非常不幸,像Cobol或者是DOS或者是Minix這些系統(tǒng),它們慢慢的被人所遺棄,慢慢被人所遺忘,最后變成廢棄的停車(chē)場(chǎng)。
我這里想考慮一下,如果說(shuō)再過(guò)十年,我們現(xiàn)在在用的一些技術(shù),像Kubernetes或者是Borg這樣的技術(shù),是會(huì)進(jìn)入到左邊這個(gè)行列還是右邊這個(gè)行列呢?我個(gè)人是希望進(jìn)入左邊的行列,畢竟我們還是希望他可以成為一款經(jīng)典的產(chǎn)品。至少對(duì)這些系統(tǒng)來(lái)說(shuō),我們會(huì)非常自豪,我們做了一款比較經(jīng)典的產(chǎn)品,可以長(zhǎng)久的被人們所使用下去。
如果說(shuō)想做到這一點(diǎn),就得面對(duì)我們現(xiàn)在這個(gè)時(shí)代,整個(gè)計(jì)算機(jī)系統(tǒng)所面臨的一個(gè)困境,或者說(shuō)我們集群管理系統(tǒng)所面對(duì)的一個(gè)困境。這個(gè)困境是什么呢?就是這里所展示的Babel塔的困境。在以色列那個(gè)地方,這是一個(gè)圣經(jīng)的故事,人們想造成一般座通天之塔,他們想挑戰(zhàn)上帝的權(quán)威。上帝一看你們這批凡人,就覺(jué)得你們這批鳥(niǎo)人居然敢挑戰(zhàn)我的權(quán)威,他就發(fā)明了各種語(yǔ)言,一起做巴別塔工作的人就各自使用不同的語(yǔ)言,他們就無(wú)法交流,最后這個(gè)塔就造不下去了。
其實(shí)在計(jì)算機(jī)的世界也是如此,大家使用各自的語(yǔ)言,各自的框架,最后使我們合作起來(lái)非常的復(fù)雜。包括我們的集群管理系統(tǒng)也好,包括其他的系統(tǒng)也好,其實(shí)都是幫助我們跨越這個(gè)鴻溝,幫助我們大家可以比較好的進(jìn)行合作。但是目前來(lái)說(shuō),還沒(méi)有一個(gè)非常好的方案可以讓大家非常好的進(jìn)行合作,我覺(jué)得這個(gè)是我們做這個(gè)系統(tǒng)需要做的一個(gè)事情。我這里引一句老子的話(huà),大家可以看一下。
| "三十幅共一轂,當(dāng)其無(wú),有車(chē)之用。 埏埴以為器,當(dāng)其無(wú),有器之用。 鑿戶(hù)牖以為室,當(dāng)其無(wú),有室之用。 故有之以為利,無(wú)之以為用。" |
我在想,是什么因素決定了一個(gè)系統(tǒng)或者是一個(gè)軟件,它是否可以長(zhǎng)期生存下去呢?我覺(jué)得非常重要的一點(diǎn),他要明確自己要做什么。其實(shí)就是前面講的端水的端水,掃地的掃地,就是說(shuō)你不但要明確自己這個(gè)軟件要做什么,還得明確自己不要做什么。你什么東西是無(wú)以之為用,就是這個(gè)領(lǐng)域我是不進(jìn)去的,我是不去做的。如果說(shuō)你什么東西都做,最后就會(huì)比較弱,很容易就會(huì)顛覆,或者是被人取代。如果說(shuō)你單單把一件事情做好,那你今后在這個(gè)領(lǐng)域,至少你是無(wú)可替代的,可以長(zhǎng)期生存下去。我記得前一段時(shí)間有人問(wèn)Linus,怎么看Docker容器。然后他說(shuō)我才不關(guān)心這什么狗屁容器,我就關(guān)心我的內(nèi)核,你不要來(lái)問(wèn)我這個(gè)問(wèn)題。我覺(jué)得他這個(gè)就是一個(gè)非常好的一個(gè)態(tài)度,他把他自己內(nèi)核這一個(gè)模塊做好,他把他系統(tǒng)這一塊做好,那么對(duì)他而言,他這個(gè)工作就可以長(zhǎng)期延續(xù)下去。
那么對(duì)于我們來(lái)說(shuō),比較詳細(xì)一點(diǎn),就是說(shuō)在我們軟件開(kāi)發(fā)當(dāng)中碰到的情況是這樣的。從我們的軟件設(shè)計(jì)到開(kāi)發(fā)到測(cè)試、生產(chǎn)都經(jīng)過(guò)非常多,非常反復(fù)的過(guò)程。同時(shí)在大部分的集群系統(tǒng)當(dāng)中,我們也非常難以調(diào)度它。那么我覺(jué)得對(duì)于我們來(lái)說(shuō),就是后面要解決幾個(gè)方面的問(wèn)題。我覺(jué)得這是我們一個(gè)大的方向。
我們以后的產(chǎn)品是不是可以減少語(yǔ)言、程序、框架不同帶來(lái)的復(fù)雜性,能不能把流程進(jìn)行簡(jiǎn)化,把語(yǔ)言進(jìn)行簡(jiǎn)化,把網(wǎng)絡(luò)和服務(wù)依賴(lài)進(jìn)行簡(jiǎn)化,這是我提的另一個(gè)問(wèn)題。
原文鏈接:http://www.dockone.io/article/784
網(wǎng)頁(yè)題目:Borg到Kubernetes,未來(lái)的云需要什么
本文網(wǎng)址:http://www.fisionsoft.com.cn/article/dpehheg.html


咨詢(xún)
建站咨詢(xún)
