Hypervisor技術(shù)從一開始就是云計(jì)算的基石之一。然而,,近年來容器技術(shù)的爆發(fā),,讓這種虛擬化技術(shù)開始被認(rèn)為是傳統(tǒng)方法。 有不少人認(rèn)為,,容器的普及對(duì)虛擬機(jī)形成了沖擊,,于是就有了早些年的容器與虛擬機(jī)之爭。 經(jīng)過幾年的技術(shù)發(fā)展和大規(guī)模實(shí)踐,,雖然許多企業(yè)正在將基于虛擬機(jī)的應(yīng)用程序遷移到容器,,但事實(shí)上虛擬機(jī)在數(shù)據(jù)中心和公有云中仍然普遍存在。 一方面,,容器并沒有完全替代虛擬機(jī),,另一方面虛擬機(jī)也在積極支持容器,兩者共存的情形反而越來越普遍,。 今天就來聊聊虛擬機(jī)和容器到底有什么區(qū)別,,為什么兩者會(huì)走向共存,以及將來會(huì)走向何方,? 虛擬機(jī)和容器各有優(yōu)勢 虛擬機(jī)和容器誕生的初衷,,都是為了更好的提高資源利用率,但兩者的區(qū)別在于:虛擬機(jī)是操作系統(tǒng)級(jí)別的資源隔離,,而容器本質(zhì)上是進(jìn)程級(jí)的資源隔離,。 虛擬機(jī)(Virtual Machine),是指通過軟件模擬的具有完整硬件系統(tǒng)功能的,、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng),。每個(gè)虛擬機(jī)都有獨(dú)立的CMOS、硬盤和操作系統(tǒng),,可以像使用實(shí)體機(jī)一樣對(duì)虛擬機(jī)進(jìn)行操作,。 虛擬機(jī)的運(yùn)行離不開Hypervisor,Hypervisor是運(yùn)行在基礎(chǔ)物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,,可允許多個(gè)操作系統(tǒng)和應(yīng)用共享硬件,。 簡單來說,服務(wù)器硬件,、Hypervisor,、虛擬機(jī)之間的關(guān)系在于,每個(gè)虛擬機(jī)都有一個(gè)完整的操作系統(tǒng),,虛擬機(jī)內(nèi)部署的應(yīng)用可以使用整個(gè)操作系統(tǒng)的資源,。 虛擬機(jī)的出現(xiàn),,解決了早期在物理服務(wù)器上部署應(yīng)用但無法為其應(yīng)用程序定義資源邊界而導(dǎo)致的資源分配問題。 但是在使用虛擬化一段時(shí)間后,,會(huì)發(fā)現(xiàn)它存在一些問題,,例如:虛擬機(jī)的系統(tǒng)層會(huì)占用比較多物理機(jī)的資源,需要更進(jìn)一步提高服務(wù)器的資源利用率,;當(dāng)需要遷移虛擬機(jī)服務(wù)程序時(shí),,需要遷移整個(gè)虛擬機(jī),遷移流程復(fù)雜,。 為了解決這些問題,,容器就出現(xiàn)了。 容器技術(shù),,可以理解為操作系統(tǒng)虛擬化技術(shù),,它是一種輕量級(jí)的虛擬化技術(shù)。 通過內(nèi)核創(chuàng)建多個(gè)虛擬的操作系統(tǒng)實(shí)例(內(nèi)核和庫),,來隔離不同的進(jìn)程(容器),,不同的實(shí)例相互隔離,相互之間完全無感知,??梢院唵蔚乩斫鉃槿萜骶褪且粋€(gè)進(jìn)程沙盒,來提供進(jìn)程級(jí)的隔離,。 相比于虛擬機(jī),,容器沒有自己的操作系統(tǒng),而是通過容器引擎來實(shí)現(xiàn)共享宿主機(jī)操作系統(tǒng)內(nèi)核,,從而減少需要運(yùn)行多個(gè)操作系統(tǒng)的開銷,。 作為一個(gè)標(biāo)準(zhǔn)的軟件單元,容器將應(yīng)用部署所需的代碼和依賴項(xiàng)打包為鏡像,,可以快速可靠地從一個(gè)計(jì)算環(huán)境運(yùn)行到另一個(gè)環(huán)境,。 因此,容器最大的優(yōu)勢在于,,它啟動(dòng)時(shí)間很快,,可以達(dá)到秒級(jí),而且對(duì)資源的利用率很高,,如:一臺(tái)主機(jī)可以同時(shí)運(yùn)行幾千個(gè)Docker容器,。此外,它占的空間很小,,虛擬機(jī)一般要幾GB到幾十GB,,而容器只需要MB級(jí)甚至KB級(jí)。 總的來說,,容器和虛擬機(jī)具有相似的資源隔離和分配優(yōu)勢,,但功能不同。容器虛擬化的是操作系統(tǒng)而不是硬件,,因此容器更加輕便高效,。 但是如果用戶需要使用在不同操作系統(tǒng)上運(yùn)行的不同應(yīng)用程序,虛擬機(jī)就能提供可靠的解決方案和更好的安全性,。 因此,,如今最有效和最常用的策略是,擁有一臺(tái)具有多個(gè)虛擬機(jī)的物理機(jī),,每個(gè)虛擬機(jī)都有多個(gè)容器,。容器和虛擬機(jī)一起使用,為部署和管理應(yīng)用提供了極大的靈活性,。 虛擬機(jī)和K8s相互融合 可以看到,,容器和虛擬機(jī)根本就存在誰取代誰,而是相互融合的狀態(tài),。這也帶來了新的問題,,即如何同時(shí)管理虛擬機(jī)和容器技術(shù),成為企業(yè)的一個(gè)普遍的需求,。 作為虛擬化技術(shù)的最主要推手,,VMware很早就做出了反映。此前VMware通過在虛擬化平臺(tái)上外掛PKS(Pivotal與VMware共同推出的一個(gè)K8s平臺(tái)),,來實(shí)現(xiàn)虛機(jī)與容器的同時(shí)管理,。但畢竟是外掛,其效率和管理方便性上都有不足,。 去年的VMworld大會(huì)上,,VMware發(fā)布Tanzu 品牌計(jì)劃,宣布在虛擬化技術(shù)中原生地提供對(duì)容器技術(shù)的支持,。 VMware的Tanzu把虛擬機(jī)和K8s結(jié)合起來,,對(duì)虛擬機(jī)和容器以及物理機(jī)統(tǒng)一進(jìn)行管理,它能實(shí)現(xiàn)跨物理機(jī),、虛擬機(jī)以及內(nèi)部數(shù)據(jù)中心,、跨多個(gè)云來管理應(yīng)用,從而為工作負(fù)載提供一個(gè)統(tǒng)一的支撐,。 今年3月Tanzu正式亮相,,VMware最新一代虛擬化平臺(tái)vSphere 7對(duì)外發(fā)布,vSphere 7迎來了近10年最大的變革,。VMware對(duì)vSphere進(jìn)行了重構(gòu),,將K8s嵌入vSphere的控制平面,讓它成為一個(gè)K8s原生平臺(tái),,從而原生地支持K8s,。 這樣,,那些VMware的傳統(tǒng)用戶無需在虛擬機(jī)和K8s容器環(huán)境之間做出選擇,從而能自由在vSphere上進(jìn)行現(xiàn)代應(yīng)用程序開發(fā)和運(yùn)營,,同時(shí)繼續(xù)利用現(xiàn)有的技術(shù),、工具和技能組合投資。 另一方面,,容器廠商也認(rèn)識(shí)到了虛擬化的客觀存在,,也在擁抱虛擬化技術(shù),kubevirt 就是基于這個(gè)目的推出的,。 kubevirt是 Red hat 開源的以容器方式運(yùn)行虛擬機(jī)的項(xiàng)目,,使用容器的Image Registry去創(chuàng)建虛擬機(jī)并提供虛機(jī)的生命周期管理。 在紅帽4月底舉行的年度技術(shù)大會(huì)Red Hat Summit 2020大會(huì)上,,紅帽宣布推出OpenShift 虛擬化的技術(shù)預(yù)覽,,OpenShift 虛擬化就源自KubeVirt開源項(xiàng)目。 企業(yè)可以通過這一功能,,在整合了云原生與傳統(tǒng)工作負(fù)載的OpenShift上開發(fā),、部署和管理由虛擬機(jī)、容器和無服務(wù)器構(gòu)成的應(yīng)用,。 雖然VMware和紅帽的從不同出發(fā)點(diǎn)出發(fā),,但目的是一樣的,而這背后的推動(dòng)力則是企業(yè)的現(xiàn)實(shí)需求,。 對(duì)用戶而言,,它們的行動(dòng)無疑是受歡迎的,這能讓企業(yè)少了后顧之憂,,不再需要進(jìn)行非此即彼的選擇,,不用糾結(jié)容器究竟應(yīng)該部署在虛擬機(jī)還是裸機(jī)上,從而可以更靈活支持未來的各種應(yīng)用,。 虛擬機(jī)和K8s的未來 目前,,虛擬機(jī)與容器技術(shù)的結(jié)合已經(jīng)成為一個(gè)事實(shí),不僅如此,,虛擬機(jī)也正在成為云原生架構(gòu)的一部分——這就是容器原生虛擬化,。 以K8s為代表的容器,運(yùn)行在基于虛擬機(jī)的基礎(chǔ)設(shè)施之上,,而基于虛擬機(jī)的工作負(fù)載,,仍然是IT組合的重要組成部分。 未來,,虛擬機(jī)和K8s的融合會(huì)呈現(xiàn)哪些趨勢呢,? l K8s編排微型虛擬機(jī)(如Kata Containers、Firecracker或gVisor) 微型虛擬機(jī)不像傳統(tǒng)虛擬化那樣提供完整的“機(jī)器”,,而是專注于提供足夠的虛擬機(jī),,來成功執(zhí)行應(yīng)用程序容器或功能,。 因此,微型虛擬機(jī)旨在提供相對(duì)于標(biāo)準(zhǔn)Linux容器的硬隔離,,同時(shí)最大限度地減少傳統(tǒng)虛擬機(jī)在冷啟動(dòng)時(shí)間和性能方面的弱勢,。 對(duì)于某些用戶而言,可能需要更強(qiáng)大的多租戶隔離,。因此,這種方式能夠?yàn)椴皇苄湃蔚墓ぷ髫?fù)載提供更嚴(yán)格的多租戶隔離,。 l K8s編排標(biāo)準(zhǔn)虛擬機(jī) 以前,,虛擬化堆棧是與K8s和云原生是完全獨(dú)立的孤島——獨(dú)立的工作流程、獨(dú)立的工具,、獨(dú)立的團(tuán)隊(duì)等,。容器原生虛擬化的概念,使虛擬機(jī)能夠遵循與K8s中基于容器的應(yīng)用程序相同的工作流程,。 現(xiàn)在有了像KubeVirt這樣的開源項(xiàng)目,,就可以實(shí)現(xiàn)容器原生虛擬化。K8s編排引擎可以應(yīng)用于管理在云或虛擬化平臺(tái)上運(yùn)行的標(biāo)準(zhǔn)虛擬機(jī),,K8s開始使容器和虛擬機(jī)的混合運(yùn)維成為可能,。 l 裸機(jī)上的K8s(沒有虛擬機(jī)) 雖然目前大多數(shù)K8s平臺(tái)都部署在基于虛擬機(jī)的基礎(chǔ)設(shè)施上,但容器并不依賴于虛擬機(jī)來運(yùn)行,,在裸機(jī)上運(yùn)行K8s和容器的實(shí)踐還在繼續(xù)增長,。 在裸機(jī)上運(yùn)行K8s將使應(yīng)用程序能夠充分利用底層硬件,這對(duì)于為K8s帶來更多機(jī)器和性能敏感應(yīng)用程序的用戶來說非常重要,。在裸機(jī)上運(yùn)行K8s和容器,,還可以幫助用戶減少虛擬機(jī)蔓延并簡化操作。這對(duì)于虛擬機(jī)而言,,不算是個(gè)好消息,。 總體而言,虛擬機(jī)和容器有著各自的優(yōu)勢,,雖然在應(yīng)用場景上有一些重疊,,但主要應(yīng)用場景還是有區(qū)別的。比如,,虛擬機(jī)更適合運(yùn)行多個(gè)操作系統(tǒng)資源和功能的場景,,而容器更適合在更少的服務(wù)器上運(yùn)行更多的應(yīng)用。 大部分情況下,,多數(shù)企業(yè)會(huì)同時(shí)使用虛擬機(jī)和容器,,特別是考慮到大多數(shù)企業(yè)在此前已經(jīng)廣泛部署了虛擬化技術(shù)。鑒于此,,容器和虛擬化應(yīng)當(dāng)會(huì)在相當(dāng)長時(shí)間內(nèi)共存,。 |
|