超越Docker和Kubernetes:容器生態(tài)系統(tǒng)不斷發(fā)展
在過(guò)去幾年,容器走過(guò)了漫長(zhǎng)的道路–從利基技術(shù)發(fā)展成為部署現(xiàn)代云原生應(yīng)用和服務(wù)的關(guān)鍵平臺(tái),而隨著部署的增長(zhǎng),這個(gè)生態(tài)系統(tǒng)也在不斷發(fā)展。
容器作為一個(gè)概念其實(shí)已經(jīng)存在很多年,它一直是作為分配計(jì)算機(jī)資源的一種方法,這也是虛擬機(jī)的功能。
這兩者的區(qū)別是,虛擬化在裸機(jī)級(jí)別運(yùn)行,容器是從操作系統(tǒng)內(nèi)核交付,并且,本質(zhì)上為每個(gè)單獨(dú)應(yīng)用或代碼模塊提供單獨(dú)的執(zhí)行環(huán)境。
曾經(jīng)企業(yè)主要是使用虛擬機(jī),直到Docker給容器注入新生命力—通過(guò)將容器技術(shù)與工具相結(jié)合,使其成為敏捷開(kāi)發(fā)的理想工具。
由于容器比虛擬機(jī)更輕且速度更快,企業(yè)也喜歡使用容器來(lái)部署基于微服務(wù)的架構(gòu)和部署DevOps舉措。
自五年前Docker平臺(tái)推出以來(lái),容器生態(tài)系統(tǒng)已經(jīng)迅速擴(kuò)張。這是好事情,因?yàn)檫@項(xiàng)技術(shù)最初缺乏很多支持工具和功能(例如協(xié)調(diào)和負(fù)載均衡)–這些工具都圍繞虛擬機(jī)創(chuàng)建,這也促使開(kāi)發(fā)人員迅速填補(bǔ)這個(gè)空白。
構(gòu)建生態(tài)系統(tǒng)
我們看到,在編排方面,Kubernetes已經(jīng)在很大程度贏得了這場(chǎng)比賽。它不僅用于越來(lái)越多的內(nèi)部部署容器平臺(tái),而且所有主要云服務(wù)提供商提供容器服務(wù)時(shí)都將Kubernetes作為編排層。
與此同時(shí),支持容器的底層技術(shù)也建立了更多的標(biāo)準(zhǔn)化,這些技術(shù)包括容器運(yùn)行時(shí)(實(shí)際運(yùn)行容器的引擎)以及用于存儲(chǔ)和分發(fā)容器映像的文件格式。
在運(yùn)行時(shí)方面,在Linux基金會(huì)支持下成立的開(kāi)放容器倡議組織(OCI)負(fù)責(zé)對(duì)容器以及進(jìn)行監(jiān)督,并且,Docker貢獻(xiàn)了runc:基于其自身技術(shù)的參考部署,其中提供基本功能。
隨后Docker將runc整合到名為containerd的功能更豐富的運(yùn)行時(shí)中,以供自己使用,并將其提交給云原生計(jì)算基金會(huì)(CNCF),這是監(jiān)督Kubernetes的機(jī)構(gòu)。
Docker也在自己的產(chǎn)品中使用containerd。由于它包含runc,containerd仍然與OCI規(guī)范兼容。
在一段時(shí)間后,OCI成立了一個(gè)新的工作組,旨在為標(biāo)準(zhǔn)容器映像格式創(chuàng)建規(guī)范。Dcoker也參與到創(chuàng)建規(guī)范的工作中,并將產(chǎn)生的OCI格式整合到其自己的平臺(tái),作為Docker V2映像。
因此,容器運(yùn)行時(shí)和容器映像都開(kāi)始有自己的標(biāo)準(zhǔn)。所有容器運(yùn)行時(shí)最終都需要遵守OCI標(biāo)準(zhǔn),這意味著如果基礎(chǔ)設(shè)施的其他部分也兼容OCI的話(huà),則應(yīng)該可相對(duì)容易地混合和匹配來(lái)自不同來(lái)源的軟件組件作為容器部署的一部分。
解決容器安全難題
那些想要使用容器的企業(yè)非常關(guān)注容器的安全性,因?yàn)樗鼈儾⒉惶峁┨摂M機(jī)部署中虛擬管理程序?qū)崿F(xiàn)的實(shí)例之間的隔離級(jí)別。
這是因?yàn)樗性谥鳈C(jī)運(yùn)行的容器都是通過(guò)調(diào)用相同共享內(nèi)核來(lái)訪問(wèn)資源,這使得潛在漏洞可能影響所有容器。
目前容器領(lǐng)域正在試圖以不同方式解決這個(gè)問(wèn)題。例如,OpenStack支持的Kata容器項(xiàng)目最近發(fā)布了1.0版,它的策略是創(chuàng)建類(lèi)似于容器的輕量級(jí)虛擬機(jī)。
它通過(guò)使用遵守OCI規(guī)范的虛擬機(jī)管理程序來(lái)實(shí)現(xiàn)此目的,并將外部世界視為容器運(yùn)行時(shí)。該管理程序會(huì)創(chuàng)建一個(gè)輕量級(jí)虛擬機(jī),封裝最小的操作系統(tǒng)內(nèi)核和實(shí)際容器。
這與一些現(xiàn)有平臺(tái)整合容器支持的方式類(lèi)似。Pivotal Container Service(PKS)在VMware的vSphere或者谷歌Cloud Platform的虛擬機(jī)內(nèi)運(yùn)行容器,而亞馬遜的AWS運(yùn)行多個(gè)容器服務(wù),所有容器服務(wù)將容器放在EC2實(shí)例內(nèi)。
這些都是用標(biāo)準(zhǔn)虛擬機(jī)作為容器主機(jī),而Kata Containers似乎是用輕量級(jí)虛擬機(jī)偽裝作為容器運(yùn)行時(shí)。
與此同時(shí),谷歌已經(jīng)開(kāi)發(fā)出另一種解決方案來(lái)提高容器安全性,即通過(guò)gVisor開(kāi)源項(xiàng)目。在這里他們沒(méi)有使用虛擬機(jī)管理程序,而是充當(dāng)主機(jī)內(nèi)核和容器應(yīng)用之間的額外內(nèi)核。
gVisor內(nèi)核具有正常用戶(hù)級(jí)特權(quán),并可攔截來(lái)自應(yīng)用的系統(tǒng)調(diào)用,通過(guò)執(zhí)行該操作來(lái)為它們提供服務(wù)。換句話(huà)說(shuō),gVisor就像是代理或者緩沖層,阻止應(yīng)用直接訪問(wèn)主機(jī)內(nèi)核或者其他資源。
然而,gVisor和Kata Containers都帶來(lái)增加額外性能開(kāi)銷(xiāo)和潛在應(yīng)用兼容性問(wèn)題。對(duì)于gVisor更是如此,谷歌警告稱(chēng)它不會(huì)支持每次Linux系統(tǒng)調(diào)用。
另外,容器生態(tài)系統(tǒng)仍在繼續(xù)擴(kuò)張,第三方工具和平臺(tái)在不斷涌現(xiàn),以填補(bǔ)構(gòu)建容器基礎(chǔ)設(shè)施所需的缺失部分。
其中新工具可為特定工作負(fù)載提供持久性存儲(chǔ),例如StorageOS或者PortWorx。其他工具還提供監(jiān)視和高級(jí)網(wǎng)絡(luò)功能,有些工具則集中在構(gòu)建容器映像存儲(chǔ)庫(kù)。
另外,其他供應(yīng)商和項(xiàng)目專(zhuān)注于圍繞容器構(gòu)建平臺(tái)來(lái)創(chuàng)建交鑰匙式交付管道,以支持現(xiàn)代云原生應(yīng)用(例如CircleCl和GoCD)的整個(gè)構(gòu)建、測(cè)試和部署。
可以說(shuō),很多像亞馬遜這樣的云服務(wù)提供商已經(jīng)提供這種功能,而傳統(tǒng)平臺(tái)即服務(wù)產(chǎn)品(例如Red Hat的OpenShift)已經(jīng)變成圍繞容器的開(kāi)發(fā)者平臺(tái)。
不過(guò),目前容器可能不像虛擬機(jī)那樣成熟,特別是在管理和編排領(lǐng)域,但這個(gè)市場(chǎng)正在迅速發(fā)展,容器正成為云計(jì)算時(shí)代應(yīng)用開(kāi)發(fā)的***工具。