容器技術(shù)擁有快速擴(kuò)展、靈活性和易用性等諸多優(yōu)勢(shì),但是其并非適合應(yīng)用在所有環(huán)境當(dāng)中。
容器技術(shù)在傳統(tǒng)的虛擬化技術(shù)當(dāng)中引入了大量的最新發(fā)展趨勢(shì),比如云計(jì)算、在應(yīng)用程序開(kāi)發(fā)方面進(jìn)行的相應(yīng)調(diào)整以及像Docker這樣強(qiáng)大的新型容器架構(gòu)。在奧蘭多舉行的2015 Gartner IT運(yùn)維戰(zhàn)略和解決方案峰會(huì)上,Gartner副總裁兼著名分析師Thomas Bittman以容器技術(shù)為主題進(jìn)行了演講。Bittman的演講列舉了一些容器技術(shù)的優(yōu)勢(shì),但是同時(shí)也指出了其存在的很多缺陷。下面我們將逐個(gè)分析這些缺陷并且討論如何進(jìn)行解決。
1、不能應(yīng)用在所有場(chǎng)景當(dāng)中
Bittman認(rèn)為雖然容器技術(shù)擁有很強(qiáng)的兼容性,但是仍然不能完全取代現(xiàn)有的虛擬機(jī)環(huán)境。就像虛擬化技術(shù)剛剛出現(xiàn)的時(shí)候,一些傳統(tǒng)的應(yīng)用程序更加適合運(yùn)行在物理環(huán)境當(dāng)中一樣,現(xiàn)在,一些應(yīng)用程序并不適合運(yùn)行在容器虛擬化環(huán)境當(dāng)中。
比如,容器技術(shù)非常適合用于開(kāi)發(fā)微服務(wù)類(lèi)型的應(yīng)用程序——這種方式將復(fù)雜的應(yīng)用程序拆分為基本的組成單元,每個(gè)組成單元部署在獨(dú)立的容器當(dāng)中,之后將相關(guān)容器鏈接在一起,形成統(tǒng)一的應(yīng)用程序??梢酝ㄟ^(guò)增加新的組成單元容器的方式對(duì)應(yīng)用程序進(jìn)行擴(kuò)展,而不再需要對(duì)整個(gè)應(yīng)用程序進(jìn)行重新開(kāi)發(fā)。
但是另一方面,一些應(yīng)用程序只能以統(tǒng)一整體的形式存在——它們?cè)谧畛踉O(shè)計(jì)時(shí)就采用了這種方式,很難實(shí)現(xiàn)高擴(kuò)展性和快速部署等特性。對(duì)于這種情況來(lái)說(shuō),容器技術(shù)反而會(huì)對(duì)應(yīng)用負(fù)載造成限制。最好的檢驗(yàn)方式就是進(jìn)行大量試驗(yàn),查看哪種現(xiàn)有應(yīng)用程序能夠通過(guò)容器技術(shù)發(fā)揮最大優(yōu)勢(shì)。一般來(lái)說(shuō),新的應(yīng)用程序研發(fā)過(guò)程很可能從容器技術(shù)當(dāng)中獲益。而那些不能被容器化的應(yīng)用程序仍然可以運(yùn)行在傳統(tǒng)hypervisor的全功能虛擬機(jī)當(dāng)中。一位來(lái)自知名保險(xiǎn)提供商的IT架構(gòu)師表示應(yīng)該放緩應(yīng)用程序容器化趨勢(shì)。“雖然容器技術(shù)非常具有吸引力,但是軟件開(kāi)發(fā)團(tuán)隊(duì)需要一段時(shí)間及時(shí)跟進(jìn),才能夠真正地高效利用容器技術(shù)所帶來(lái)的優(yōu)勢(shì)。”
2、難以解決依賴(lài)關(guān)系問(wèn)題
大多數(shù)虛擬機(jī)都是相對(duì)獨(dú)立的,每臺(tái)虛擬機(jī)都包含自己的操作系統(tǒng)、驅(qū)動(dòng)和應(yīng)用程序組件。只要擁有合適的hypervisor,還可以將虛擬機(jī)遷移到其他任何虛擬化平臺(tái)當(dāng)中。但是對(duì)比來(lái)說(shuō),容器運(yùn)行在物理操作系統(tǒng)之上,相互之間共享大量底層的操作系統(tǒng)內(nèi)核、庫(kù)文件以及二進(jìn)制文件。Bittman進(jìn)一步解釋說(shuō)容器之間的現(xiàn)有依賴(lài)關(guān)系可能會(huì)限其在服務(wù)器之間的可移植性。比如,位于Linux操作系統(tǒng)上的Docker容器就不能運(yùn)行在當(dāng)前版本的Windows Server操作系統(tǒng)上。
對(duì)于這種問(wèn)題來(lái)說(shuō),當(dāng)前的解決方案并不止一種——容器可以在數(shù)秒鐘之內(nèi)完成復(fù)制過(guò)程,操作系統(tǒng)也在不斷發(fā)展,開(kāi)始提供“micro OS”和“nano OS”等多種類(lèi)型,提供了高穩(wěn)定性以及快速重啟等特性。從容器自身的角度來(lái)說(shuō)其更加適合于這些環(huán)境,只要數(shù)據(jù)中心當(dāng)中的其他服務(wù)器可用,仍然能夠?qū)ζ溥M(jìn)行遷移。
隨著操作系統(tǒng)的逐漸發(fā)展,這些依賴(lài)關(guān)系問(wèn)題也在不斷得到解決。比如,Windows Server 2016承諾同時(shí)支持Docker和原生Hyper-V容器。除了Docker之外,還有許多其他容器平臺(tái)可供選擇,比如LXC、Parallels Virtuozzo、Joyent、Canonical LXD、Spoon等等,VMware也有可能隨時(shí)加入到競(jìng)爭(zhēng)行列中來(lái)。
3、較差的隔離性
基于hypervisor的虛擬機(jī)擁有完善的隔離特性,由于系統(tǒng)硬件資源完全是虛擬的,由hypervisor分配給虛擬機(jī)使用,因此bug、病毒或者入侵有可能影響一臺(tái)虛擬機(jī),但是不會(huì)蔓延到其他虛擬機(jī)上。
容器的隔離性較差因?yàn)槠涔蚕硗粋€(gè)操作系統(tǒng)內(nèi)核以及其他組件,在開(kāi)始運(yùn)行之前就已經(jīng)獲得了統(tǒng)一的底層授權(quán)(對(duì)于Linux環(huán)境來(lái)說(shuō)通常是root權(quán)限)。因此,漏洞和攻擊更加有可能進(jìn)入到底層的操作系統(tǒng),或者轉(zhuǎn)移到其他容器當(dāng)中——潛在的傳播行為遠(yuǎn)比最初的事件更加嚴(yán)重。
盡管容器平臺(tái)也在不斷發(fā)展,開(kāi)始隔離操作系統(tǒng)權(quán)限、減少脆弱的安全特性等,但是Bittman仍然推薦管理員通過(guò)在虛擬機(jī)當(dāng)中運(yùn)行容器來(lái)提升安全性。比如,可以在Hyper-V當(dāng)中部署一臺(tái)Linux虛擬機(jī),在Linux虛擬機(jī)當(dāng)中安裝Docker容器。這樣即便虛擬機(jī)當(dāng)中的容器出現(xiàn)問(wèn)題,這種漏洞也只存在于當(dāng)前虛擬機(jī)當(dāng)中——限制了潛在的受攻擊范圍。
4、潛在的蔓延問(wèn)題
就像虛擬機(jī)生命周期管理對(duì)于hypervisor環(huán)境來(lái)說(shuō)十分重要一樣,生命周期管理對(duì)于容器來(lái)說(shuō)也是至關(guān)重要的。容器可以被大量快速?gòu)?fù)制,這是容器技術(shù)的重要優(yōu)勢(shì)之一,但是也有可能在管理員沒(méi)有注意到的情況下消耗大量計(jì)算資源。如果應(yīng)用程序所在的容器不再使用時(shí)能夠被及時(shí)刪除,那么情況還不算太壞。但是如果對(duì)一個(gè)容器化應(yīng)用程序進(jìn)行擴(kuò)展之后忘記將其縮減回之前的規(guī)模,那么將會(huì)為企業(yè)帶來(lái)大量的(并且不必要的)云計(jì)算開(kāi)銷(xiāo)。Bittman還表示云提供商十分高興看到這種情況發(fā)生——因?yàn)樗麄兙褪峭ㄟ^(guò)出租計(jì)算資源而獲利的——因此用戶(hù)需要自己關(guān)注容器的部署情況。
5、缺乏工具
對(duì)于這個(gè)行業(yè)來(lái)說(shuō),用于監(jiān)控和管理容器的工具種類(lèi)仍然十分缺乏。這并不是一種最近產(chǎn)生的現(xiàn)象,在基于hypervisor虛擬化的早期也曾經(jīng)出現(xiàn)過(guò)可用工具十分匱乏的情況。就像優(yōu)秀的虛擬機(jī)監(jiān)控和管理工具逐漸增多一樣,容器管理領(lǐng)域也在不斷出現(xiàn)新的工具。其中包括谷歌的開(kāi)源Docker管理工具Kubernetes,此外DockerUI使用基于web的前端界面替換Linux的命令行功能,Logspout能夠?qū)⑷萜魅罩緟R集到一個(gè)集中位置。
Bittman建議管理員可以通過(guò)將容器運(yùn)行在虛擬機(jī)當(dāng)中緩解容器管理工具缺乏的問(wèn)題,這樣就可以使用虛擬機(jī)工具來(lái)完成一些監(jiān)控和管理功能了。因?yàn)樘摂M機(jī)工具更加成熟和多樣化,因此在容器工具逐漸成熟之前,可以將其作為臨時(shí)的替代產(chǎn)品。
Bittman對(duì)于容器技術(shù)充滿(mǎn)熱情,認(rèn)為其能夠快速交付輕量級(jí)的應(yīng)用程序,提升資源使用效率和擴(kuò)展性;容器自身(非虛擬化I/O)還能夠?qū)崿F(xiàn)更好的性能表現(xiàn);已經(jīng)擁有像Docker這樣優(yōu)秀的開(kāi)發(fā)架構(gòu),像GitHub這樣吸引廣泛關(guān)注的共享和協(xié)作平臺(tái)。但是容器并不是一種能夠滿(mǎn)足所有虛擬化任務(wù)的解決方案,只是虛擬化工具箱提供的另外一種工具——通??梢院蛡鹘y(tǒng)虛擬機(jī)很好地協(xié)同工作。