當人們討論雲計算時,經常會提及兩個術語:虛擬機和容器。在多雲時代尤其如此,因為組織的跨平臺戰略至關重要。

虛擬機和容器這兩種技術也有共同點:都是軟件技術,都在虛擬化環境中運行。但它們在操作、大小、管理、用例和其他因素上有所不同。

以下對虛擬機和容器進行一下比較:

虛擬機:一個獨立的實例

虛擬機是操作系統的整個實例,通常是Windows或Linux,位於服務器內存的獨立部分與系統的其餘部分相隔離。

整合任務

虛擬機利用CPU中的高內存容量和多個核心處理器將許多應用程序和任務整合到一個物理硬件上。當虛擬化在十年前首次應用時,這就是它的主要用途。

安全運營的未來

當時,數據中心運營商將應用程序和任務從10個或更多單實例服務器移動到一個虛擬化物理服務器上的情況並不少見。這是效率的一大進步。

成熟的技術

所有主要的虛擬機管理程序供應商(例如VMware、Microsoft、Citrix和Red Hat)都提供自己的虛擬機品牌。該技術非常成熟。

例如,如果物理服務器發生故障,管理程序將自動將其上運行的虛擬機移動到另一個物理服務器,而無需任何人工干預。十年前,工作人員必須人工完成這項工作。

虛擬機還提供硬件抽象層(HAL),因此開發人員可以編寫應用程序,而無需擔心與底層硬件的兼容性。

容器:只用於移動所需的東西

容器加載的內核和運行時代碼足以在容器中運行應用程序,而不是像虛擬機那樣加載完整的Windows或Linux實例。這種更輕的框架使它們足夠靈活,可以在操作環境之間輕鬆移動。

主要採用Linux

容器只包含一個應用程序和足夠的操作系統來執行該應用程序,因此需要對核心操作系統進行一些額外的削減,以適應容器較小的佔用空間。因此,容器主要是一種Linux現象,因為它是開放源代碼和可修改的。微軟確實提供Windows容器,但它們比Linux容器更新,而不是一種成熟的技術。

編排平臺

由於容器結構小巧,結構簡單,因此需要對容器進行管理。這是通過所謂的編排平臺完成的。容器編排管理容器的生命週期,因為它們經常比虛擬機更頻繁地啟動和關閉。

編排可以(但不限於)提供和部署容器、可用性和故障轉移、擴展或刪除容器、在發生崩潰或重載時將容器移動到新主機,以及其他資源分配。

首先推出的是Docker,它擁有用於容器管理的Swarm平臺。還有Apache基金會的Mesos和Marathon,它們比Swarm複雜一點。

容器編排的黃金標準是Google的Kubernetes。它在DevOps環境中變得流行,用於提供從開發人員抽象硬件層的平臺即服務。它也非常便攜,可在谷歌雲平臺、亞馬遜網絡服務、微軟Azure和本地數據中心上運行。

虛擬機與容器:關鍵區別

大小

虛擬機和容器之間的主要區別在於大小。一個容器可以小到10MB,而虛擬機可以大到幾GB。顯然這會影響內存,而相同的物理服務器可以容納比虛擬機更多的容器。

結構

這兩種技術的結構存在顯著差異。虛擬機完全包含在內,具有操作系統的所有部分,並在硬件支持下運行。容器需要一個底層操作系統,它使用虛擬內存支持進行隔離,為所有容器化應用程序提供基本服務。所以組織需要一個完整的操作系統,無論運行虛擬機或容器,它只是一個結構。當操作系統在虛擬機中時,將在容器層下運行。

它們一起工作

由於它們的性質不同,容器和虛擬機並不會相互競爭,並且可能互相配合。組織可以在複雜的企業中使用它們,將虛擬機用於更大、更復雜的應用程序,以及用於小型、簡單、單一用途應用程序的容器。

虛擬機和容器的優缺點

虛擬機提供更多資源

虛擬機比容器具有更多優點。因為組織使用的是完整的操作系統,而不是自定義的削減版本,所以組織可以充分利用操作系統。這意味著所有操作系統資源都可用,並且擁有一整套管理和安全工具。簡而言之,組織擁有完整的操作系統,無論是Windows、Red Hat、Ubuntu,還是其他版本的Linux。

虛擬機需要更長的啟動時間

當然,虛擬機的缺點之一是規模大。在資源受限的服務器上,這將是限制性的因素。由於具有大小差異,虛擬機可能需要幾分鐘才能啟動,而容器化應用程序幾乎可以立即啟動。這意味著容器可以在需要時加載,然後在不再需要時關閉,從而釋放主機上的資源。

虛擬機的安全挑戰

理論上,安全性可能是公共雲上的問題,因為組織與其他客戶共存,並且不知道他們是誰,或不知道管理雲平臺的員工是誰。人們一直擔心他人會在虛擬機中窺探,會從那裡提取信息或數據。

但安全的主要風險更可能是事故。例如,組織可以在AWS上啟動具有完全加密或其他安全保護的虛擬機。但是由於進程過載,組織的虛擬機將被移動到另一個服務器,甚至另一個物理位置,並且不會保證安全。這可以通過進行適當和重複的安全檢查來緩解。

另一個潛在的安全問題是虛擬機的無序擴展,這是一種常見的現象。在這種情況下,用戶會關閉許多虛擬機,而不會關閉原來打開的虛擬機。然後,組織會面臨打開過多虛擬機的風險,而這些虛擬機其實是可以有效管理的。也許並不是所有的安全補丁都被應用。這是一個管理問題,而不是技術問題,所以這取決於組織來防止這個問題,而不是雲計算提供商。

容器和通信控制

對於容器來說,在某些情況下,所有容器都可以默認相互通信。這意味著如果惡意用戶或程序控制了一個容器,它就可以控制所有容器。開發人員應該只允許絕對需要它的容器之間的相互通信,並限制它們允許的通信類型。

由於組織在容器中創建自己的操作環境,所以需要執行內核級修補,並將所有更新應用於操作環境,這會增加組織的工作負載。需要為容器制定某種修補策略並加以實施。

容器和Linux子系統

由於容器不包含完整的操作系統,因此它們可以訪問許多Linux內核子系統。Docker使用libcontainers作為其容器技術,並訪問容器外的重要命名空間。因此,在容器中擁有完全權限的任何人都可以訪問底層操作系統,因此,開始在容器外部進行探索,也許可以窺探其他容器。解決此問題的方法是對容器進行非常仔細和徹底的配置,以確保它們被鎖定。

虛擬機和容器用例

儘管它們有相似之處,但容器和虛擬機之間存在根本的使用差異。虛擬機適用於虛擬環境,而容器不需要虛擬機管理程序並使用它們運行的底層操作系統。

虛擬化環境

在虛擬化環境中,組織在管理程序上運行多個操作系統,該管理程序在一臺計算機上管理I/O。在容器化環境中,它不是虛擬化的,也不使用管理程序。這並不是說組織不能在虛擬機中運行容器。但這不是最有效的方法。

因此,儘管容器運行在單個操作系統實例上,也就像小型虛擬化一樣,因為組織可以在一個物理系統上運行數十個或數百個容器。它是沒有虛擬機管理程序的虛擬化,這可能是一件好事。這是因為管理程序受到性能限制,並且還可能阻止訪問服務器中的某些組件,例如網絡控制器。

DevOps

這是DevOps環境更喜歡容器進行開發測試構建的主要原因之一。它們的容器比虛擬機執行速度快,並且可以更好地訪問系統資源。

容器的主要優點是體積小,能夠在服務器上運行數百甚至數千個,而不是幾十個虛擬機。這取決於容器的另一個優勢:它們在虛擬機上的模塊化程度更高。應用程序可以在一個稱為微服務的技術中分成多個容器。顯然,容器和微服務可以很好地協同工作。這種組合有助於隔離問題和任何潛在的崩潰或瓶頸。如果問題是一個大型的單一的應用程序,那麼解決本地化問題要容易得多。

更安全的環境

虛擬機是更安全環境的理想選擇,因為虛擬機中包含所有內容。容器經常必須與底層操作系統或其他容器通信,這可能帶來安全風險。在虛擬機中,一切都在同一個孤島中。因此,如果組織需要一個完全孤立的、隔離的操作環境,那麼採用虛擬機就是解決問題的方法。

老舊系統

虛擬機還允許託管舊版本的操作系統。例如,多年前為舊操作系統編寫的應用程序可能無法在新一代操作系統中運行,並且組織可能沒有使其資源實現現代化。因此,在虛擬機中運行舊操作系統,讓應用程序保持不變。

未來

容器在技術上需要更多的工作才能達到成熟,儘管技術正在快速發展。而虛擬機更加成熟,並且由於其性質,將會更安全且更易於管理。

容器技術(特別是其安全性)仍在不斷髮展。它還需要在負載平衡、可信連接以及在完整的操作系統中成熟的其他領域進行改進。這是當組織使用操作系統並將其減少到幾兆字節時會發生的情況。

展望未來,預計Docker和谷歌公司的容器產品將會更加成熟,而虛擬機將繼續專注於跨服務器的性能和可遷移性。無論如何,這兩種技術將繼續在雲計算中發揮關鍵作用。

相關推薦

推薦中...