虛擬機和容器是最常見的兩種抽象形式,但這兩者之間有什么區別呢?我們一起來看一下。
服務器虛擬化
如今,大多數企業將每臺服務器用于一個特定的任務或者應用程序,因為這些不同的應用或者程序并不適用于同一個系統中,但問題是,但多數服務器在運行計算時只會使用他們整體處理能力的一小部分,不能充分利用服務器的處理能力。
虛擬化就解決了這個問題,將多臺服務器整合到一臺服務器中,運行多個虛擬環境,每個VM都有自己的操作系統(這些操作系統可以是不同的),可以在其上安裝應用程序。
虛擬機的設計原理彼此間是隔離的,并且與虛擬主機隔離,這意味著一個應用程序中的安全問題不會影響在另一個虛擬機中運行的另一個應用程序。同樣,如果一個應用程序崩潰并需要重新啟動服務器,那么可以重新啟動它的VM,而不影響任何其他VM的運行。不過,這種隔離偶爾也可能被打破——這種現象稱為VM逃逸。
虛擬化還有利于可擴展性,因為VM是可移植的,例如,可能存在這樣一種情況:兩個應用程序在一個虛擬主機上的VM中運行,但是其中一個應用程序需要更多的資源,以至于這兩個VM不能再在同一主機上共存。
如果沒有虛擬化,將一個應用程序移動到一個新服務器將是一項艱巨的任務。但是VM是以計算機文件的形式存在的,因此這個文件可以很容易地通過網絡(甚至通過存儲介質)復制或移動到新的虛擬主機上。事實上,VMware的vMotion和微軟的Live Migration等特性甚至允許虛擬機在運行時將其移動到新的主機,以確保它們所提供的服務不會中斷。
除此之外,這對災難恢復來說也有重要意義。如果發生災難,虛擬機可以轉移到輔助站點,且無需鏡像主站點。基本上需要的只是在輔助站點上有足夠數量的虛擬主機。
Hypervisor是一種運行在基礎物理服務器和操作系統之間的中間軟件層,可允許多個操作系統和應用共享硬件(有時也稱為虛擬機監視器)。這可以是“裸機”hypervisor(也稱為Type 1 hypervisor),例如包含自己的OS內核并直接在物理服務器上運行的VMware ESXi,也可以是內置于操作系統中的hypervisor(也稱為Type 2 hypervisor),例如在Windows Server和Windows 10上運行的Microsoft的Hyper-V。
IBM在20世紀60年代開發了第一個hypervisor,如今流行的hypervisor包括Hyper-V、ESXi、KVM和Nutanix AHV。
容器
與虛擬化相反,容器主機需要運行自己的操作系統以及容器系統。
容器由單個應用程序(或微服務)以及需要運行的其他重要文件組成,利用容器主機的操作系統內核、二進制文件和庫來運行。這些共享文件作為只讀文件公開給容器。在容器主機上運行的其他容器也共享主機的內核、二進制文件和庫。
由于容器比虛擬機“輕”得多,并且啟動速度也快得多,這也使得它們成為運行微服務的理想工具,當對微服務的需求擴大時,可以啟用容器,當需求減少時可以刪除。它們也可以在公有云和私有云以及傳統數據中心之間輕松移動。
目前最受歡迎的容器環境是Docker,其他還有rkt,Apache Mesos,lxc,containerd, Hyper-V Containers, and Windows Server Containers。
諸如Red Hat的Fedora CoreOS之類的專用操作系統是專門為安全、大規模地運行容器化工作負載而構建的。
虛擬機與容器
由于多個容器之間使用的還是同一個宿主機的操作系統內核,因此導致了容器與虛擬機之間存在一些重要區別:
容器比虛擬機小得多或“輕”得多,通常由幾兆字節組成,并且所需的硬件資源也少得多。這意味著一臺物理服務器可以承載的容器比虛擬機要多得多。
容器可以在幾秒甚至幾毫秒內啟動。相比之下,虛擬機的啟動時間比較長。
由于容器都共享其主機的操作系統,因此所有應用程序都必須在同一操作系統上運行。相比之下,運行在虛擬主機上的虛擬機可以運行不同的操作系統(例如Linux,Unix和Windows)。
使用容器時,只需要對容器主機的操作系統進行補丁和更新。而虛擬機則需對每個操作系統都進行補丁和更新。
如果一個容器導致容器主機的操作系統崩潰,則在該主機上運行的所有容器都將失敗。
容器主機的操作系統內核中的安全漏洞將影響其所托管的所有容器。
虛擬機和容器的使用場景
虛擬機非常適合傳統的資源密集型單片應用程序,尤其是準備將這些應用程序移至云中時。
容器更適合承載Web服務中使用的微服務,特別是在對可擴展性要求很高的情況下。當以這種方式使用容器時,通常由容器編排系統對其進行管理,以自動執行計算機應用程序的部署、擴展和管理。這些通常基于Kubernetes,Kubernetes是最初由Google設計但現在由云原生計算基金會維護的開源系統。
不僅如此,容器和虛擬機也可以共存,容器可以在虛擬機中運行,企業可以利用現有的虛擬化基礎設施(例如虛擬機管理系統)來管理其容器。
責編AJX
評論
查看更多