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