超越虛擬化,容器正以前所未有的速度發展。在這篇部落格文章中,我們將介紹虛擬化的基礎知識,並帶您進入容器的世界。其次,解釋虛擬機器和容器之間的區別。最後,讓我們談談容器與儲存之間的關係。
虛擬化基礎知識
虛擬化是從物理計算硬體中抽象出來的模擬計算環境的創建過程。它允許您從硬體和軟體組件中創建多個虛擬計算實例。通常,這些實例可以是傳統意義上的計算機,也可以是應用程序、伺服器或網絡配置。
虛擬機監視器(hypervisor)是一種創建和運行虛擬機器的計算機軟件。它是一個輕量級的軟體層,位於物理硬體和虛擬化環境之間。虛擬機監視器是一個中介,它從基礎架構的原材料中提取資源,並將它們引導到各種計算實例中。
虛擬機器和容器
虛擬化使計算機能夠生成稱為虛擬機器(VMs)的計算機。它們運行在虛擬機監視器軟體的頂部,允許多個操作系統(OSs)共享相同的底層物理硬體並彼此獨立運行。虛擬機監視器虛擬化了底層硬體,每個虛擬機運行自己的操作系統。常見的虛擬機提供者包括 VMware、Microsoft Hyper-V、Virtual Box、Xen 等。
容器也是軟體定義計算的實例,但它們運行在共享的主機操作系統之上。它們將軟體打包為可攜帶的執行單元,包含運行所需的所有依賴項,可以在伺服器、筆記型電腦和雲中運行。常見的容器工具包括 LXC(Linux容器)、Docker、Kubernetes 等。
單體和微服務架構
單體架構是軟體程序的傳統模型。它是作為一個統一的單元構建的,是自包含的,獨立於其他應用程序。在使用單體架構開發時,主要優點是開發速度很快,因為應用程序是基於單一的代碼庫構建的。
微服務架構是應用程序開發中的一種新趨勢。使用容器,應用程序可以分解為最小的組件或“服務”,每個服務都提供單一的功能,這些服務可以獨立開發和部署。微服務不會減少複雜性,但它們使複雜性變得可見,並更容易通過將任務分解為獨立運行且為整體做出貢獻的較小的過程來管理。
例如,假設您有一個允許客戶購買產品的應用程序。您可能會有一個搜索欄、一個購物車、一個購買按鈕等。每個這些“服務”可以存在於自己的容器中,因此如果搜索欄因負載過高而失敗,它不會使整個應用程序崩潰。
虛擬機器 vs. 容器
不需要攜帶所有的作業系統程式碼,容器比虛擬機器更輕量(以兆位元組計算,而不是虛擬機器的吉位元組),並且啟動速度比虛擬機器更快。使用容器,您可以在一台伺服器上運行兩到三倍於虛擬機器的應用程序。僅基於這一點,可以提出容器是未來的虛擬化趨勢。
使用案例
虛擬機器(VMs)和容器都有其優點和缺點,最終的決策將取決於您的具體需求。
虛擬機器(VMs)適合運行需要使用作業系統的所有資源和功能的應用程序,當您需要在伺服器上運行多個應用程序或需要管理多個不同的作業系統時。如果您有一個現有的單體式應用程序,不計劃或不需要將其重構為微服務,那麼虛擬機器將繼續適合您的用例。
容器則適合在您最關心的是最大化在最少數量的伺服器上運行的應用程序或服務的情況下,以及當您需要最大的可移植性時。如果您正在開發一個新的應用程序,並且希望使用微服務架構來實現可擴展性和可移植性,那麼容器是您的首選。在基於微服務架構的雲原生應用程序開發方面,容器表現出色。
在叢集中實施容器需要外部儲存
容器的優點在於它們可以根據負載的變化快速增加或減少。一個 Pod 包含容器和儲存。在一個集群中,當負載減少時,Pod 可能因負載下降、進程崩潰或其他原因而被刪除。在這一點上,應用程序的狀態必須被記錄下來,以便新實例(新的 Pod)在啟動時獲取當前的狀態。持久性儲存在設備關閉時保留資料。因此,應用程序必須將它們的狀態信息儲存在 Pod 之外。
儘管最初假定容器不需要持久性儲存,但不斷增長的實施已經證明了對容器化應用程序的某種連續性的需求。例如,如果容器中的某個部分應用程序崩潰,重新實例化該容器(本地或遠程)以及現有資料比從另一個位置重新創建或複製它要容易。
您可以在創建 Pod 時指定外部儲存作為持久性儲存,從本質上將外部卷掛載到容器中。運行在 Pod 中的容器透明地訪問外部儲存,就像訪問任何其他本地儲存一樣。
CSI(容器儲存介面)連接容器和儲存產品
CSI(容器儲存介面)是一個標準,用於將任意區塊和文件儲存系統暴露給容器化工作負載,這些工作負載運行在容器編排系統(如 Kubernetes、Mesos、Docker 或 Cloud Foundry)上。容器編排是自動化運行容器化工作負載和服務所需的許多運營工作的過程。這包括軟體團隊需要管理容器生命周期的各種事物,包括提供、部署、擴展、網絡、負載平衡等等。儲存供應商提供了一個 CSI 插件,以便它可以在多個容器編排系統中運行。
結論
簡而言之,虛擬機器(VMs)幫助企業充分利用其基礎設施資源,從有限的硬體和軟體中擴展可以提供的機器數量。容器(Containers)則幫助企業充分發揮開發資源,實現微服務和 DevOps 實踐。在叢集架構中,需要外部儲存來共享應用程序的狀態和資源。而 CSI 則充當容器和儲存之間的中介。