探討在容器化平台上實現虛擬機運行的技術


壹  前言

因近年來,隨著微服務與雲原生技術的蓬勃發展,許多企業積極擁抱 Kubernetes 作為其應用程式部署與管理的基石。然而,部分既有的傳統虛擬機器(Virtual Machine, VM)工作負載因其複雜性或特定需求,難以直接容器化。為了解決此挑戰,並為開發團隊提供一個統一的平台,讓他們能夠在 Kubernetes 環境中同時管理應用程式容器與虛擬機器,KubeVirt 應運而生。KubeVirt 透過將虛擬機器包裝進容器中,並從單一控制台管理這兩種類型的工作負載,實現了容器原生虛擬化。

貳  KubeVirt 介紹

一、 什麼是KubeVirt

KubeVirt 是一項開源專案,它賦予 Kubernetes 叢集原生的虛擬機管理能力,讓使用者能夠在相同的基礎設施上,同時運行、部署與管理容器化應用程式與虛擬機,於容器環境中執行虛擬機的概念,被稱為容器原生虛擬化。KubeVirt 於 2017 年由 Red Hat 率先主導開發,目前已是雲原生運算基金會 (Cloud Native Computing Foundation, CNCF) 的孵化專案。透過 KubeVirt,虛擬機不僅保有傳統的運作模式,還能與容器化微服務和新興的雲原生應用程式,共同在單一平台上協同運作,並共享相同的 Kubernetes 基礎設施、工具與管理方式。

二、 架構概覽與主要元件

KubeVirt 的設計理念基於服務導向架構(service oriented architecture) 和編排模式 (choreography pattern) ,透過擴展 Kubernetes 的應用程式介面 (API)管理原生 Kubernetes 物件(如 Pods)的相同方式,直接與虛擬機進行互動和操作,實現虛擬機管理,如圖一所示。在 KubeVirt 的運作模型中,資源的排程、網路配置與儲存功能仍舊委託給 Kubernetes 本身負責。

KubeVirt 的核心功能由三個關鍵元件所組成:

1. 自訂資源定義 (CustomResourceDefinitions, CRD):KubeVirt引入新的資源類型,擴展 Kubernetes API,讓 Kubernetes API 能夠像處理其他原生 Kubernetes 物件一樣處理虛擬機。

2. 控制器:KubeVirt 部署了額外的控制器virt-controller,負責處理與新資源類型相關的叢集層面邏輯、排程虛擬機實例 (VirtualMachineInstance, VMI) 至適當主機,並管理工作節點上可用的 CPU 類型和 KVM 資訊。

3. 代理程式:KubeVirt 啟用了額外的節點專屬代理程式virt-handler,負責處理與新資源類型相關的節點層面邏輯。virt-handler 會在各主機上與 kubelet 協同運作,負責啟動虛擬機實例 (VMI) 並進行配置,使其達到預期的狀態。

值得注意的是,KubeVirt 的控制器和代理程式本身也是以 Pod 或類似形式運行於 Kubernetes 叢集之上,而非與叢集核心一同安裝。

圖一、KubeVirt 運作架構

KubeVirt 引入的主要 CRD 類型包括VMI、VM、VMIS(VirtualMachineInstanceReplicaSet),分述如下:

VMI:為虛擬機最基本的、一次性的建構單元,定義虛擬機的運行方式和配置。

VM:為更高層次的 CRD,具備狀態保存能力,允許虛擬機在停止與啟動之間保持資料與狀態,概念上與 Kubernetes 中 spec.replicas 設定為 1 的 StatefulSet 相似。使用者通常透過 VM 來間接管理 VMI。

VMIRS:類似於 Kubernetes 中的 Pod ReplicaSet,它管理一組具有相同配置的暫時性 VMI。

每個虛擬機都會在 Kubernetes 叢集中的獨立 Pod 中運行,這個 Pod 被稱為 virt-launcher。virt-launcher 負責透過 libvirt API 和 QEMU 進行硬體虛擬化,從而實際創建虛擬機。這使得 KubeVirt 能夠直接利用 Kubernetes 現有的基礎設施,例如用於網路的容器網路介面 (Container Network Interface, CNI) 和用於儲存的容器儲存介面 (Container Storage Interface, CSI)。

三、 KubeVirt 的優勢

KubeVirt 的應用帶來的效益:

1. 雲原生整合:它讓那些難以直接容器化的傳統工作負載,能夠與雲原生應用和微服務並行運行,提供一個統一的開發平台。虛擬機也能受益於 Kubernetes 原生的諸多功能,例如基於角色的存取控制 (Role-based Access Control, RBAC)、整合監控與日誌記錄、服務網格等。

2. 現代化轉型:KubeVirt 提供了一個將 IT 生態系統現代化的途徑和平台,帶來彈性、速度和穩定性。它允許同時創建和運行容器與虛擬機,並提供一個統一的平台,在此基礎上開發新應用和更新傳統工作負載。

3. 進階功能與功能對等性:作為 CNCF 的孵化專案,KubeVirt 不僅擁有 Kubernetes 原生的進階功能,也持續由開源社群貢獻者改進和擴展。它提供了與其他主流企業虛擬化平台(如 VMware vSphere 和 HyperV)相似的功能。

4. 高效能表現:KubeVirt 能夠從容應對不斷變化的 CPU 需求和記憶體分配,相較於傳統虛擬化解決方案,它能有效降低延遲。它同時簡化了裸機硬體與執行環境之間的抽象層,從而更有效地利用資源並提升整體效能。KubeVirt 社群甚至會定期評估其效能與可擴展性,並在每次版本發布後分享相關數據。

參  虛擬化與容器化應用發展趨勢

全球虛擬化與容器化技術正朝向混合與統一架構演進,企業逐漸從傳統VM(如VMware)轉移到Kubernetes原生環境,以實現更高的彈性和成本效益。根據Mordor Intelligence產業報告指出,容器化市場預計以23.64%的複合年增長率(CAGR)擴張至2030年,Kubernetes將成為主流管理工具,支援VM與容器的共存。發展主要趨勢包括:

• 多元化與避免供應商鎖定:企業優先採用開源解決方案,如OpenShift Virtualization或Red Hat的混合平台,取代VMware等專有系統,企業可透過嵌套虛擬化實現VM遷移到容器環境,減少硬體依賴並提升資源利用率。

• 邊緣計算與AI整合:隨著邊緣計算興起,容器化平台上的VM技術被廣泛用於低延遲應用。AI工作負載推動hypervisor優化,如HyperTurtle等新方法加速嵌套虛擬化,減少了虛擬化層之間(即 guest 與 host 之間)的切換次數,提高性能。

• 統一VM與容器混合平台:運營效率需求促使平台整合VM和容器,如在Kubernetes上運行VM Pod,簡化管理並降低複雜度,越來越多企業採用此類模式,以支援多樣化工作負載。

肆  結語

KubeVirt為企業提供了一個強大的解決方案,使其能夠在單一的 Kubernetes 基礎設施上,同時運行和管理容器化應用程式以及傳統虛擬機器。這不僅促進了現有 VM 工作負載的輕量化,也提供了一個整合的平台,讓開發和運維團隊能夠以更高效、一致的方式來管理所有類型的應用程式。KubeVirt 憑藉其與 Kubernetes 原生功能的深度整合、強大的管理能力,以及對效能和安全性的重視,正逐漸成為混合雲環境中一個可行的虛擬化選擇。

伍  參考文獻

[1] KubeVirt user guide. Available at: https://kubevirt.io/user-guide/
[2] Kube VirtArchitecture. Available at : https://github.com/kubevirt/kubevirt/blob/main/docs/architecture.md.
[3] KubeVirt Components.. Available at: kubevirt/docs/components.md
[4] 什麼是 KubeVirt?Oct. 25th,2024. Available at: https://www.redhat.com/zh-cn/topics/virtualization/what-is-kubevirt
[5] Containerization Beyond Kubernetes: Exploring Alternatives in 2025.February 18th 2025. Available at: https://www.nucamp.co/blog/coding-bootcamp-backend-with-python-2025-containerization-beyond-kubernetes-exploring-alternatives-in-2025
[6] What does your infrastructure look like in 2025 and beyond? May 5, 2025. Available at:https://www.vcluster.com/blog/what-does-your-infrastructure-look-like-in-2025-and-beyond
[7] The Future of Virtualization: Why Enterprises Are Moving to OpenShift Virtualization in 2025. March 24th 2025. Available at:https://www.syone.com/blog/the-future-of-virtualization-why-enterprises-are-moving-to-openshift-virtualization-in-2025
[8] Virtualization in 2025 and beyond.February 13, 2025.Available at:https://www.redhat.com/en/blog/virtualization-2025-and-beyond