許多人認(rèn)為在容器和虛擬機(jī)之間只能選擇其中一種,但事實(shí)并非如此——下面將詳細(xì)介紹其中的原因。
IT專家一直在嘗試解決一個(gè)問(wèn)題:應(yīng)該怎樣在容器和虛擬機(jī)之間做出選擇,而現(xiàn)在的解決方案是同時(shí)使用兩種技術(shù)。
虛擬機(jī)和容器技術(shù)是實(shí)現(xiàn)虛擬化的兩種不同方式,二者都能夠?qū)崿F(xiàn)多種應(yīng)用程序共享相同硬件資源,但是其技術(shù)特點(diǎn)、優(yōu)勢(shì)以及劣勢(shì)卻完全不同,這周Container World的與會(huì)者尤為深刻地感受到了這一點(diǎn)。
從易于使用和自動(dòng)化的角度來(lái)看,容器技術(shù)似乎更加占據(jù)優(yōu)勢(shì)。
“相比于虛擬機(jī),容器技術(shù)要簡(jiǎn)單的多,”服務(wù)器虛擬化提供商Odin的前CTO James Bottomley表示,他同時(shí)也是一名Linux內(nèi)核維護(hù)人員。“虛擬機(jī)使得流程控制問(wèn)題變得更加復(fù)雜。”
的確,在某些情況當(dāng)中虛擬機(jī)能夠滿足企業(yè)在控制和安全方面的需求,谷歌的高級(jí)工程師兼Kubernetes的首席工程師Brenden Burns表示, Kubernetes是谷歌針對(duì)Docker容器推出的開源集群管理器。他說(shuō),“內(nèi)核調(diào)優(yōu)需要在虛擬機(jī)當(dāng)中進(jìn)行。”
總體來(lái)說(shuō),谷歌在沒有使用虛擬機(jī)的情況下依然能夠?qū)崿F(xiàn)內(nèi)部系統(tǒng)的高效運(yùn)行,谷歌并沒有依賴于容器技術(shù)和Borg(Borg是谷歌內(nèi)部自行研發(fā)的容器管理系統(tǒng),也就是Kubernetes的前身)。在Google Compute Engine發(fā)布之后,基礎(chǔ)架構(gòu)即服務(wù)(IaaS)使得谷歌迅速進(jìn)入了服務(wù)器虛擬化領(lǐng)域。
但是在某些情況下,必須一套系統(tǒng)當(dāng)中同時(shí)使用容器和虛擬機(jī)。比如Netflix,雖然將所有基礎(chǔ)架構(gòu)都運(yùn)行在以虛擬機(jī)為基礎(chǔ)的AWS(Amazon Web Services)當(dāng)中,但是在上層仍然需要使用容器技術(shù)。Netflix的平臺(tái)技術(shù)經(jīng)理Tim Bozarth表示,這樣做主要出于兩種原因:規(guī)范開發(fā)者體驗(yàn)并且降低運(yùn)營(yíng)開銷,
“開發(fā)人員說(shuō),‘我所需要詳細(xì)說(shuō)明的就是為何要運(yùn)行某個(gè)進(jìn)程——而不是思考它該如何兼容一臺(tái)適用于所有環(huán)境的虛擬機(jī),’”Bozarth說(shuō),這導(dǎo)致了“基礎(chǔ)架構(gòu)的透明化。”
如果能夠?qū)崿F(xiàn)容器封裝格式的標(biāo)準(zhǔn)化,那么從開發(fā)人員筆記本電腦到生產(chǎn)環(huán)境的持續(xù)性開發(fā)和云部署也將變?yōu)榭赡堋?/p>
同時(shí),運(yùn)維部門不希望自己管理這些集群。
“這絕對(duì)是一項(xiàng)非常繁重的任務(wù),”Bozarth表示。如果使用容器技術(shù),他們可以使用集群管理系統(tǒng)來(lái)實(shí)現(xiàn)資源分配和負(fù)載定位。
綜合來(lái)說(shuō),容器技術(shù)為NetFlix帶來(lái)的這兩種好處“足夠說(shuō)服其選擇使用容器技術(shù),并且在基礎(chǔ)架構(gòu)當(dāng)中進(jìn)行底層變動(dòng),”他說(shuō)。得益于系統(tǒng)密度的提升,Netflix獲得了之前從未擁有過(guò)的運(yùn)營(yíng)性能方面的優(yōu)勢(shì)。
“我們向亞馬遜支付了大量費(fèi)用,”他說(shuō)。“如果能節(jié)省一點(diǎn)當(dāng)然很好——但是這并不是我們考慮的主要因素。”
另外一個(gè)應(yīng)該關(guān)注的重點(diǎn)是運(yùn)行哪種類型的容器——應(yīng)用程序容器(Docker)還是操作系統(tǒng)或者機(jī)器容器(Solaris Zones 或 FreeBSD Jails)。應(yīng)用程序容器通常只包含一個(gè)單獨(dú)進(jìn)程,非常適合于無(wú)狀態(tài)化的、以微服務(wù)為基礎(chǔ)的應(yīng)用程序。而系統(tǒng)容器則會(huì)啟動(dòng)整個(gè)操作系統(tǒng),通常被用于運(yùn)行狀態(tài)化應(yīng)用程序,比如數(shù)據(jù)庫(kù)等,任職于Ubuntu產(chǎn)品和戰(zhàn)略團(tuán)隊(duì)的Dustin Kirkland表示。
無(wú)論企業(yè)更喜歡使用哪種格式,容器也不會(huì)完全取代虛擬機(jī),CoreOS公司CEO Alex Polvi表示,其是Rocket容器格式的創(chuàng)造者,這是一種基于Kubernetes的容器管理系統(tǒng)。
“這就好像是說(shuō)Puppet將會(huì)替代虛擬機(jī)一樣——從根本上來(lái)說(shuō)它們并不屬于相同種類,”他說(shuō)。
最后,不要憑空思考應(yīng)該使用哪種技術(shù)——還要綜合考慮你的設(shè)計(jì)目標(biāo),社交協(xié)作軟件公司Lithium Technologies的云平臺(tái)團(tuán)隊(duì)主管Lachlan Evenson建議。
“一切都要以需要解決什么問(wèn)題為基礎(chǔ)。如果沒有問(wèn)題,那么就不要進(jìn)行變動(dòng)。”