百分點和云知聲兩家公司都在使用Kubernetes。在百度資深科學家王益的協(xié)調(diào)下,兩方共同努力使用Kubernetes,成倍地提升集群利用率和團隊工作效率,并且一起開發(fā)了開源的Kubernetes“發(fā)行版”Sextant——實現(xiàn)幾乎零操作的全自動安裝和部署Kubernetes集群。目前有多家互聯(lián)網(wǎng)同仁在準備使用和參與開發(fā)。

Kubernetes能夠提升集群利用率

目前很多互聯(lián)網(wǎng)公司的集群的CPU總體利用率在20%以下。而Google的集群CPU總體利用率從十年前開始就是70%上下。考慮到即使是只有數(shù)十臺服務器的小型公司,擴容一倍服務器也需要耗費幾十萬美元。使用Kubernetes管理集群有望擴容兩三倍,從而節(jié)約一筆“巨款”。

這一提升背后,是傳統(tǒng)的的集群管理方式的兩個特點:一是每個團隊為各自的業(yè)務目標申請各自的服務器,二是通過ssh登陸使用服務器。團隊在努力完成業(yè)務目標的前幾周或者幾個月的探索期里,服務器利用率很高。但是解決了業(yè)務問題之后,利用率就下降了。然而團隊往往并不能釋放資源,因為主觀上會擔心下一個業(yè)務目標來臨的時候,要重新申請服務器??陀^上因為用戶登陸到服務器上使用,留下不少數(shù)據(jù),不便騰挪。甚至因為探索工作流程復雜,記不清哪些數(shù)據(jù)需要備份。

這一模式的另一個弊端是:雖然一家公司可能有百萬臺服務器,但一個需要一千臺服務器的作業(yè)卻很難執(zhí)行起來,因為集群實際上是割裂的,分屬不同團隊。反觀AlphaGo:每個實驗使用1000臺機器,4000個GPU,開發(fā)團隊意識到革命性的AI探索的核心是計算基礎架構的革命。

分布式操作系統(tǒng)針對以上問題,管理整個數(shù)據(jù)中心的服務器,讓各個團隊不再申請服務器,而是申請計算資源quota,比如,1000 CPU + 4000 GPU + 4000 GB內(nèi)存。quota有優(yōu)先級——通常一個為產(chǎn)品服務更新模型的作業(yè)的優(yōu)先級高于實驗作業(yè)。這樣,即時實驗作業(yè)先啟動,當產(chǎn)品作業(yè)啟動的時候,如果集群資源不足,分布式操作系統(tǒng)可以暫停實驗作業(yè),為產(chǎn)品作業(yè)騰出資源,等產(chǎn)品作業(yè)結束之后再繼續(xù)執(zhí)行實驗作業(yè)。

另一方面,分布式操作系統(tǒng)會把不同類型的作業(yè)調(diào)度在同一臺機器上,利用不同作業(yè)著重依賴不同硬件資源(CPU、內(nèi)存、磁盤IO、網(wǎng)絡IO)的特點,充分利用每一臺服務器的硬件資源。而且因為很多機器都在分布式操作系統(tǒng)管理之下,所以即使集群利用率高達80%,剩下的很多機器的20%也足以應付突發(fā)流量增加等問題。

Kubernetes能夠提升團隊工作效率

因為所有作業(yè)都由分布式操作系統(tǒng)來調(diào)度,工程師們不需要也不可以登陸到服務器。這降低了安全隱患,不需要工程師先登陸“跳板機”再從跳板機登陸服務器(跳板機記錄工程師的每次操作,在發(fā)生信息泄露時,用于回溯尋找“嫌疑人”),從而提升了工作效率。

此外,Kubernetes改變了工程師們的日常工作流程——通過要求開發(fā)團隊交付Docker image而不只是可執(zhí)行文件,Kubernetes簡化了集成測試,省去了發(fā)布、打包、部署、執(zhí)行、監(jiān)控、清理垃圾等運維工作。

Kubernetes帶來的另一類工作效率提升,在于降低了并行計算框架(如MapReduce、Spark、Storm等)的開發(fā)難度和成本。開發(fā)者不再必需套用幾個成熟的開源框架來寫自己的分布式程序,而是可以基于Kubernetes方便地開發(fā)自己的并行計算框架——畢竟用一個框架來描述很多算法架,往往意味著“樣樣精通,樣樣稀松”。

值得注意的是,基于Kubernetes用Go語言開發(fā)的MapReduce框架,其代碼行數(shù)是Hadoop MapReduce的百分之一,這意味著bug概率的極大降低,和處理bug的工作時間的極大節(jié)省。在目前AI和大數(shù)據(jù)為主流的互聯(lián)網(wǎng)業(yè)務中,這極大地釋放了團隊探索大規(guī)模AI技術的潛力。尤其是很多設計中就為Kubernetes考慮的并行計算框架,例如Tensorflow,更進一步強化了這一趨勢。

Kubernetes在實踐中痛點和解決方法

在技術研發(fā)工作中碰到的最大痛點是:Kubernetes集群的安裝需要大量繁瑣的手工操作。而且因為Kubernetes和相關技術在高速演進,很多手工操作需要重復執(zhí)行。此外,手工操作數(shù)十臺甚至數(shù)百臺服務器很容易出錯。
為此,百分點和云知聲聯(lián)合開發(fā)了幾乎是零操作的Kubernetes集群安裝和部署系統(tǒng)Sextant。

222Sextant的主要研發(fā)者

在開發(fā)之初,開發(fā)者以為Sextant很簡單,比如利用Ansible等軟件自動化手工操作即可,但實際情況要復雜得多。

首先,Ansible等工具不能重裝服務器操作系統(tǒng),而Kubernetes集群的單機操作系統(tǒng)不宜再用CentOS等常見Linux發(fā)行版本,而是適合使用CoreOS。常見Linux distribution都有包管理系統(tǒng),比如CentOS的yum和Debian的apt-get。包管理是為桌面系統(tǒng)設計的:每個桌面系統(tǒng)的用戶很少,因此可以預估需要安裝的軟件,并使用包管理系統(tǒng)來安裝。但是在集群中,Kubernetes可能調(diào)度任何人開發(fā)的任何作業(yè)到任何一臺服務器上執(zhí)行。如果用包管理系統(tǒng)安裝這些程序依賴的包,那么每臺服務器上都要安裝各個版本的Python、Java、Ruby、Perl、Scala,以及各種語言的各個版本對應的常用庫(libraries/packages)。僅安裝這些依賴,就需要消耗大量存儲資源。所以Kubernetes用容器技術替換包管理系統(tǒng)——每個程序的依賴都封裝在Docker image里,而不是安裝在單機操作系統(tǒng)中。而這樣一來,開發(fā)人員就不需要包管理了,而對單機操作系統(tǒng)的期待,變成了Linux kernel的自動升級。這恰好是仿照Google服務器操作系統(tǒng)打造的CoreOS所提供的。

可能很多集群的服務器上都已經(jīng)安裝了非CoreOS的操作系統(tǒng)了。為了方便重裝系統(tǒng),Sextant會在數(shù)據(jù)中心中的一臺bootstrapper服務器上部署PXE service,然后依次重啟其他服務器。這些服務器啟動的時候,BIOS/EFI從PXE service引導CoreOS,并將CoreOS安裝到本地磁盤,并配置Kubernetes,隨后重啟服務器,這臺服務器便可自動成為Kubernetes集群的一員了。為了將這種變化限定于數(shù)據(jù)中心里的一部分服務器,Sextant可以利用VLAN等隔離措施。因為Kubernetes是以容器的形式運行的,而每當Kubernetes升級時,Sextant將升級版本的容器鏡像放到bootstrapper服務器上,集群即可自動升級Kubernetes。每當CoreOS升級的時候,Sextant也將新版本放到bootstrapper服務器上,CoreOS會自動升級和重啟,并且保證每次同時重啟的機器數(shù)量是集群總數(shù)的一個極小的比例,不影響不中斷Kubernetes調(diào)度的分布式作業(yè)。所有的升級和安裝,都不依賴集群可以直接訪問互聯(lián)網(wǎng),從而保證了安全性。

大數(shù)據(jù)和人工智能的產(chǎn)業(yè)實踐

互聯(lián)網(wǎng)產(chǎn)業(yè)的核心一直是用服務器代替人力來服務萬千用戶。比如搜索引擎代替圖書館管理員,推薦系統(tǒng)代替服裝銷售員和報刊亭,互聯(lián)網(wǎng)廣告系統(tǒng)代替廣告代理公司,互聯(lián)網(wǎng)金融代替農(nóng)村信用社。在這些成功的商業(yè)模式背后,無一不是大數(shù)據(jù)和AI的支持——互聯(lián)網(wǎng)產(chǎn)品收集每天高達百億甚至千億次用戶行為(比如queries和clicks)用于訓練人工智能系統(tǒng)(比如點擊率預估模型),來提升在線產(chǎn)品的服務質(zhì)量。

333

近年來,語音和視覺技術隨deep learning進一步發(fā)展,創(chuàng)造了IoT、AR和無人車等新興領域。顯而易見的是,未來的互聯(lián)網(wǎng)會和人們的生活契合得更緊密,會收集更多更細致的數(shù)據(jù),也需要更大規(guī)模人工智能技術的支持。而這些恰好是百分點和云知聲的業(yè)務基礎和技術長項。Kubernetes提供了一個合作的平臺:和Mesos、YARN等上一代技術被設計來調(diào)度離線作業(yè)相比,Kubernetes可以同時調(diào)度離線和在線作業(yè)。尤其是Kubernetes的service和load balancer的概念,使其可以調(diào)度在線服務、日志收集處理和存儲、AI模型的訓練等各類不同的作業(yè)。

在有Kubernetes之前,公司之間的合作往往是松耦合的;而在Kubernetes平臺上,開發(fā)團隊可以同時運行百分點的EFK技術用于收集和管理數(shù)據(jù),以及云知聲的大規(guī)模AI系統(tǒng)從數(shù)據(jù)中提取知識和提升服務質(zhì)量。這次合作給予我雙方更有信心的進一步開辟全新的合作圖景,嘗試細粒度的強強聯(lián)合。

提升效率,迎接大數(shù)據(jù)和AI大潮

Sextant是一個早期開源項目,隨著Kubernetes技術的演進,Sextant還需要長期維護的開發(fā)。

百分點和云知聲的技術團隊以充分開放的心態(tài),愿意分享各自業(yè)務中Kubernetes技術的使用經(jīng)驗。也愿意幫助業(yè)界同仁使用Sextant簡化Kubernetes部署。更歡迎相關技術人員一起合作投入到Sextant的開發(fā)工作中,提升團隊工作效率和計算能力,迎接大數(shù)據(jù)和AI的大潮。

 

分享到

xiesc

相關推薦