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