當(dāng)人們討論云計算時,經(jīng)常會提及兩個術(shù)語:虛擬機(jī)和容器。在多云時代尤其如此,因為組織的跨平臺戰(zhàn)略至關(guān)重要。
虛擬機(jī)和容器這兩種技術(shù)也有共同點:都是軟件技術(shù),都在虛擬化環(huán)境中運行。但它們在操作、大小、管理、用例和其他因素上有所不同。
以下對虛擬機(jī)和容器進(jìn)行一下比較:
虛擬機(jī):一個獨立的實例
虛擬機(jī)是操作系統(tǒng)的整個實例,通常是Windows或Linux,位于服務(wù)器內(nèi)存的獨立部分與系統(tǒng)的其余部分相隔離。
整合任務(wù)
虛擬機(jī)利用CPU中的高內(nèi)存容量和多個核心處理器將許多應(yīng)用程序和任務(wù)整合到一個物理硬件上。當(dāng)虛擬化在十年前首次應(yīng)用時,這就是它的主要用途。
安全運營的未來
當(dāng)時,數(shù)據(jù)中心運營商將應(yīng)用程序和任務(wù)從10個或更多單實例服務(wù)器移動到一個虛擬化物理服務(wù)器上的情況并不少見。這是效率的一大進(jìn)步。
成熟的技術(shù)
所有主要的虛擬機(jī)管理程序供應(yīng)商(例如VMware、Microsoft、Citrix和Red Hat)都提供自己的虛擬機(jī)品牌。該技術(shù)非常成熟。
例如,如果物理服務(wù)器發(fā)生故障,管理程序?qū)⒆詣訉⑵渖线\行的虛擬機(jī)移動到另一個物理服務(wù)器,而無需任何人工干預(yù)。十年前,工作人員必須人工完成這項工作。
虛擬機(jī)還提供硬件抽象層(HAL),因此開發(fā)人員可以編寫應(yīng)用程序,而無需擔(dān)心與底層硬件的兼容性。
容器:只用于移動所需的東西
容器加載的內(nèi)核和運行時代碼足以在容器中運行應(yīng)用程序,而不是像虛擬機(jī)那樣加載完整的Windows或Linux實例。這種更輕的框架使它們足夠靈活,可以在操作環(huán)境之間輕松移動。
主要采用Linux
容器只包含一個應(yīng)用程序和足夠的操作系統(tǒng)來執(zhí)行該應(yīng)用程序,因此需要對核心操作系統(tǒng)進(jìn)行一些額外的削減,以適應(yīng)容器較小的占用空間。因此,容器主要是一種Linux現(xiàn)象,因為它是開放源代碼和可修改的。微軟確實提供Windows容器,但它們比Linux容器更新,而不是一種成熟的技術(shù)。
編排平臺
由于容器結(jié)構(gòu)小巧,結(jié)構(gòu)簡單,因此需要對容器進(jìn)行管理。這是通過所謂的編排平臺完成的。容器編排管理容器的生命周期,因為它們經(jīng)常比虛擬機(jī)更頻繁地啟動和關(guān)閉。
編排可以(但不限于)提供和部署容器、可用性和故障轉(zhuǎn)移、擴(kuò)展或刪除容器、在發(fā)生崩潰或重載時將容器移動到新主機(jī),以及其他資源分配。
首先推出的是Docker,它擁有用于容器管理的Swarm平臺。還有Apache基金會的Mesos和Marathon,它們比Swarm復(fù)雜一點。
容器編排的黃金標(biāo)準(zhǔn)是Google的Kubernetes。它在DevOps環(huán)境中變得流行,用于提供從開發(fā)人員抽象硬件層的平臺即服務(wù)。它也非常便攜,可在谷歌云平臺、亞馬遜網(wǎng)絡(luò)服務(wù)、微軟Azure和本地數(shù)據(jù)中心上運行。
虛擬機(jī)與容器:關(guān)鍵區(qū)別
大小
虛擬機(jī)和容器之間的主要區(qū)別在于大小。一個容器可以小到10MB,而虛擬機(jī)可以大到幾GB。顯然這會影響內(nèi)存,而相同的物理服務(wù)器可以容納比虛擬機(jī)更多的容器。
結(jié)構(gòu)
這兩種技術(shù)的結(jié)構(gòu)存在顯著差異。虛擬機(jī)完全包含在內(nèi),具有操作系統(tǒng)的所有部分,并在硬件支持下運行。容器需要一個底層操作系統(tǒng),它使用虛擬內(nèi)存支持進(jìn)行隔離,為所有容器化應(yīng)用程序提供基本服務(wù)。所以組織需要一個完整的操作系統(tǒng),無論運行虛擬機(jī)或容器,它只是一個結(jié)構(gòu)。當(dāng)操作系統(tǒng)在虛擬機(jī)中時,將在容器層下運行。
它們一起工作
由于它們的性質(zhì)不同,容器和虛擬機(jī)并不會相互競爭,并且可能互相配合。組織可以在復(fù)雜的企業(yè)中使用它們,將虛擬機(jī)用于更大、更復(fù)雜的應(yīng)用程序,以及用于小型、簡單、單一用途應(yīng)用程序的容器。
虛擬機(jī)和容器的優(yōu)缺點
虛擬機(jī)提供更多資源
虛擬機(jī)比容器具有更多優(yōu)點。因為組織使用的是完整的操作系統(tǒng),而不是自定義的削減版本,所以組織可以充分利用操作系統(tǒng)。這意味著所有操作系統(tǒng)資源都可用,并且擁有一整套管理和安全工具。簡而言之,組織擁有完整的操作系統(tǒng),無論是Windows、Red Hat、Ubuntu,還是其他版本的Linux。
虛擬機(jī)需要更長的啟動時間
當(dāng)然,虛擬機(jī)的缺點之一是規(guī)模大。在資源受限的服務(wù)器上,這將是限制性的因素。由于具有大小差異,虛擬機(jī)可能需要幾分鐘才能啟動,而容器化應(yīng)用程序幾乎可以立即啟動。這意味著容器可以在需要時加載,然后在不再需要時關(guān)閉,從而釋放主機(jī)上的資源。
虛擬機(jī)的安全挑戰(zhàn)
理論上,安全性可能是公共云上的問題,因為組織與其他客戶共存,并且不知道他們是誰,或不知道管理云平臺的員工是誰。人們一直擔(dān)心他人會在虛擬機(jī)中窺探,會從那里提取信息或數(shù)據(jù)。
但安全的主要風(fēng)險更可能是事故。例如,組織可以在AWS上啟動具有完全加密或其他安全保護(hù)的虛擬機(jī)。但是由于進(jìn)程過載,組織的虛擬機(jī)將被移動到另一個服務(wù)器,甚至另一個物理位置,并且不會保證安全。這可以通過進(jìn)行適當(dāng)和重復(fù)的安全檢查來緩解。
另一個潛在的安全問題是虛擬機(jī)的無序擴(kuò)展,這是一種常見的現(xiàn)象。在這種情況下,用戶會關(guān)閉許多虛擬機(jī),而不會關(guān)閉原來打開的虛擬機(jī)。然后,組織會面臨打開過多虛擬機(jī)的風(fēng)險,而這些虛擬機(jī)其實是可以有效管理的。也許并不是所有的安全補丁都被應(yīng)用。這是一個管理問題,而不是技術(shù)問題,所以這取決于組織來防止這個問題,而不是云計算提供商。
容器和通信控制
對于容器來說,在某些情況下,所有容器都可以默認(rèn)相互通信。這意味著如果惡意用戶或程序控制了一個容器,它就可以控制所有容器。開發(fā)人員應(yīng)該只允許絕對需要它的容器之間的相互通信,并限制它們允許的通信類型。
由于組織在容器中創(chuàng)建自己的操作環(huán)境,所以需要執(zhí)行內(nèi)核級修補,并將所有更新應(yīng)用于操作環(huán)境,這會增加組織的工作負(fù)載。需要為容器制定某種修補策略并加以實施。
容器和Linux子系統(tǒng)
由于容器不包含完整的操作系統(tǒng),因此它們可以訪問許多Linux內(nèi)核子系統(tǒng)。Docker使用libcontainers作為其容器技術(shù),并訪問容器外的重要命名空間。因此,在容器中擁有完全權(quán)限的任何人都可以訪問底層操作系統(tǒng),因此,開始在容器外部進(jìn)行探索,也許可以窺探其他容器。解決此問題的方法是對容器進(jìn)行非常仔細(xì)和徹底的配置,以確保它們被鎖定。
虛擬機(jī)和容器用例
盡管它們有相似之處,但容器和虛擬機(jī)之間存在根本的使用差異。虛擬機(jī)適用于虛擬環(huán)境,而容器不需要虛擬機(jī)管理程序并使用它們運行的底層操作系統(tǒng)。
虛擬化環(huán)境
在虛擬化環(huán)境中,組織在管理程序上運行多個操作系統(tǒng),該管理程序在一臺計算機(jī)上管理I/O。在容器化環(huán)境中,它不是虛擬化的,也不使用管理程序。這并不是說組織不能在虛擬機(jī)中運行容器。但這不是最有效的方法。
因此,盡管容器運行在單個操作系統(tǒng)實例上,也就像小型虛擬化一樣,因為組織可以在一個物理系統(tǒng)上運行數(shù)十個或數(shù)百個容器。它是沒有虛擬機(jī)管理程序的虛擬化,這可能是一件好事。這是因為管理程序受到性能限制,并且還可能阻止訪問服務(wù)器中的某些組件,例如網(wǎng)絡(luò)控制器。
DevOps
這是DevOps環(huán)境更喜歡容器進(jìn)行開發(fā)測試構(gòu)建的主要原因之一。它們的容器比虛擬機(jī)執(zhí)行速度快,并且可以更好地訪問系統(tǒng)資源。
容器的主要優(yōu)點是體積小,能夠在服務(wù)器上運行數(shù)百甚至數(shù)千個,而不是幾十個虛擬機(jī)。這取決于容器的另一個優(yōu)勢:它們在虛擬機(jī)上的模塊化程度更高。應(yīng)用程序可以在一個稱為微服務(wù)的技術(shù)中分成多個容器。顯然,容器和微服務(wù)可以很好地協(xié)同工作。這種組合有助于隔離問題和任何潛在的崩潰或瓶頸。如果問題是一個大型的單一的應(yīng)用程序,那么解決本地化問題要容易得多。
更安全的環(huán)境
虛擬機(jī)是更安全環(huán)境的理想選擇,因為虛擬機(jī)中包含所有內(nèi)容。容器經(jīng)常必須與底層操作系統(tǒng)或其他容器通信,這可能帶來安全風(fēng)險。在虛擬機(jī)中,一切都在同一個孤島中。因此,如果組織需要一個完全孤立的、隔離的操作環(huán)境,那么采用虛擬機(jī)就是解決問題的方法。
老舊系統(tǒng)
虛擬機(jī)還允許托管舊版本的操作系統(tǒng)。例如,多年前為舊操作系統(tǒng)編寫的應(yīng)用程序可能無法在新一代操作系統(tǒng)中運行,并且組織可能沒有使其資源實現(xiàn)現(xiàn)代化。因此,在虛擬機(jī)中運行舊操作系統(tǒng),讓應(yīng)用程序保持不變。
未來
容器在技術(shù)上需要更多的工作才能達(dá)到成熟,盡管技術(shù)正在快速發(fā)展。而虛擬機(jī)更加成熟,并且由于其性質(zhì),將會更安全且更易于管理。
容器技術(shù)(特別是其安全性)仍在不斷發(fā)展。它還需要在負(fù)載平衡、可信連接以及在完整的操作系統(tǒng)中成熟的其他領(lǐng)域進(jìn)行改進(jìn)。這是當(dāng)組織使用操作系統(tǒng)并將其減少到幾兆字節(jié)時會發(fā)生的情況。
展望未來,預(yù)計Docker和谷歌公司的容器產(chǎn)品將會更加成熟,而虛擬機(jī)將繼續(xù)專注于跨服務(wù)器的性能和可遷移性。無論如何,這兩種技術(shù)將繼續(xù)在云計算中發(fā)揮關(guān)鍵作用。
容器與虛擬機(jī)概覽
虛擬機(jī)vs.容器概覽
|
虛擬機(jī) |
容器 |
啟動時間 |
幾分鐘 |
以秒計 |
大小 |
多GB |
只需10MB |
操作系統(tǒng) |
Windows, Linux |
Linux |
每臺機(jī)器有多個操作系統(tǒng) |
是 |
否 |
安全性 |
是 |
否 |
加密 |
一些 |
無 |
故障轉(zhuǎn)移 |
是 |
否 |
將云遷移到本地 |
是 |
是 |
每個實例有多個服務(wù) |
是 |
否 |