吳 松 王 坤 金 海
(服務(wù)計(jì)算技術(shù)與系統(tǒng)教育部重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (集群與網(wǎng)格計(jì)算湖北省重點(diǎn)實(shí)驗(yàn)室(華中科技大學(xué)) 武漢 430074) (華中科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 武漢 430074)
近年來(lái),容器技術(shù)廣泛應(yīng)用于云計(jì)算平臺(tái)和數(shù)據(jù)中心的資源管理、系統(tǒng)運(yùn)維和軟件部署中,成為了云計(jì)算領(lǐng)域的業(yè)界熱點(diǎn).作為容器代表系統(tǒng)之一的Docker[1],從其2013年誕生以來(lái)便獲得了持續(xù)關(guān)注和快速發(fā)展,相關(guān)開(kāi)源社區(qū)的活躍度極高,大批IT企業(yè)實(shí)際部署.同時(shí),作為業(yè)界最具代表性的云計(jì)算平臺(tái),亞馬遜云、谷歌云、微軟云和阿里云等都先后在云計(jì)算業(yè)務(wù)中推出以操作系統(tǒng)虛擬化技術(shù)為基礎(chǔ)的容器云服務(wù).最近操作系統(tǒng)虛擬化技術(shù)開(kāi)始走出數(shù)據(jù)中心,除了傳統(tǒng)的微服務(wù)(micro service)、軟件開(kāi)發(fā)運(yùn)維(DevOps)等領(lǐng)域,已逐步應(yīng)用于包括邊緣計(jì)算、物聯(lián)網(wǎng)等在內(nèi)的新領(lǐng)域,表現(xiàn)出了良好的發(fā)展態(tài)勢(shì)和應(yīng)用前景.
在這種背景下,操作系統(tǒng)虛擬化作為容器的核心技術(shù)支撐,得到了研究者的廣泛關(guān)注.最近幾年,無(wú)論是在以SOSP/OSDI為代表的計(jì)算機(jī)系統(tǒng)領(lǐng)域頂級(jí)學(xué)術(shù)會(huì)議上,還是以Google為代表的重要互聯(lián)網(wǎng)企業(yè)中,都陸續(xù)出現(xiàn)了一批操作系統(tǒng)虛擬化的最新研究成果,并且成果數(shù)量呈現(xiàn)出逐年增加的總體趨勢(shì).操作系統(tǒng)虛擬化及其支持的容器技術(shù)已逐漸成為了研究熱點(diǎn).本文通過(guò)對(duì)操作系統(tǒng)虛擬化代表性研究工作涉及的主要研究?jī)?nèi)容以及技術(shù)方法進(jìn)行梳理;繼而對(duì)操作系統(tǒng)虛擬化可能存在的問(wèn)題進(jìn)行分析和總結(jié);在此基礎(chǔ)上,展望操作系統(tǒng)虛擬化未來(lái)的研究方向.
虛擬化是一種資源管理技術(shù),通過(guò)對(duì)計(jì)算機(jī)資源的抽象和模擬,提供一個(gè)個(gè)隔離執(zhí)行環(huán)境,即虛擬機(jī).虛擬化可以實(shí)現(xiàn)計(jì)算機(jī)資源的動(dòng)態(tài)分配、靈活調(diào)度、有效共享,提高計(jì)算機(jī)資源利用率.虛擬化技術(shù)分布在計(jì)算機(jī)系統(tǒng)的不同層次.應(yīng)用在云計(jì)算平臺(tái)和數(shù)據(jù)中心中的虛擬化技術(shù)主要包括傳統(tǒng)虛擬化技術(shù)和操作系統(tǒng)虛擬化技術(shù).在本文中,傳統(tǒng)虛擬化技術(shù)是指以Xen和KVM等系統(tǒng)為代表的硬件虛擬化技術(shù).由于近年來(lái)操作系統(tǒng)虛擬化技術(shù)獲得了廣泛的關(guān)注并表現(xiàn)出了良好的發(fā)展趨勢(shì),本文將重點(diǎn)討論操作系統(tǒng)虛擬化技術(shù).本節(jié)首先簡(jiǎn)單介紹操作系統(tǒng)虛擬化歷史背景和技術(shù)架構(gòu),然后通過(guò)將操作系統(tǒng)虛擬化技術(shù)與傳統(tǒng)虛擬化技術(shù)進(jìn)行比較從而總結(jié)其優(yōu)缺點(diǎn).
操作系統(tǒng)虛擬化技術(shù)有近40年的歷史.思想起源于1979年UNIX系統(tǒng)中的chroot技術(shù)[2],該技術(shù)可以切換系統(tǒng)的根目錄位置,從而實(shí)現(xiàn)簡(jiǎn)單的文件系統(tǒng)資源隔離.2000年FreeBSD Jails[3]吸收并改進(jìn)了chroot技術(shù),在文件系統(tǒng)隔離的基礎(chǔ)上添加了用戶和網(wǎng)絡(luò)資源的隔離.2004年Solaris Container[4]作為Solaris 10中的特性發(fā)布,包含了Resource Manage-ment提供的系統(tǒng)資源管理和Zones提供的運(yùn)行環(huán)境隔離.2005年OpenVZ[5]采用了和Solaris Container類(lèi)似的思想,通過(guò)為內(nèi)核打補(bǔ)丁的方式來(lái)提供資源管理和隔離等功能.2007年Cgroup(control group)[6]被加入Linux內(nèi)核中,實(shí)現(xiàn)了統(tǒng)計(jì)和控制每個(gè)進(jìn)程的資源使用(包括CPU、內(nèi)存、I/O、網(wǎng)絡(luò)等)功能.2008年LXC[7]基于Cgroup和Linux namespace[8]實(shí)現(xiàn),進(jìn)一步完善了操作系統(tǒng)虛擬化技術(shù).2013年Docker圍繞操作系統(tǒng)虛擬化技術(shù)構(gòu)建了一套完整的生態(tài),包括鏡像標(biāo)準(zhǔn)、REST API、CLI、集群管理等,具有配置簡(jiǎn)化、部署便捷、效率更高等優(yōu)點(diǎn),使得操作系統(tǒng)虛擬化技術(shù)得到了更加廣泛的應(yīng)用.
操作系統(tǒng)虛擬化技術(shù)允許多個(gè)應(yīng)用在共享同一主機(jī)操作系統(tǒng)(Host OS)內(nèi)核的環(huán)境下隔離運(yùn)行,主機(jī)操作系統(tǒng)為應(yīng)用提供一個(gè)個(gè)隔離的運(yùn)行環(huán)境,即容器實(shí)例.操作系統(tǒng)虛擬化技術(shù)架構(gòu)可以分為容器實(shí)例層、容器管理層和內(nèi)核資源層.圖1展示了Docker系統(tǒng)架構(gòu)對(duì)應(yīng)各層次的劃分.
容器實(shí)例層指所有運(yùn)行于容器之上的應(yīng)用程序以及所需的輔助系統(tǒng),包括監(jiān)控、日志等.容器管理層可以分為運(yùn)行時(shí)引擎和管理程序2個(gè)模塊,所起作用分別是運(yùn)行容器應(yīng)用和管理容器實(shí)例.內(nèi)核資源層是指集成在操作系統(tǒng)內(nèi)核中的資源管理程序,例如Linux內(nèi)核中的Cgroup,其目標(biāo)是對(duì)CPU、內(nèi)存、網(wǎng)絡(luò)、I/O等系統(tǒng)資源進(jìn)行控制和分配,以支持上層的容器管理.
Fig. 1 Hierarchical structure of operating system virtualization圖1 操作系統(tǒng)虛擬化層次架構(gòu)圖
目前,云計(jì)算平臺(tái)和數(shù)據(jù)中心中最常用的虛擬化技術(shù)是Xen,KVM等傳統(tǒng)虛擬化技術(shù)和Docker,LXC等操作系統(tǒng)虛擬化技術(shù).因此,本節(jié)將操作系統(tǒng)虛擬化與傳統(tǒng)虛擬化相比較以總結(jié)其主要特點(diǎn).
操作系統(tǒng)虛擬化與傳統(tǒng)虛擬化最本質(zhì)的不同是傳統(tǒng)虛擬化需要安裝客戶機(jī)操作系統(tǒng)(Guest OS)才能執(zhí)行應(yīng)用程序,而操作系統(tǒng)虛擬化通過(guò)共享的宿主機(jī)操作系統(tǒng)來(lái)取代Guest OS.因此容器啟動(dòng)時(shí)不需要等待操作系統(tǒng)加載,從而使得容器的啟動(dòng)速度遠(yuǎn)快于虛擬機(jī)的啟動(dòng)速度.同時(shí),與傳統(tǒng)虛擬化相比較,操作系統(tǒng)虛擬化減少了虛擬機(jī)監(jiān)控器(virtual machine monitor, VMM)和Guest OS,所以在保證應(yīng)用性能的同時(shí),虛擬化的系統(tǒng)開(kāi)銷(xiāo)很小,并且有效地提升了系統(tǒng)資源利用率,使得在單一主機(jī)上同時(shí)運(yùn)行數(shù)千個(gè)容器成為可能.然而,傳統(tǒng)虛擬化通過(guò)VMM層虛擬硬件資源以保證虛擬機(jī)之間的隔離性,而操作系統(tǒng)虛擬化只是利用內(nèi)核的特性實(shí)現(xiàn)了部分資源的限制,因此傳統(tǒng)虛擬化相較于操作系統(tǒng)虛擬化擁有更強(qiáng)的隔離性和安全性.表1對(duì)操作系統(tǒng)虛擬化技術(shù)與傳統(tǒng)虛擬化技術(shù)的特性進(jìn)行了比較.
Table 1 Operating System Virtualization vs Traditional Virtualization
基于以上特性,操作系統(tǒng)虛擬化技術(shù)和傳統(tǒng)虛擬化技術(shù)都存在各自比較適用的應(yīng)用場(chǎng)景.操作系統(tǒng)虛擬化適用于追求高性能且對(duì)隔離性及安全性要求不高的場(chǎng)景,例如在進(jìn)程多、更新快的微服務(wù)以及環(huán)境配置變化多、更新頻繁的DevOps場(chǎng)景中,操作系統(tǒng)虛擬化可以發(fā)揮出其鏡像小、啟動(dòng)快、部署便捷的優(yōu)點(diǎn).傳統(tǒng)虛擬化適用于對(duì)隔離性要求較高或者應(yīng)用程序需要運(yùn)行于不同操作系統(tǒng)的場(chǎng)景,例如面向多租戶的云服務(wù)提供商多數(shù)是采用傳統(tǒng)虛擬化技術(shù)以保證用戶性能和安全需求.在一些特定場(chǎng)景中,也會(huì)讓容器運(yùn)行在傳統(tǒng)虛擬機(jī)上,用傳統(tǒng)虛擬化的良好隔離性來(lái)彌補(bǔ)操作系統(tǒng)虛擬化隔離性的不足,例如現(xiàn)在主流的云計(jì)算平臺(tái)皆采用這種方式提供容器服務(wù).
綜上所述,操作系統(tǒng)虛擬化具有啟動(dòng)快速、部署方便、資源占用少、運(yùn)行效率高等優(yōu)點(diǎn),但也存在隔離性較弱的不足,因此適用于追求高性能但是對(duì)隔離性要求不高的應(yīng)用場(chǎng)景.
隨著操作系統(tǒng)虛擬化技術(shù)的快速發(fā)展和廣泛應(yīng)用,誕生了大量相關(guān)的研究工作.本節(jié)將分別從容器實(shí)例層、容器管理層和內(nèi)核資源層介紹操作系統(tǒng)虛擬化相關(guān)研究工作從而梳理和分析其研究現(xiàn)狀.本文將介紹的代表性研究工作所涉及的研究?jī)?nèi)容如表2所示.
目前針對(duì)操作系統(tǒng)虛擬化容器實(shí)例層的研究工作主要集中在容器應(yīng)用場(chǎng)景適用性和容器應(yīng)用性能分析2個(gè)方面,從這2個(gè)方面梳理應(yīng)用層的研究現(xiàn)狀.
Table 2 Research Concerns Status to Operating System Virtualization表2 操作系統(tǒng)虛擬化研究?jī)?nèi)容統(tǒng)計(jì)
Notes: In this table, check mark “√” indicates the specific concern is discussed in corresponding publication.
1) 應(yīng)用場(chǎng)景
操作系統(tǒng)虛擬化技術(shù)的出現(xiàn)、成熟和走向主流,對(duì)于應(yīng)用而言,意味著除了傳統(tǒng)虛擬化技術(shù)之外又多了一種運(yùn)行環(huán)境的選擇.從技術(shù)特點(diǎn)來(lái)看,操作系統(tǒng)虛擬化技術(shù)能在一些應(yīng)用場(chǎng)景中提供快速部署能力并提高資源利用率.
操作系統(tǒng)虛擬化技術(shù)的傳統(tǒng)應(yīng)用場(chǎng)景包括微服務(wù)、DevOps、云環(huán)境下的資源管理等.例如Sheoran等人[9]利用基于容器的微服務(wù)系統(tǒng)解決分布式部署帶來(lái)的端到端延時(shí)問(wèn)題;然而,在微服務(wù)場(chǎng)景中也存在資源供給時(shí)效性差難以應(yīng)對(duì)負(fù)載突變的問(wèn)題,郝庭毅等人[10]提出了一種服務(wù)質(zhì)量敏感的、基于前饋的容器資源彈性供給方法可有效保障應(yīng)用的服務(wù)質(zhì)量.針對(duì)自動(dòng)化開(kāi)發(fā)與測(cè)試應(yīng)用場(chǎng)景,Handigol等人[11]基于容器技術(shù)開(kāi)發(fā)網(wǎng)絡(luò)系統(tǒng)模擬器,使得對(duì)以往研究成果的實(shí)驗(yàn)復(fù)現(xiàn)變得更加簡(jiǎn)便.Kang等人[12]利用容器技術(shù)和微服務(wù)架構(gòu)在云計(jì)算環(huán)境中實(shí)現(xiàn)基礎(chǔ)設(shè)施的自動(dòng)化運(yùn)維.He等人[13]在云計(jì)算環(huán)境中基于容器技術(shù)實(shí)現(xiàn)彈性的資源管理策略,相較于基于傳統(tǒng)虛擬化的方案有效提升了資源靈活性以及資源利用率.
操作系統(tǒng)虛擬化也逐步應(yīng)用到一些新型應(yīng)用場(chǎng)景之中,包括邊緣計(jì)算、移動(dòng)云、無(wú)服務(wù)器計(jì)算等應(yīng)用場(chǎng)景.例如Pahl等人[14]和Gerlach等人[15]分別利用容器技術(shù)來(lái)解決邊緣計(jì)算平臺(tái)和科學(xué)計(jì)算平臺(tái)的軟件部署以及資源利用率低下的問(wèn)題.但是在容器技術(shù)應(yīng)用的過(guò)程中,也存在容器必須運(yùn)行相同操作系統(tǒng)的局限性.針對(duì)該問(wèn)題,吳松等人[16]通過(guò)在主機(jī)操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)安卓容器驅(qū)動(dòng)以打破操作系統(tǒng)虛擬化的內(nèi)核限制,從而構(gòu)建啟動(dòng)快速、系統(tǒng)資源開(kāi)銷(xiāo)較低的云端安卓代碼卸載運(yùn)行環(huán)境.Hu等人[17]在以上研究的基礎(chǔ)上提出基于容器技術(shù)的安卓?jī)?nèi)核定制工具AndriodKit,以適應(yīng)云端大規(guī)模、多樣化的應(yīng)用場(chǎng)景.針對(duì)物聯(lián)網(wǎng)等新型應(yīng)用場(chǎng)景,OpenLambda[43]基于容器技術(shù)實(shí)現(xiàn)比微服務(wù)架構(gòu)更細(xì)粒度的無(wú)服務(wù)器架構(gòu),SOCK[18]在此基礎(chǔ)上根據(jù)無(wú)服務(wù)器架構(gòu)的需求針對(duì)容器的初始化延遲和可擴(kuò)展性進(jìn)行了優(yōu)化.
現(xiàn)有的針對(duì)操作系統(tǒng)虛擬化應(yīng)用場(chǎng)景的研究涉及領(lǐng)域比較廣泛,從傳統(tǒng)的云計(jì)算平臺(tái)到最新的無(wú)服務(wù)器架構(gòu)都存在相關(guān)的研究工作.由于操作系統(tǒng)虛擬化具有良好的性能并且正在快速發(fā)展,因此未來(lái)將會(huì)有更多的關(guān)于容器應(yīng)用場(chǎng)景的研究工作誕生.
2) 性能分析
現(xiàn)有針對(duì)操作系統(tǒng)虛擬化性能分析的研究主要是與傳統(tǒng)虛擬化環(huán)境下的性能做比較,以總結(jié)操作系統(tǒng)虛擬化的優(yōu)缺點(diǎn).在針對(duì)吞吐量等應(yīng)用性能的研究中,結(jié)果均顯示應(yīng)用運(yùn)行在容器環(huán)境中較運(yùn)行在傳統(tǒng)虛擬化環(huán)境中有一定的性能增長(zhǎng).例如,Bernstein[19]分別在容器環(huán)境和傳統(tǒng)虛擬機(jī)環(huán)境中測(cè)試NewSQL系統(tǒng)性能,結(jié)果顯示容器環(huán)境應(yīng)用性能較傳統(tǒng)虛擬機(jī)環(huán)境有5倍的增長(zhǎng).Plauth等人[20]將HTTP服務(wù)器和鍵值存儲(chǔ)應(yīng)用程序分別運(yùn)行于Docker和XEN環(huán)境中,測(cè)試結(jié)果顯示在吞吐量等應(yīng)用性能方面,Docker明顯優(yōu)于XEN.在針對(duì)隔離性等系統(tǒng)性能的研究中,作者也都得結(jié)論:容器系統(tǒng)隔離性相較傳統(tǒng)虛擬化更弱.例如,Xavier等人[21]分別在LXC和KVM上對(duì)磁盤(pán)敏感的負(fù)載進(jìn)行壓力測(cè)試,得出結(jié)論:LXC的I/O隔離遠(yuǎn)弱于KVM;他們的另一項(xiàng)研究[22]證明在高性能計(jì)算(HPC)環(huán)境中,雖然容器技術(shù)的性能開(kāi)銷(xiāo)較小,但是其隔離性目前還不成熟,實(shí)驗(yàn)結(jié)果顯示只有CPU資源能做到較好的隔離,內(nèi)存、磁盤(pán)和網(wǎng)絡(luò)等資源的隔離性均較弱.Guedes等人[23]分別在容器和傳統(tǒng)虛擬化環(huán)境中運(yùn)行I/O密集型的應(yīng)用,結(jié)果表明容器環(huán)境雖然有更短的應(yīng)答時(shí)間、更小的失敗率,但是其隔離性不如傳統(tǒng)虛擬化強(qiáng).Felter等人[24]在Docker和KVM上分別對(duì)CPU、內(nèi)存、I/O做壓力測(cè)試,也通過(guò)實(shí)驗(yàn)得出Docker隔離性更弱的結(jié)論.
還有一些研究工作針對(duì)網(wǎng)絡(luò)、I/O等容器系統(tǒng)性能做出詳細(xì)的測(cè)試與分析.例如,Suo等人[25]分別詳細(xì)分析了單主機(jī)和多主機(jī)環(huán)境下各種容器網(wǎng)絡(luò)連接模式的性能優(yōu)缺點(diǎn).在單主機(jī)和多主機(jī)環(huán)境下都存在安全隔離和網(wǎng)絡(luò)性能的權(quán)衡,因此容器系統(tǒng)為追求良好的安全隔離都會(huì)損耗網(wǎng)絡(luò)性能.另外,各種容器網(wǎng)絡(luò)模式的啟動(dòng)時(shí)間也存在差別,因此短生命周期的應(yīng)用和延遲敏感的應(yīng)用在選擇容器網(wǎng)絡(luò)模式時(shí)都應(yīng)將啟動(dòng)時(shí)間考慮在內(nèi).阮博文等人[26]將現(xiàn)有的容器系統(tǒng)分為應(yīng)用容器(例如Docker)和系統(tǒng)容器(例如LXC)2類(lèi),通過(guò)一系列實(shí)驗(yàn)得到結(jié)論:系統(tǒng)容器比應(yīng)用容器更適合I/O密集型應(yīng)用場(chǎng)景,這是因?yàn)閼?yīng)用容器中的分層文件系統(tǒng)會(huì)增加I/O延遲.
綜上所述,在對(duì)操作系統(tǒng)虛擬化與傳統(tǒng)虛擬化應(yīng)用性能比較的研究中,均可得出結(jié)論:操作系統(tǒng)虛擬化技術(shù)具有較高的性能效率,但是隔離性仍存在不足.在對(duì)容器系統(tǒng)測(cè)試與分析的研究中,可以發(fā)現(xiàn)容器系統(tǒng)的不同網(wǎng)絡(luò)模式以及不同容器系統(tǒng)之間都存在性能差異,因此運(yùn)行在容器環(huán)境中的應(yīng)用程序應(yīng)根據(jù)自身性能需求進(jìn)行網(wǎng)絡(luò)模式配置與容器系統(tǒng)選擇.
目前針對(duì)操作系統(tǒng)虛擬化容器管理層的研究工作主要集中在容器鏡像管理和容器編排2個(gè)方面.具體研究現(xiàn)狀如下.
1) 鏡像管理
容器的啟動(dòng)時(shí)間對(duì)于容器應(yīng)用性能有很重要的影響,如果容器啟動(dòng)時(shí)間更快的話,很多工作將會(huì)因此受益.例如集群調(diào)度器將會(huì)以一個(gè)更小的開(kāi)銷(xiāo)頻繁地進(jìn)行負(fù)載均衡;軟件也可以更加快速地更新來(lái)解決重要bug等.然而相關(guān)實(shí)驗(yàn)結(jié)果表明,76%的容器啟動(dòng)時(shí)間是花費(fèi)在鏡像拉取這個(gè)操作上面[27].因此,對(duì)于容器鏡像管理的研究具有重大意義.Slacker[27]通過(guò)分析發(fā)現(xiàn)容器啟動(dòng)時(shí)必需的數(shù)據(jù)僅占容器鏡像的6.4%,從而采取優(yōu)先讀取必需鏡像數(shù)據(jù)、延遲讀取不重要鏡像數(shù)據(jù)的方案以加快容器啟動(dòng)速度;并且通過(guò)修改Docker容器的存儲(chǔ)驅(qū)動(dòng),充分利用VMstore的snapshot和clone等基本API來(lái)實(shí)現(xiàn)寫(xiě)時(shí)復(fù)制功能.以上改進(jìn)工作使得鏡像上傳和鏡像拉取操作執(zhí)行速度分別提升了153倍和72倍,有效降低了容器的啟動(dòng)和部署時(shí)間.然而,該工作并沒(méi)有考慮大規(guī)模環(huán)境下,容器守護(hù)進(jìn)程對(duì)于少量鏡像的競(jìng)爭(zhēng)訪問(wèn)問(wèn)題.針對(duì)以上問(wèn)題,Wharf[28]把容器存儲(chǔ)驅(qū)動(dòng)拆分為全局和私有部分,全局部分存儲(chǔ)鏡像層和元數(shù)據(jù)等容器守護(hù)進(jìn)程之間共享的內(nèi)容,私有部分存儲(chǔ)網(wǎng)絡(luò)和數(shù)據(jù)卷等私有信息,從而減少容器守護(hù)進(jìn)程對(duì)于共享鏡像的訪問(wèn);對(duì)于共享的全局部分,也采取細(xì)粒度鎖和元數(shù)據(jù)緩存等機(jī)制來(lái)實(shí)現(xiàn)容器守護(hù)進(jìn)程間的同步問(wèn)題,最終有效減輕了大規(guī)模分布式存儲(chǔ)系統(tǒng)中容器鏡像共享競(jìng)爭(zhēng)問(wèn)題.Anwar等人[29]通過(guò)分析大量實(shí)際生產(chǎn)環(huán)境中的鏡像管理數(shù)據(jù),總結(jié)鏡像請(qǐng)求類(lèi)型分布、鏡像大小分布、各階段響應(yīng)時(shí)間、請(qǐng)求之間的關(guān)系、鏡像請(qǐng)求的空間和時(shí)間局部性等特征,設(shè)計(jì)緩存和預(yù)取策略,提高鏡像管理性能.
針對(duì)容器鏡像管理的研究對(duì)于容器的發(fā)展具有重要意義,現(xiàn)有的該方面研究剛處于起步階段,可能存在的研究問(wèn)題和挑戰(zhàn)將在第3節(jié)詳細(xì)闡述.
2) 容器編排
容器編排是指對(duì)容器完整生命周期包括容器準(zhǔn)備、部署和監(jiān)控等多個(gè)方面的自動(dòng)化管理.容器編排包括單主機(jī)的容器管理以及容器集群的管理.目前對(duì)于容器編排的研究已經(jīng)相對(duì)比較成熟并在工業(yè)界得到廣泛的應(yīng)用.
現(xiàn)有針對(duì)單主機(jī)環(huán)境下容器管理的研究使用戶對(duì)容器應(yīng)用的操作更加方便.例如當(dāng)需要部署一個(gè)Web應(yīng)用時(shí),首先需要啟動(dòng)數(shù)據(jù)庫(kù)容器,然后再啟動(dòng)應(yīng)用容器,最后可能還要啟動(dòng)反向代理容器.以上步驟需要3句命令才能部署而且不能把3個(gè)容器統(tǒng)一起來(lái)管理,使得部署和管理變得極為繁瑣.針對(duì)以上問(wèn)題,Docker Compose[30]實(shí)現(xiàn)了單主機(jī)多容器應(yīng)用的管理,它可以根據(jù)配置文件自動(dòng)構(gòu)建、管理、編排一組容器,為容器應(yīng)用的定義和運(yùn)行帶來(lái)極大的便捷.
以上研究很好地解決了單主機(jī)多容器的管理問(wèn)題,然而應(yīng)該如何高效地抽象和管理一個(gè)大規(guī)模的容器集群?Omega[31],Borg[32],Kubernets[44],Docker Swarm[45]以及Mesos[33]分別針對(duì)該問(wèn)題進(jìn)行研究,提出了高效的容器集群資源管理策略,實(shí)現(xiàn)了容器集群生命周期管理、動(dòng)態(tài)負(fù)載均衡、應(yīng)用配置管理、資源額度管理等功能,為容器集群的運(yùn)行提供了高效性和穩(wěn)定性.因?yàn)槿萜骷壕幣挪粚儆诓僮飨到y(tǒng)虛擬化架構(gòu)中容器管理的范疇,在此僅以業(yè)界目前最常用的Kubernets為例簡(jiǎn)介容器集群管理的現(xiàn)狀.Kubernets提出pod的概念來(lái)作為容器的邏輯單元.所有的容器均在pod中運(yùn)行,一個(gè)pod可以承載一個(gè)或者多個(gè)相關(guān)的容器,這些容器被共同部署和調(diào)度,由此簡(jiǎn)化對(duì)容器集群的管理.典型的Kubernets集群包含一個(gè)Master節(jié)點(diǎn)和多個(gè)Node節(jié)點(diǎn).Mater是控制集群的中心,上面運(yùn)行著多個(gè)進(jìn)程,包括面向用戶的API服務(wù)、負(fù)責(zé)維護(hù)集群狀態(tài)的Controller Manager、負(fù)責(zé)調(diào)度任務(wù)的Scheduler等.Node是提供CPU、內(nèi)存等資源的節(jié)點(diǎn),每個(gè)Node節(jié)點(diǎn)上運(yùn)行著維護(hù)Node狀態(tài)并和Master通信的kubelet,以及實(shí)現(xiàn)集群網(wǎng)絡(luò)服務(wù)的kube-proxy.綜上,Kubernets通過(guò)對(duì)容器進(jìn)行細(xì)致地組合,配合以上功能組件的使用,實(shí)現(xiàn)了簡(jiǎn)單高效的容器集群管理機(jī)制.
操作系統(tǒng)虛擬化內(nèi)核資源層的主要作用是對(duì)共享的CPU、內(nèi)存、網(wǎng)絡(luò)等系統(tǒng)資源進(jìn)行隔離,為上層容器的資源訪問(wèn)提供保障.具備良好的隔離性是促進(jìn)容器技術(shù)進(jìn)一步發(fā)展的基礎(chǔ).但是,容器隔離性是一個(gè)非常復(fù)雜的問(wèn)題,從不同角度來(lái)看,隔離性具有不同的涵義和要求[34].下面分別從資源隔離和安全隔離2個(gè)方面介紹操作系統(tǒng)虛擬化隔離性研究現(xiàn)狀.
1) 資源隔離
資源隔離主要是指統(tǒng)計(jì)和限制一個(gè)容器的資源消耗能力,從而為其他容器保證資源公平共享.在操作系統(tǒng)虛擬化環(huán)境中,最常用的資源隔離方法是使用Cgroup[6]資源管理框架.它是Linux內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源(如CPU、內(nèi)存、I/O等)的機(jī)制.Cgroup為資源管理提供一個(gè)統(tǒng)一的框架,現(xiàn)有CPU,memory,blkio等子系統(tǒng)分別負(fù)責(zé)相應(yīng)物理資源的管理,并且Cgroup也為未來(lái)開(kāi)發(fā)新的子系統(tǒng)提供接口.Cgroup為操作系統(tǒng)虛擬化提供了3項(xiàng)功能:①限制容器可以使用的資源數(shù)量,比如:memory子系統(tǒng)可以為容器設(shè)定一個(gè)memory使用上限,一旦容器應(yīng)用使用的內(nèi)存達(dá)到限額再申請(qǐng)內(nèi)存就會(huì)觸發(fā)OOM(out of memory);②記錄容器使用的資源數(shù)量,比如:可以使用cpuacct子系統(tǒng)記錄某個(gè)進(jìn)程組使用的CPU時(shí)間;③進(jìn)程組控制,比如:使用freezer子系統(tǒng)可以將容器掛起和恢復(fù).基于以上功能,容器能夠?qū)ξ锢碣Y源進(jìn)行精確的分配和調(diào)度.
在Cgroup出現(xiàn)之后,Laadan等人[35]探索了操作系統(tǒng)虛擬化在實(shí)現(xiàn)過(guò)程中存在的資源競(jìng)爭(zhēng)問(wèn)題,著重分析了針對(duì)進(jìn)程標(biāo)識(shí)符(PID)、文件系統(tǒng)等邏輯資源的競(jìng)爭(zhēng),但并未提出有效的解決方案.Mcdaniel等人[36]通過(guò)修改Docker API實(shí)現(xiàn)了容器對(duì)Cgroup中blkio子系統(tǒng)的訪問(wèn),設(shè)計(jì)了一個(gè)集群級(jí)和節(jié)點(diǎn)級(jí)的兩層控制方案,以完成容器集群中對(duì)容器I/O訪問(wèn)的簡(jiǎn)單隔離.也有一些開(kāi)源社區(qū)嘗試從容器引擎層面解決資源隔離問(wèn)題,例如LXCFS[46]試圖利用內(nèi)核的用戶態(tài)文件系統(tǒng)模塊在容器內(nèi)實(shí)現(xiàn)虛擬sys和proc文件系統(tǒng),以增強(qiáng)容器的資源視圖隔離性.
綜上所述,Cgroup資源管理框架是目前最常用的操作系統(tǒng)虛擬化資源隔離機(jī)制,并且能夠有效保證容器之間物理資源的公平共享.在Cgroup之后的研究工作著重對(duì)沒(méi)有得到Cgroup支持的資源進(jìn)行隔離需求分析或者簡(jiǎn)單隔離.
2) 安全隔離
安全隔離主要指限制容器對(duì)邏輯對(duì)象的訪問(wèn),例如文件、內(nèi)存地址空間、端口號(hào)、用戶標(biāo)志、進(jìn)程標(biāo)志等.例如,通過(guò)安全隔離,一個(gè)容器的文件命名不會(huì)與其他容器的文件沖突并且容器之間互相看不到文件或者進(jìn)程的信息,因此它們只能修改自己的數(shù)據(jù)和代碼,從而減少容器之間互相影響的可能性.
操作系統(tǒng)虛擬化環(huán)境下安全隔離最初始的實(shí)現(xiàn)是chroot命令[2],通過(guò)它可以實(shí)現(xiàn)文件系統(tǒng)隔離.但是在分布式環(huán)境下,容器必須要有獨(dú)立的IP、端口和路由等,自然就有了網(wǎng)絡(luò)隔離.同時(shí)容器還需要一個(gè)獨(dú)立的主機(jī)名來(lái)標(biāo)識(shí)自己,進(jìn)程通信隔離、權(quán)限隔離等也需要考慮到.Linux內(nèi)核提供的namespace[8]完整支持了以上容器所需的安全隔離.在同一個(gè)namespace下的進(jìn)程可以感知彼此的變化,但對(duì)外界的進(jìn)程一無(wú)所知.這樣就可以讓容器中的進(jìn)程感覺(jué)自己置身于一個(gè)獨(dú)立的系統(tǒng)環(huán)境中,以此達(dá)到配置獨(dú)立和安全隔離的目的.然而,在一些特定的應(yīng)用環(huán)境中,有些namespace隔離是不需要的,甚至?xí)?lái)額外的開(kāi)銷(xiāo).SOCK[18]通過(guò)實(shí)驗(yàn)分析無(wú)服務(wù)器架構(gòu)環(huán)境下namespace帶來(lái)的性能開(kāi)銷(xiāo),發(fā)現(xiàn)network namespace會(huì)為整個(gè)系統(tǒng)帶來(lái)額外的延遲,mount namespace會(huì)影響系統(tǒng)的可擴(kuò)展性.同時(shí),由于無(wú)服務(wù)器架構(gòu)本身的特性,network namespace不是必要的,mount namespace也可以用chroot代替,以此減少安全隔離帶來(lái)的性能開(kāi)銷(xiāo).
還有一些研究是利用體系結(jié)構(gòu)技術(shù)來(lái)輔助實(shí)現(xiàn)操作系統(tǒng)虛擬化安全隔離.Dune[37]提出了應(yīng)用程序直接訪問(wèn)底層硬件的想法.Nested kernel[38]采用嵌套內(nèi)核的方式來(lái)增強(qiáng)操作系統(tǒng)內(nèi)核的安全性.okernel[39]在以上2個(gè)研究的基礎(chǔ)上,通過(guò)嵌套內(nèi)核并利用擴(kuò)展頁(yè)表(extended page table, EPT)技術(shù),實(shí)現(xiàn)內(nèi)存地址空間的隔離.SCONE[40]為增強(qiáng)文件系統(tǒng)隔離和系統(tǒng)權(quán)限隔離,通過(guò)減少可信計(jì)算基以及抽象帶來(lái)的開(kāi)銷(xiāo),有效利用Intel SGX[47]技術(shù)保護(hù)容器,加強(qiáng)其隔離性.
由于容器安全隔離性較弱的根本原因是容器共用主機(jī)內(nèi)核,因此增強(qiáng)容器安全隔離性的另一種思路是阻斷容器內(nèi)應(yīng)用程序?qū)χ鳈C(jī)內(nèi)核的依賴(lài).一種方法是讓容器運(yùn)行在傳統(tǒng)虛擬機(jī)上,用虛擬機(jī)的良好安全隔離性來(lái)彌補(bǔ)容器安全隔離性的不足,現(xiàn)在主流的云計(jì)算平臺(tái)皆采用這種方式提供容器服務(wù)[41].但是,這種方式會(huì)造成冗余繁復(fù)的虛擬化資源管理,不僅增大了虛擬化的資源開(kāi)銷(xiāo),而且使得系統(tǒng)軟件棧復(fù)雜低效.Kata Containers[48]針對(duì)以上問(wèn)題,將容器運(yùn)行在一個(gè)優(yōu)化過(guò)的內(nèi)核之上,基于Intel VT技術(shù)提供對(duì)網(wǎng)絡(luò)、I/O、內(nèi)存等硬件資源的安全隔離,從而將虛擬化的安全隔離優(yōu)勢(shì)和容器的快速啟動(dòng)特點(diǎn)結(jié)合起來(lái).另一種方法是gVisor[49]在主機(jī)內(nèi)核之外實(shí)現(xiàn)了一個(gè)“內(nèi)核進(jìn)程”,提供了大部分Linux內(nèi)核的系統(tǒng)調(diào)用;然后通過(guò)在用戶空間內(nèi)攔截容器內(nèi)應(yīng)用程序系統(tǒng)調(diào)用并轉(zhuǎn)發(fā)至“內(nèi)核進(jìn)程”,以此阻斷容器內(nèi)的惡意代碼對(duì)主機(jī)內(nèi)核的訪問(wèn),增強(qiáng)安全隔離.
綜上所述,操作系統(tǒng)虛擬化的安全隔離主要依賴(lài)于Linux內(nèi)核中的namespace隔離機(jī)制,但是還存在較多缺陷.隨著體系結(jié)構(gòu)技術(shù)的發(fā)展,一些前沿的研究工作開(kāi)始探索利用體系結(jié)構(gòu)特征來(lái)增強(qiáng)操作系統(tǒng)虛擬化的安全隔離.工業(yè)界也針對(duì)虛擬機(jī)內(nèi)部嵌套容器存在的問(wèn)題開(kāi)展了系統(tǒng)優(yōu)化研究.
目前,關(guān)于操作系統(tǒng)虛擬化的研究雖然已經(jīng)取得了一定成果,但從實(shí)際應(yīng)用來(lái)說(shuō),還存在很多問(wèn)題需要研究,下面對(duì)其中的3個(gè)主要問(wèn)題進(jìn)行分析.
原本基于物理機(jī)或傳統(tǒng)虛擬機(jī)開(kāi)發(fā)的應(yīng)用,遷移到容器中運(yùn)行時(shí)會(huì)存在兼容性問(wèn)題.操作系統(tǒng)虛擬化技術(shù)由于其高效的性能得到了業(yè)界的青睞,越來(lái)越多的應(yīng)用運(yùn)行于容器中.然而,由于容器本質(zhì)上只是一個(gè)輕量級(jí)的隔離環(huán)境并且與其他容器共享同一個(gè)操作系統(tǒng)內(nèi)核,原本基于物理機(jī)或者傳統(tǒng)虛擬機(jī)開(kāi)發(fā)的應(yīng)用會(huì)在配置時(shí)出現(xiàn)兼容性問(wèn)題.出現(xiàn)應(yīng)用兼容性問(wèn)題的根本原因是容器內(nèi)應(yīng)用無(wú)法準(zhǔn)確地獲取資源視圖信息.例如在Linux主機(jī)環(huán)境下,應(yīng)用通過(guò)訪問(wèn)/proc和/sys虛擬文件系統(tǒng)即可獲得資源視圖信息;然而由于容器系統(tǒng)沒(méi)有獨(dú)立的OS內(nèi)核,容器內(nèi)應(yīng)用獲得的資源視圖實(shí)際上是主機(jī)的總體資源狀態(tài)信息,從而導(dǎo)致容器內(nèi)應(yīng)用做出錯(cuò)誤決策并對(duì)應(yīng)用性能造成嚴(yán)重影響.具體來(lái)說(shuō),以Java虛擬機(jī)(JVM)為例, JVM會(huì)根據(jù)所在環(huán)境的內(nèi)存量大小來(lái)決定其內(nèi)存管理策略,當(dāng)JVM運(yùn)行在容器中時(shí),由于沒(méi)有準(zhǔn)確的資源視圖,JVM經(jīng)常會(huì)申請(qǐng)超過(guò)容器資源限額的過(guò)量?jī)?nèi)存,從而產(chǎn)生大量的swap操作,嚴(yán)重影響運(yùn)行性能.所以,由容器內(nèi)應(yīng)用資源視圖信息不準(zhǔn)確引起的應(yīng)用兼容性問(wèn)題會(huì)在一定程度上制約操作系統(tǒng)虛擬化技術(shù)的發(fā)展.綜上,探索增強(qiáng)應(yīng)用兼容性的方法、擴(kuò)大容器應(yīng)用范圍,對(duì)于操作系統(tǒng)虛擬化的發(fā)展具有重要意義.
隨著操作系統(tǒng)虛擬化的廣泛應(yīng)用,不同的用戶對(duì)容器鏡像有不同的需求,基于容器鏡像的分層特性,每種需求都會(huì)增加一個(gè)鏡像層,因此出現(xiàn)了容器鏡像數(shù)量越來(lái)越多、容器鏡像體積越來(lái)越大的現(xiàn)象.當(dāng)容器鏡像不在本地時(shí),容器鏡像體積的增大會(huì)使得容器鏡像的拉取時(shí)間或者構(gòu)建時(shí)間變長(zhǎng).由于容器的部署時(shí)間大部分來(lái)自于容器鏡像的拉取或構(gòu)建,所以容器鏡像體積的變大會(huì)增加容器的啟動(dòng)部署時(shí)間并且增加磁盤(pán)空間占用.這些額外開(kāi)銷(xiāo)在邊緣計(jì)算等場(chǎng)景中會(huì)嚴(yán)重影響系統(tǒng)性能,甚至?xí)窒褂萌萜鲙?lái)的好處,失去快速迭代開(kāi)發(fā)和部署應(yīng)用的能力.但是對(duì)于某一特定應(yīng)用來(lái)說(shuō),并非所有的鏡像數(shù)據(jù)都是有用的,容器每一層鏡像中都存在一定的冗余數(shù)據(jù).綜上,輕量化容器鏡像的研究具有可行性,并且對(duì)容器技術(shù)的進(jìn)一步發(fā)展具有重要意義.
相比于傳統(tǒng)虛擬化技術(shù),現(xiàn)有操作系統(tǒng)虛擬化技術(shù)具有開(kāi)銷(xiāo)小、效率高等優(yōu)點(diǎn),但是由于多個(gè)容器共享同一個(gè)操作系統(tǒng)內(nèi)核,導(dǎo)致容器環(huán)境的隔離性相對(duì)虛擬機(jī)而言較弱[42].隨著服務(wù)器硬件性能的不斷增強(qiáng)和各種應(yīng)用逐步部署于操作系統(tǒng)虛擬化環(huán)境,不僅單一宿主機(jī)上的容器數(shù)量越來(lái)越多,而且面臨的應(yīng)用場(chǎng)景和需求也更加復(fù)雜多樣,容器部署的高密度和應(yīng)用的復(fù)雜性使得解決容器隔離性問(wèn)題的需求日益迫切.盡管隔離性問(wèn)題是容器領(lǐng)域的研究熱點(diǎn),獲得了工業(yè)界和學(xué)術(shù)界的廣泛關(guān)注,但是目前的研究成果非常有限,還存在以下諸多研究挑戰(zhàn)與重要機(jī)遇.
1) 統(tǒng)一的資源隔離模型
操作系統(tǒng)虛擬化資源隔離問(wèn)題涉及因素較多、復(fù)雜性高,目前缺乏較為完整統(tǒng)一的資源隔離模型.針對(duì)容器隔離性問(wèn)題,業(yè)界主要采用的解決思路是針對(duì)應(yīng)用特征進(jìn)行容器資源隔離性的完善,目前學(xué)術(shù)界的研究工作較多基于這種思路開(kāi)展.這種方式的問(wèn)題在于:僅依據(jù)某類(lèi)應(yīng)用的具體需求對(duì)操作系統(tǒng)內(nèi)核進(jìn)行修補(bǔ)和完善,一方面會(huì)增加操作系統(tǒng)的復(fù)雜性,使得內(nèi)核變得越來(lái)越笨重,難以實(shí)際推廣使用;另一方面缺乏具有通用性的整體解決思路,難以實(shí)現(xiàn)運(yùn)行環(huán)境的全面隔離,也無(wú)法滿足復(fù)雜應(yīng)用場(chǎng)景的需求.另外,在容器系統(tǒng)中,運(yùn)行環(huán)境隔離需要考慮一系列的系統(tǒng)資源.除了CPU、內(nèi)存、I/O等“硬資源”之外,容器運(yùn)行環(huán)境的隔離還需要考慮OS內(nèi)核中的一系列“軟資源”,包括進(jìn)程號(hào)(pid)、文件描述符(fd)、索引節(jié)點(diǎn)(inode)、套接字(socket)等.由于容器共享OS內(nèi)核,如果不對(duì)這些內(nèi)核軟資源的使用進(jìn)行隔離限制,可能會(huì)帶來(lái)意想不到的負(fù)面效果.例如,如果某個(gè)容器大量重復(fù)執(zhí)行創(chuàng)建文件的操作,消耗了主機(jī)上所有的fd或者inode資源,那么同一主機(jī)上的其他容器就無(wú)法再正常創(chuàng)建文件,這不僅影響應(yīng)用正常運(yùn)行,而且存在嚴(yán)重安全隱患.上述分析說(shuō)明,容器資源隔離是一個(gè)涉及諸多因素、諸多方面的復(fù)雜問(wèn)題,目前業(yè)界還缺乏清晰完整的隔離模型.因此設(shè)計(jì)簡(jiǎn)潔、高效、統(tǒng)一的容器資源隔離模型存在較大的研究前景.
2) 軟硬協(xié)同的資源隔離機(jī)制
計(jì)算機(jī)體系結(jié)構(gòu)技術(shù)的發(fā)展為解決操作系統(tǒng)虛擬化資源隔離問(wèn)題帶來(lái)了新的挑戰(zhàn)和機(jī)遇.隨著計(jì)算機(jī)體系結(jié)構(gòu)技術(shù)的發(fā)展,為了滿足云計(jì)算環(huán)境的需求,近年來(lái)陸續(xù)出現(xiàn)了一系列可對(duì)硬件資源進(jìn)行靈活管理配置的技術(shù).例如英特爾的RDT(resource director technology)技術(shù)[50]為管理配置主機(jī)的CPU cache和內(nèi)存帶寬提供了有效手段,Open-Channel SSD[51]為上層OS和應(yīng)用開(kāi)放了存儲(chǔ)設(shè)備的管理控制細(xì)節(jié)等.這些技術(shù)的出現(xiàn)和發(fā)展,使得“軟件定義”可以深入到數(shù)據(jù)中心基礎(chǔ)設(shè)施的底層,推動(dòng)了先進(jìn)的資源感知型編排管理技術(shù)的不斷發(fā)展,不僅提高了云計(jì)算環(huán)境的服務(wù)器資源利用率,保障了應(yīng)用服務(wù)質(zhì)量,而且深層次促進(jìn)了行業(yè)變革.體系結(jié)構(gòu)領(lǐng)域的上述發(fā)展趨勢(shì)為解決容器資源隔離問(wèn)題提供了很好的底層技術(shù)支持和研究契機(jī),如何充分利用新型體系結(jié)構(gòu)技術(shù)實(shí)現(xiàn)軟硬件協(xié)同的容器資源隔離機(jī)制,是一個(gè)具有前沿性和新穎性的研究問(wèn)題,具有較大研究空間.
操作系統(tǒng)虛擬化允許多個(gè)不同的應(yīng)用在共享操作系統(tǒng)內(nèi)核的環(huán)境中隔離運(yùn)行,作為一種輕量級(jí)虛擬化技術(shù),操作系統(tǒng)虛擬化在很多應(yīng)用領(lǐng)域都具有巨大的潛力.本文介紹了操作系統(tǒng)虛擬化的技術(shù)架構(gòu)層次,并通過(guò)與傳統(tǒng)虛擬化技術(shù)對(duì)比,總結(jié)其在啟動(dòng)速度、資源利用率等方面的優(yōu)勢(shì)以及隔離性的不足;隨后,分別從容器實(shí)例層、容器管理層和內(nèi)核資源層介紹了操作系統(tǒng)虛擬化應(yīng)用場(chǎng)景、性能分析、鏡像管理、容器編排和隔離性的研究現(xiàn)狀;最后,基于以上研究現(xiàn)狀分析了操作系統(tǒng)虛擬化依然存在的問(wèn)題和挑戰(zhàn),并展望了未來(lái)可能的研究方向.