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