選擇虛機還是容器,先來(lái)搞懂容器和虛擬主機的
發(fā)布時(shí)間:2022-05-25 06:51
來(lái)源:新網(wǎng)
閱讀:140
作者:網(wǎng)絡(luò )
欄目: 虛擬主機
歡迎投稿:712375056
在互聯(lián)網(wǎng)技術(shù)日益革新、產(chǎn)品快速迭代的今天,如何在提高資源使用率、提升效率的同時(shí)又兼顧互不干涉、安全隔離的原則,促使了虛擬化技術(shù)和容器技術(shù)的相繼誕生。
虛擬化技術(shù)有KVM、VMWare等并駕齊驅?zhuān)萜骷夹g(shù)為docker獨領(lǐng)風(fēng)騷,Docker這幾年的迅猛發(fā)展讓容器重新流行起來(lái),不過(guò)但很多資料里介紹Docker時(shí)都說(shuō)是 "新瓶裝舊酒"。除了容器外也是我們或多或少會(huì )接觸到的虛擬化技術(shù)。虛擬機和容器都用于創(chuàng )建隔離的虛擬環(huán)境,但是這兩種虛擬化技術(shù)有顯著(zhù)的不同,今天的文章就來(lái)聊一下它們之間的區別。
虛擬機
虛擬機(VM)是共享一個(gè)的物理資源的操作系統。它是硬件上的Guest,因此也被稱(chēng)為Guest虛擬機。
虛擬機由幾層組成。支持虛擬化的層是hypervisor。hypervisor是一種虛擬化
服務(wù)器的軟件。
虛擬機是怎么工作的
運行應用程序所需的一切都包含在虛擬機里--虛擬化的硬件,操作系統以及任何所需的二進(jìn)制文件和庫。因此,虛擬機具有自己獨立的基礎架構。
虛擬機的優(yōu)勢
虛擬機可減少在服務(wù)器設備上的支出,可以利用一個(gè)
物理服務(wù)器資源切分成多個(gè)獨立的虛擬機來(lái)完成許多工作。
由于只有一臺
主機,因此可以利用虛擬機管理程序的集中功能高效地管理所有虛擬環(huán)境。這些系統完全相互獨立,這意味著(zhù)你可以在不同的虛擬機里安裝不同的系統環(huán)境。
最重要的是,虛擬機與主機操作系統隔離,是進(jìn)行實(shí)驗和開(kāi)發(fā)應用程序的安全場(chǎng)所。
虛擬機的劣勢
虛擬機可能占用主機的大量系統資源,虛擬機的大小為數GB。在上運行單個(gè)應用程序意味著(zhù)還要運行Guest OS以及Guest OS運行所需的所有硬件的虛擬副本。這樣很快就增加了很多RAM和CPU資源消耗。
遷移虛擬機上運行的應用程序的過(guò)程也可能很復雜,因為它始終附加在操作系統上。因此,必須同時(shí)遷移應用程序和操作系統。同樣,在創(chuàng )建虛擬機時(shí),系統管理程序會(huì )分配專(zhuān)用于VM的硬件資源。不過(guò)與運行單獨的實(shí)體服務(wù)器相比,這仍然是經(jīng)濟的。
容器
容器是一個(gè)不依賴(lài)于操作系統,運行應用程序的環(huán)境。它通過(guò)Linux的Namespaces和Cgroups技術(shù)對應用程序進(jìn)程進(jìn)行隔離和限制的,Namespace的作用是隔離,它讓?xiě)眠M(jìn)程只能看到該Namespace內的世界;而Cgroups 的作用是限制分配給進(jìn)程的
宿主機資源。但對于宿主機來(lái)說(shuō),這些被“隔離”了的進(jìn)程跟其他進(jìn)程并沒(méi)有太大區別。
容器只是運行在宿主機上的一種特殊的進(jìn)程,多個(gè)容器之間使用的還是同一個(gè)宿主機的操作系統內核。
關(guān)于Namespaces和Cgroups后面再詳細介紹,這里你只知道他們是啟動(dòng)隔離和限制應用進(jìn)程的就行了。
容器是怎么工作的
Namespace的作用是隔離,它讓?xiě)眠M(jìn)程只能看到該Namespace內的世界;而Cgroups的作用是限制,它給這個(gè)世界圍上了一圈看不見(jiàn)的墻。通過(guò)Mount Namespace可以修改容器進(jìn)程對自己的文件系統 "掛載點(diǎn)"的認知。在容器進(jìn)程啟動(dòng)之前重新掛載它的整個(gè)根目錄"/"(通過(guò)pivot_root系統調用改變進(jìn)程的文件系統,如果系統不支持,則使用chroot),而由于Mount Namespace的存在,這個(gè)掛載對宿主機不可見(jiàn)的。這個(gè)掛載在容器根目錄上、用來(lái)為容器進(jìn)程提供隔離后執行環(huán)境的文件系統,就是所謂的“容器鏡像”。它還有一個(gè)更為專(zhuān)業(yè)的名字,叫做:rootfs(根文件系統)。rootfs只是一個(gè)操作系統所包含的文件、配置和目錄,并不包括操作系統內核。
所以說(shuō),rootfs 只包括了操作系統的 "軀殼",并沒(méi)有包括操作系統的內核。同一臺機器上的所有容器,都會(huì )共享宿主機操作系統的內核。
這就意味著(zhù),如果容器里的應用程序需要配置內核參數、跟內核進(jìn)行直接的交互,這些都是操作的宿主機操作系統的內核,它對于該機器上的所有容器來(lái)說(shuō)是一個(gè)“全局變量”,牽一發(fā)而動(dòng)全身。這也是容器相比于虛擬機的主要缺陷之一:畢竟虛擬機有模擬出來(lái)的硬件機器充當沙盒,而且每個(gè)虛擬機里還運行著(zhù)一個(gè)完整Guest OS讓?xiě)秒S便折騰。不過(guò)由于rootfs里打包的不只是應用,而是整個(gè)操作系統的文件和目錄,也就意味著(zhù),應用以及它運行所需要的所有依賴(lài),都被封裝在了一起。這就賦予了容器所謂的一致性:無(wú)論在本地、端,還是在一臺任何地方的機器上,用戶(hù)只需要解壓打包好的容器鏡像,那么這個(gè)應用運行所需要的完整的執行環(huán)境就能被重現出來(lái)。
容器的優(yōu)勢
容器占用的大小比虛擬機小很多,甚至可以小到10MB,可以輕松限制容器的內存和CPU使用率。與部署應用需要部署整個(gè)操作系統的虛擬機相比,容器非常輕巧且啟動(dòng)迅速。這樣讓我們可以快速擴展容器并添加相同的容器。
同樣,容器對于持續集成和持續部署(CI / CD)實(shí)施也是極好的選擇。他們通過(guò)在開(kāi)發(fā)人員之間分發(fā)和合并鏡像來(lái)促進(jìn)協(xié)作開(kāi)發(fā)。
容器的劣勢
容器仍無(wú)法提供與虛擬機相同的
安全性和穩定性。由于它們共享主機的內核,因此不能像虛擬機一樣完全隔離。
容器是進(jìn)程級的隔離,一個(gè)容器可以通過(guò)影響宿主機內核的穩定性來(lái)影響其他容器。
一旦容器執行了任務(wù),它就會(huì )關(guān)閉并刪除其中的所有
數據。如果希望數據保留下來(lái),則必須使用"數據卷"進(jìn)行保存,這需要在主機上進(jìn)行手動(dòng)配置。
容器還是虛擬機
上面我們列出了容器和虛擬機各自的優(yōu)勢和劣勢,我們在因為優(yōu)勢選擇了其一后默認就要其忍受劣勢所帶來(lái)的副作用,凡事都有兩面性沒(méi)有東西可以只有優(yōu)點(diǎn)沒(méi)缺點(diǎn)的。就容器和虛擬機來(lái)說(shuō),因為其完整的隔離和安全性虛擬機通常用于要求苛刻的應用程序,網(wǎng)絡(luò )基礎結構以及能消耗VM大部分資源的應用程序。而容器通常用于Web應用,微服務(wù)。