李英華
摘要:在云計(jì)算日益火爆的今天,云計(jì)算領(lǐng)域誕生了一個(gè)新興技術(shù),使得整個(gè)計(jì)算機(jī)行業(yè)為之振奮。這就是Docker——一個(gè)全新的“容器”。Docker作為輕量級容器能夠?yàn)樵朴?jì)算3種模型(SaaS,PaaS,IaaS)之一的PaaS的構(gòu)建提供可靠的支持。文章以Docker為基礎(chǔ)平臺,以Google開源的Kubernetes為平臺,Harbor為鏡像倉庫,Etcd為全局索引系統(tǒng),falcon-agent為監(jiān)控構(gòu)建完整的集群資源管理系統(tǒng),提供大型集群環(huán)境部署及管理方案。
關(guān)鍵詞:云計(jì)算;容器;虛擬化;集群
1研究背景及意義
現(xiàn)行的大規(guī)模網(wǎng)絡(luò)集群都由巨量的服務(wù)器組成,多數(shù)計(jì)算型資源的服務(wù)器,的計(jì)算能力無法得到充分利用。例如LXC,KVM等虛擬化技術(shù)雖然對資源進(jìn)行隔離,但LXC,KVM技術(shù)依賴于物理CPU,及內(nèi)存,是硬件級別,無法進(jìn)行快速的部署、啟動(dòng)和遷移。而Docker相當(dāng)于操作系統(tǒng)之上的程序,利用操作系統(tǒng)containerzation技術(shù),可以在KVM虛擬機(jī)上運(yùn)行,容器占用系統(tǒng)資源很低,極大地提高了資源利用率。當(dāng)今,面向互聯(lián)網(wǎng)的服務(wù),一旦各種資源達(dá)到瓶頸,最簡單的方法就是提高服務(wù)器的數(shù)量。但是,需要大規(guī)模的部署系統(tǒng)及應(yīng)用,且峰值過后,又需要遷移過量的機(jī)器。而Docker通過將多種依賴組件及服務(wù)打包成鏡像的方式,能夠?qū)崿F(xiàn)快速的部署和實(shí)現(xiàn),且一臺主機(jī)可以同時(shí)運(yùn)行多個(gè)實(shí)例,峰值過后,還可快速的銷毀,極大地提高了大型服務(wù)的伸縮能力。云計(jì)算技術(shù)使互聯(lián)網(wǎng)服務(wù)必須由巨量的服務(wù)所支撐。不同的服務(wù)有著不同的功能就如同不同的零件組裝成機(jī)器,而Docker容器就像一個(gè)集裝箱,把所需要的服務(wù)及環(huán)境都封裝在里面,想用的時(shí)候隨時(shí)可以拿走并使用,提供了一個(gè)快速啟動(dòng),快速部署,版本控制的方法。Docker與云計(jì)算平臺的結(jié)合產(chǎn)生了良好的化學(xué)反應(yīng)。
2系統(tǒng)綜述
集群資源管理系統(tǒng)實(shí)現(xiàn)資源的統(tǒng)一管理和使用,同時(shí)監(jiān)視集群的資源負(fù)載情況,為上層業(yè)務(wù)系統(tǒng)提供靈活、快速、動(dòng)態(tài)的多種資源服務(wù),提供統(tǒng)一的系統(tǒng)資源管理基礎(chǔ)構(gòu)架。整個(gè)系統(tǒng)由資源實(shí)體層、資源服務(wù)層、資源管理層等組成。
面向容器的集群資源管理系統(tǒng),管理計(jì)算資源,為不同服務(wù)提供資源及環(huán)境。其整體系統(tǒng)架構(gòu)如圖1所示。
按照系統(tǒng)各組件之間的關(guān)聯(lián)關(guān)系,完整的系統(tǒng)需要的組件可分為以下部分:(1)Docker組件Kubernetes集群使用Docker作為基礎(chǔ)容器組件,容器啟動(dòng)net=none網(wǎng)絡(luò),通過assginer和pipwork配置容器的網(wǎng)絡(luò)。Docker在LXC之上融#AUFs分層鏡像管理機(jī)制,拋棄傳統(tǒng)虛擬機(jī)試圖模擬完整機(jī)器的思路,以應(yīng)用為單元進(jìn)行“集裝封箱”,是“輕量級”的虛擬化技術(shù)。Docker Engine可以自動(dòng)化部署應(yīng)用到可移植的容器中。Docker容器可以封裝任何有效負(fù)載,幾乎可以在任何服務(wù)器之間進(jìn)行一致性運(yùn)行。開發(fā)者構(gòu)建的應(yīng)用只需一次構(gòu)建即可多平臺運(yùn)行。運(yùn)營人員只需配置他們的服務(wù),即可運(yùn)行所有應(yīng)用。(2)Kubernetes組件Kubernetes Cluste中創(chuàng)建的每一個(gè)集群都對應(yīng)一套Kubernetes環(huán)境。一套完整的Kubernetes集群包含一臺Kubernetes master和若干臺Kubernetes node。為了確保Kubernetes集群正常運(yùn)轉(zhuǎn),每一臺集群內(nèi)主機(jī)上首先需要配置好Docker組件,此外,整套集群需單獨(dú)部署如下組件:etcd:為Kubernetes集群配置提供存儲(chǔ)服務(wù),記錄所有組件的信息和更新狀態(tài);另外,assginer也依賴于etcd,在提供的安裝腳本中,Kubernetes和assginer共用同一套etcd集群。(3)監(jiān)控組件。容器資源管理的監(jiān)控系統(tǒng)是在小米開源的open-falcon基礎(chǔ)上進(jìn)行修改實(shí)現(xiàn)的。一套完整的監(jiān)控系統(tǒng)需要如下組件:agent:采集信息并上報(bào)組件,需要在集群中所有node節(jié)點(diǎn)部署。
3系統(tǒng)具體功能實(shí)現(xiàn)
Kubenetes通過scheduler通過Apiserver查詢資源充足的機(jī)器分配Pod,過程如下:通過客戶端提出需求,可以通過Apiserver的Restful API,也可以使用kubectl命令行工具。支持的數(shù)據(jù)類型包括JsON和YAML。具體步驟為:(1)Apiserver獲取資源申請請求,并存儲(chǔ)到etcd;(2)調(diào)度器通過Apiserver查詢請求。嘗試為Pod分配主機(jī);(3)過濾主機(jī):調(diào)度器根據(jù)請求需要的資源過濾資源剩余不足的節(jié)點(diǎn);(4)進(jìn)一步評估剩余機(jī)器,尋找負(fù)載最低的機(jī)器;(5)選擇主機(jī):將選擇的結(jié)果存儲(chǔ)到etcd中;(6)對應(yīng)機(jī)器根據(jù)kubelet查詢的結(jié)果執(zhí)行創(chuàng)建Pod操作。
Docker容器申請流程及說明:通常在生產(chǎn)環(huán)境中,往往需要對大規(guī)模需求進(jìn)行快速的響應(yīng)部署。通常情況下都是以rc為對象創(chuàng)建一一對應(yīng)的實(shí)例。通過yaml文件描述需求具體情況及資源分配。通過yaml文件將Ip池導(dǎo)入etcd,具體命令操作為:Assigner import import.yaml$ETCDPATH。然后再資源上線:通過kubectl命令行操作,具體命令如下:Kubectl creme-fxx.yaml。
通過commiter對穩(wěn)定的Docker容器進(jìn)行版本固化:commiter是一款由go語言開發(fā)的,基于Kubernetes集群的系統(tǒng)鏡像資源和IP資源的管理系統(tǒng)。該系統(tǒng)的功能實(shí)現(xiàn)需要assigner和Kubernetes的配合。Commiter為用戶提供可配置的鏡像倉庫地址、Apiserver地址、ftp地址;以組件為單位,將組件內(nèi)所有的業(yè)務(wù)容器打包成鏡像,鏡像命名規(guī)則為:registory/app-component-ip:tag,其中tag為當(dāng)天日期;將鍵值對<鏡像名:容器IP>寫入ETCD中/commiter/ips目錄下,其中鏡像名不包含倉庫信息,即:app-component-ip:tag;將鏡像上傳到鏡像倉庫;對該組件內(nèi)每個(gè)業(yè)務(wù)容器,增加對應(yīng)Kubernetes Pod標(biāo)簽,標(biāo)簽內(nèi)容為IP=containerip;根據(jù)組件rc模板文件,為該組件內(nèi)每個(gè)業(yè)務(wù)容器生成一個(gè)單獨(dú)的pod_rc控制文件,該pod_rc命名規(guī)則為:appre-component-ipyaml,其中該pod_rc控制文件中鏡像名為該pod中業(yè)務(wù)容器利用commiter打包生成的鏡像名;將生成的pod_rc文件上傳到ftp對應(yīng)/app/component目錄下;針對生成的pod_rc,調(diào)用Kubernetes,執(zhí)行create操作,完成pod_rc對該組件控制rc的接管(組件內(nèi)所有的pod_rc全部執(zhí)行完才算完全接管)。
容器IP配置的說明:(1)編寫import.yaml文件將ip池導(dǎo)入etcd按指定目錄存儲(chǔ);(2)創(chuàng)建pod容器成功后通過assigner查詢etcd中對應(yīng)IP池提取未被占用的IP;(3)通過pipework為指定容器分配IP。
4結(jié)語
隨著移動(dòng)互聯(lián)網(wǎng)的迅速發(fā)展,海量的數(shù)據(jù)使得企業(yè)級應(yīng)用承受了巨大的壓力。云計(jì)算,大數(shù)據(jù)的作用越來越大。也催生了虛擬機(jī)及容器技術(shù)。例如Docker。又由此催生了一系列管理容器的服務(wù),例如Kubernets。
現(xiàn)在許多企業(yè)都在加大對容器技術(shù)的使用力度。對于大型集群而言,容器技術(shù),可以提升資源利用率。提高資源分配效率及彈性伸縮能力。結(jié)合鏡像的使用方式,可實(shí)現(xiàn)服務(wù)的快速部署及啟動(dòng)。京東在雙11部署了15萬+的容器,使業(yè)務(wù)效率提升了N個(gè)等級。阿里云也正在推進(jìn)容器化。