《專(zhuān)家觀察 | 張?chǎng)危骸皬腒ubernetes到谷歌容器管理的落地與演化”》要點(diǎn):
本文介紹了專(zhuān)家觀察 | 張?chǎng)危骸皬腒ubernetes到谷歌容器管理的落地與演化”,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
由工業(yè)和信息化部指導(dǎo),中國(guó)信息通信研究院主辦,業(yè)界知名組織云計(jì)算開(kāi)源產(chǎn)業(yè)聯(lián)盟(OSCAR)承辦的2017全球云計(jì)算開(kāi)源大會(huì)于4月19日-20日在北京國(guó)家會(huì)議中心順利召開(kāi).本文為本屆大會(huì)嘉賓分享的大會(huì)演講速記內(nèi)容,敬請(qǐng)瀏覽.
嘉賓介紹:張?chǎng)?/strong>
公司職務(wù):才云CEO
大會(huì)演講速記
大家好,我叫張?chǎng)?來(lái)自才云科技.我們創(chuàng)始團(tuán)隊(duì)從卡耐基梅隆大學(xué)一直到谷歌,谷歌其實(shí)從2001年就開(kāi)始使用容器.
我當(dāng)時(shí)和我們CTO在集群管理的團(tuán)隊(duì),通過(guò)容器集群這樣一個(gè)系統(tǒng),去管理當(dāng)時(shí)80多個(gè)數(shù)據(jù)中心,超過(guò)一百萬(wàn)臺(tái)服務(wù)器的體量.
這個(gè)調(diào)研數(shù)據(jù)是美國(guó)做容器監(jiān)控公司針對(duì)目前容器常用的編排工具做的一個(gè)使用調(diào)研.
我們看到為什么今天這么多的Kubernetes的演講,也是有它的必然原因在這里面.從傳統(tǒng)IAAS到PAAS層劃分,我們看到基于底層的硬件軟件水電煤的服務(wù),Kubernetes提供了對(duì)于微服務(wù)、業(yè)務(wù)等進(jìn)行支持的一整套功能點(diǎn).
今天跟大家分享三塊內(nèi)容,第一塊就是Kubernetes跟谷歌內(nèi)部管理有什么不同.第二塊Kubernetes作為面對(duì)現(xiàn)代微服務(wù)框架在傳統(tǒng)行業(yè)怎么落地.第三塊我們一直說(shuō)容器更多支持無(wú)狀態(tài)的應(yīng)用,這塊非常不直觀的,容器其實(shí)也可以很好支持?jǐn)?shù)據(jù)的應(yīng)用.
第一個(gè)模塊當(dāng)時(shí)是在谷歌做集群管理系統(tǒng)整個(gè)的生態(tài).其中黃色的是berg,這是Kubernetes的前身,對(duì)其進(jìn)行管理.真的在集群管理體系里面,其實(shí)集群管理遠(yuǎn)遠(yuǎn)大于容器管理.
除了要管理容器以外,我們還有很多怎么樣做機(jī)器層面管理,怎么做安全方面的把控?怎么保證我業(yè)務(wù)系統(tǒng)的SIA,有很多技術(shù)模塊在我們?nèi)萜髦獾?首先容器管理不等同于集群管理的.
這里舉一個(gè)具體例子,以當(dāng)時(shí)在谷歌上線一個(gè)新業(yè)務(wù)系統(tǒng)為例,當(dāng)我們硬件從QA投入我這個(gè)業(yè)務(wù)系統(tǒng)以后,在集成管理內(nèi)部有點(diǎn)像CNDB,有一個(gè)機(jī)器的數(shù)據(jù)庫(kù),不光存放我硬件信息,還存放我機(jī)器未來(lái)承載什么任務(wù),裝一些mysql節(jié)點(diǎn)還是存儲(chǔ)節(jié)點(diǎn).
我存到數(shù)據(jù)庫(kù)在集群還有一個(gè)非常重要的組件,就是工作流管理,工作流管理每隔15分鐘察看這個(gè)數(shù)據(jù)庫(kù)是不是有新表象參加,當(dāng)有新信息來(lái)了,根據(jù)表現(xiàn)記錄我這個(gè)機(jī)器裝什么軟件,觸發(fā)其他模塊API調(diào)用,對(duì)這個(gè)機(jī)器進(jìn)行反映.
Kubernetes對(duì)上層應(yīng)用進(jìn)行生命周期生老病死的管理,我們大型系統(tǒng)里面也會(huì)出現(xiàn)很多問(wèn)題,這些問(wèn)題誰(shuí)管理,我們有一個(gè)節(jié)點(diǎn)醫(yī)生的模塊.
每個(gè)有全局節(jié)點(diǎn)醫(yī)生的設(shè)置,這兩個(gè)系統(tǒng)負(fù)責(zé)管理機(jī)器或者硬件層面的問(wèn)題,當(dāng)發(fā)現(xiàn)問(wèn)題以后,把這個(gè)問(wèn)題不是直接修復(fù),還是把一個(gè)問(wèn)題添加到機(jī)器數(shù)據(jù)庫(kù)里,這時(shí)候工作流管理系統(tǒng)每15分鐘去看這個(gè)數(shù)據(jù)庫(kù),當(dāng)發(fā)現(xiàn)新問(wèn)題以后會(huì)觸發(fā)修復(fù)的流程.
當(dāng)時(shí)做到了60%所謂硬件的故障,都是通過(guò)這種軟件的方法修復(fù),這個(gè)可能不是那么直觀,覺(jué)得硬件壞了就壞了,怎么可能軟件修復(fù),發(fā)現(xiàn)硬件故障表彰由驅(qū)動(dòng)層面軟得原因造成的,當(dāng)體量達(dá)到百萬(wàn)服務(wù)器以后,當(dāng)我們60%的情況都不需要人工的時(shí)候就是巨大效率的提升.
開(kāi)發(fā)者這端我提一下,我們所有應(yīng)用在berg,什么東西量大以后變成大問(wèn)題,當(dāng)我這么大的代碼量,我怎么短時(shí)間完成測(cè)試,當(dāng)時(shí)用了一套系統(tǒng),這套系統(tǒng)首先自動(dòng)識(shí)別出我們每一個(gè)可能觸發(fā)哪些測(cè)試級(jí),其他大量的測(cè)試級(jí)無(wú)關(guān),我就不會(huì)測(cè)試,同時(shí)測(cè)試的borgcli本身也運(yùn)行在berg平臺(tái)上,從開(kāi)發(fā)端到整個(gè)管理的全貌.容器管理在整個(gè)管理體系里面是其中一環(huán),并不是全部.這些東西都是谷歌內(nèi)部所有的,作為我們外部企業(yè)怎么盡量補(bǔ)全這樣一些功能,今天PPT我提一些小工具.
第一個(gè)我們鏡像倉(cāng)庫(kù)的管理,作為容器來(lái)講,我首先第一個(gè)要有鏡像倉(cāng)庫(kù),鏡像倉(cāng)庫(kù)由中國(guó)研究院主打一個(gè)非常好的項(xiàng)目叫做Harbor,可以支持多個(gè)鏡像之間復(fù)制,去做審計(jì)與健全這樣的工作.
我們才云自己對(duì)它進(jìn)行了功能上的擴(kuò)充,包括對(duì)鏡像進(jìn)行安全掃描,實(shí)時(shí)的掃描鏡像中的漏洞,包括對(duì)鏡像可以添加標(biāo)簽,去實(shí)現(xiàn)更靈活的管理,以及支持多種的存儲(chǔ)方案,這些都是我們做的工作.
提到發(fā)布,我們發(fā)布一直說(shuō)做CICD,大家有一個(gè)體會(huì),我們把一個(gè)傳統(tǒng)應(yīng)用切割成微服務(wù)架構(gòu)以后,其實(shí)發(fā)布反而一定程度上更復(fù)雜.
我原來(lái)發(fā)布一個(gè)二進(jìn)制,現(xiàn)在我要拆分成很多模塊,如果后端更新話(huà),前端也要更新,我們?nèi)ツ曷?lián)合發(fā)布了這樣一個(gè)系統(tǒng),叫做Seco,支持微服務(wù)之間的拓?fù)湟蕾?lài)關(guān)系支持發(fā)布,發(fā)布過(guò)程當(dāng)中也會(huì)實(shí)時(shí)進(jìn)行鏡像倉(cāng)庫(kù)掃描,大家看到截屏中的文字就是掃描出來(lái)鏡像的漏洞.
和發(fā)布相關(guān)就是另外一個(gè)概念就是灰度發(fā)布,我一個(gè)新版本的上線,我不希望新版本2.0一下替換1.0,對(duì)于基礎(chǔ)設(shè)計(jì)型的軟件我們按照一個(gè)數(shù)據(jù)中心一個(gè)數(shù)據(jù)中心更新.對(duì)于面向用戶(hù)的產(chǎn)品,谷歌的購(gòu)物,它的搜索等等,我們按照流量,先把15%的流量引到我新版本里面.
基于Kubernetes我們?cè)趺礃右沧龅交叶劝l(fā)布系統(tǒng),其實(shí)也是可以利用它里面標(biāo)簽的特性,以及它對(duì)服務(wù)的構(gòu)建特性來(lái)實(shí)現(xiàn)一個(gè)灰度發(fā)布,時(shí)間關(guān)系我這里細(xì)節(jié)不說(shuō)了.
我們用過(guò)Kubernetes的一線工程師,我們都知道,往KPS我非常容易的部署這樣一個(gè)服務(wù),我構(gòu)建一整套復(fù)雜的業(yè)務(wù)系統(tǒng)的時(shí)候,類(lèi)似于Docker里面一樣,我如何快速構(gòu)建一個(gè)復(fù)雜的系統(tǒng),后來(lái)Kubernetes有一個(gè)開(kāi)源解決方案,叫做Helm,我們推出一個(gè)輔助的工具叫做Heim-Registry,快速推出模板,把模板放到云應(yīng)用商店里面,提供共享,以及快速構(gòu)建.
我們監(jiān)控報(bào)警系統(tǒng),如果我們自己用過(guò)Kubernetes的時(shí)候話(huà)會(huì)知道,Kubernetes管理跑在它上面的應(yīng)用,對(duì)里面應(yīng)用進(jìn)行監(jiān)控和管理,但是Kubernetes自身也是非常復(fù)雜的軟件系統(tǒng).
利用Kubernetes也知道,Kubernetes也要實(shí)時(shí)監(jiān)控管理它的系統(tǒng),在這個(gè)世界里面我們也需要有一個(gè)系統(tǒng)管理和維護(hù)Kubernetes自身.存儲(chǔ)替換成OPDMDB,把更多K8S系統(tǒng)的指標(biāo)曝露出來(lái),實(shí)現(xiàn)不同層級(jí)的報(bào)警策略.
剛才講完了Kubernetes跟谷歌的區(qū)別,以及我們演化和推進(jìn),怎么用一個(gè)新技術(shù)用到相對(duì)老的行業(yè)里面.
從我們落地經(jīng)驗(yàn)來(lái)看,其實(shí)落地遇到不少的挑戰(zhàn),怎么做離線部署,怎么與私有云IAAS對(duì)接,對(duì)有狀態(tài)、單體應(yīng)用的無(wú)縫遷移.線上系統(tǒng)升級(jí),多租戶(hù)管理與安全把控.
我們有很多的openStack的用戶(hù),我們?cè)趺幢WC不掉線的運(yùn)營(yíng),線上升級(jí)系統(tǒng)、多租戶(hù)的管理與安全把控,都是Kubernetes在傳統(tǒng)行業(yè)中遇到的問(wèn)題,也是我們實(shí)踐中需要解決的問(wèn)題.
第一個(gè)我們服務(wù)對(duì)外的曝露,這部分內(nèi)容有點(diǎn)專(zhuān)業(yè),我們都知道Kubernetes里面有一個(gè)服務(wù)的概念,集群內(nèi)部的服務(wù)之間可以很輕便訪問(wèn).
當(dāng)我把一個(gè)服務(wù)曝露給集群以外的事件,我把京東云曝露在外面,外部怎么訪問(wèn)我的容器,我把對(duì)應(yīng)服務(wù)對(duì)應(yīng)起一個(gè)端口,在集群所有節(jié)點(diǎn)上,我web訪問(wèn)這個(gè)服務(wù),要記住這三萬(wàn)多的端口把服務(wù)打過(guò)來(lái),第一個(gè)端口我們要做記憶,其次我們很難做負(fù)載均衡.
這里頭有比較簡(jiǎn)單的解決方案,我們還是先把服務(wù)在每臺(tái)機(jī)器上曝露出三萬(wàn)多的端口.
為了避免用戶(hù)每次要把流量綁定在一臺(tái)服務(wù)器的三萬(wàn)端口,我們可以在外面設(shè)一個(gè)負(fù)載均衡器,可以解決一部分的問(wèn)題,同時(shí)還是解決不了我怎么從七層做負(fù)載均衡,我根據(jù)用戶(hù)ID等去做,我現(xiàn)在需要在機(jī)器上開(kāi)哪些端口,只不過(guò)沒(méi)有曝露給用戶(hù).
在Kubernetes首先解決七層的負(fù)載均衡,這個(gè)黑的我主要對(duì)系統(tǒng)做簡(jiǎn)單的配置就可以把這個(gè)東西用起來(lái),這個(gè)解決七層負(fù)載均衡的問(wèn)題.
沒(méi)有解決我這個(gè)ingress系統(tǒng)部署在哪臺(tái)機(jī)器上,會(huì)不會(huì)存在單點(diǎn)失效的問(wèn)題.
我們的解決方案本質(zhì)上把Ingress做成一種資源,可調(diào)度的資源.
我們一個(gè)容器是一個(gè)可以被調(diào)動(dòng)的資源,我們把Ingress也做成類(lèi)似的調(diào)度資源,也實(shí)現(xiàn)了專(zhuān)門(mén)對(duì)Ingress的調(diào)動(dòng)器.
我在一個(gè)機(jī)器里面自動(dòng)部署一些Ingress的,同時(shí)Ingress不同之間,通過(guò)(英文)的方式,服務(wù)不同的應(yīng)用.內(nèi)容比較多,今天只能蜻蜓點(diǎn)水的把意思傳達(dá)一下.我現(xiàn)在快速跳到下面一個(gè)主題,就是日志.
Docker對(duì)于日志有自己一套管理辦法,但是落地傳統(tǒng)企業(yè)過(guò)程當(dāng)中有兩個(gè)問(wèn)題.第一個(gè)很多已有的應(yīng)用采用寫(xiě)文件的方式,我們是不是為了上這個(gè)系統(tǒng)我應(yīng)用都要重寫(xiě),另外我寫(xiě)不同文件還有額外的好處.
我通過(guò)日志類(lèi)型寫(xiě)到不同的文件里面,所以我很難實(shí)現(xiàn)細(xì)粒度的把控,用戶(hù)有時(shí)候希望這類(lèi)日志寫(xiě)到一個(gè)名字,A里、另外一個(gè)文件寫(xiě)到B里,還是遇到一些需求,我們更改了Kubernetes的組件,使得Kubernetes或者Docker其實(shí)可以把存在本地的文件收集起來(lái),發(fā)送到我們用的ELK里面.
第一種方法通過(guò)(英文)的方式,每一個(gè)塊里面除了我的(英文)應(yīng)用,我還部署(英文),這個(gè)監(jiān)聽(tīng)我文件名和路徑,收集起來(lái)發(fā)送到(英文)里面.另外一種模式我們直接對(duì)EPI進(jìn)行擴(kuò)充,支持了一個(gè)東西,當(dāng)我們部署的時(shí)候,我們寫(xiě)YML文件可以指明這個(gè)POD寫(xiě)在這個(gè)文件下你可以收集.經(jīng)過(guò)這樣一些修改,我們成功落地在一些相對(duì)來(lái)說(shuō)比較傳統(tǒng)的企業(yè).
第一個(gè)全國(guó)最大的連鎖酒店之一,通過(guò)我們剛才做的適配最小化他們需要對(duì)應(yīng)用所做的修改,上線至今目前運(yùn)行到了七千多個(gè)容器,跑在數(shù)百臺(tái)的主機(jī)上.另外一個(gè)例子,中國(guó)最大卡的聯(lián)合組織,也是非常傳統(tǒng)的架構(gòu),底層用虛擬化來(lái)做的,上面通過(guò)我們采用的這樣一些方法,使得它可以非常輕便適配到傳統(tǒng)的行業(yè).
第三大塊我們一直說(shuō)容器和數(shù)據(jù)有狀態(tài)是天生的天敵,雖然我們可以?huà)燧d磁盤(pán),用網(wǎng)絡(luò)存儲(chǔ),不是容器的先天優(yōu)勢(shì),我們反而利用容器更好的做大數(shù)據(jù)的應(yīng)用.
Docker和Kubernetes落地一個(gè)企業(yè),大家最直觀的感覺(jué),它解決我計(jì)算的問(wèn)題,可以讓我計(jì)算更加輕便,可以讓我更高效去進(jìn)行很多的計(jì)算.對(duì)于數(shù)據(jù)支持非常少,已有數(shù)據(jù)怎么利用更加快速的計(jì)算挖掘這個(gè)數(shù)據(jù)的價(jià)值,尤其是現(xiàn)階段我們數(shù)據(jù)變動(dòng)體量越來(lái)越大,還有很多非結(jié)構(gòu)化的數(shù)據(jù),這是容器本身技術(shù),或者我們看到產(chǎn)品很難解決的問(wèn)題.
當(dāng)然我們也知道最近從去年開(kāi)始比較流行的就是我們AI,或者我們的深度學(xué)習(xí),深度學(xué)習(xí)是一個(gè)很好實(shí)現(xiàn)AI的方法.
它相比于傳統(tǒng)的數(shù)據(jù)分析的方案更能提取一些復(fù)雜的特征,更能分析一些非結(jié)構(gòu)化的數(shù)據(jù),同時(shí)從精度上來(lái)講對(duì)于傳統(tǒng)的算法我可能很容易達(dá)到一個(gè)天花板,對(duì)于深度學(xué)習(xí),隨著我數(shù)據(jù)量增加,我精度往往可以被持續(xù)的提升的,這是深度學(xué)習(xí).
在深度學(xué)習(xí)這個(gè)領(lǐng)域里面由谷歌開(kāi)源的一個(gè)方案叫做Tensorflow,社區(qū)活躍度來(lái)講跟Kubernetes非常相比,遠(yuǎn)遠(yuǎn)超過(guò)其他設(shè)計(jì)方案,獲得了最大社區(qū)的熱度.Tensorflow可能大部分人聽(tīng)過(guò),Tensorflow有很大的優(yōu)勢(shì),它最大問(wèn)題就是計(jì)算量.
以做一個(gè)圖像分類(lèi)為例,這是IMGENET的圖像分類(lèi),我們深度學(xué)習(xí)IMGENET提供很好方法.
另外就是一個(gè)數(shù)據(jù)平臺(tái),我們?cè)趺唇鉀Q這個(gè)問(wèn)題,利用容器和Kubernetes,利用他們分布式大規(guī)模計(jì)算的特性,實(shí)現(xiàn)極速深度學(xué)習(xí)的體驗(yàn).除了跑搜索、廣告、購(gòu)物等等以外,其他業(yè)務(wù)和大數(shù)據(jù)業(yè)務(wù)都混跑在這個(gè)容器之上.
我們核心的解決方案把Tensorflow的算法容器化,同時(shí)跟Kubernetes做分布式的調(diào)度,我增加機(jī)器實(shí)現(xiàn)我的吞吐量.
這是我們簡(jiǎn)單提供的解決方案和原生的Tensorflow相比很多的優(yōu)勢(shì).當(dāng)實(shí)現(xiàn)這個(gè)功能以后在同樣的一個(gè)Kubernetes集群里面,不光我們運(yùn)行A服務(wù)應(yīng)用,可以應(yīng)用我們CI、CD的功能,可以在我同個(gè)機(jī)器上進(jìn)行深度學(xué)習(xí).
目前在安防、金融等等領(lǐng)域?qū)崿F(xiàn)自動(dòng)從攝像頭監(jiān)控有著火.
在電商領(lǐng)域?qū)崿F(xiàn)了穿衣風(fēng)格的搭配.
最后例子就是用深度學(xué)習(xí)做一個(gè)實(shí)際預(yù)測(cè)取得落地的效果.
有問(wèn)題我們可以隨時(shí)交流.謝謝
文章來(lái)自微信公眾號(hào):云計(jì)算開(kāi)源產(chǎn)業(yè)聯(lián)盟
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4123.html