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