裸機上的巢狀虛擬化:應用場景與限制
巢狀虛擬化是指在虛擬機器內運行另一個 Hypervisor,再於其中建立更多虛擬機器。在裸機伺服器上,這個架構由專用實體伺服器開始,讓最外層主機較可預測地使用 CPU、記憶體、儲存及網絡資源,而內層虛擬化則提供可重複建立及管理的測試或隔離環境。
裸機上的巢狀虛擬化是甚麼?
一般部署會由裸機伺服器運行一個 Hypervisor 或作業系統,再由第一層虛擬機器直接使用這個虛擬化層。巢狀虛擬化則會把其中一部虛擬機器變成另一個虛擬化主機,由第二層 Hypervisor 向內層工作負載提供虛擬 CPU、記憶體、磁碟及網絡介面。
專屬伺服器不能消除額外的虛擬化層,但可以令相關開銷更容易量度。由於沒有鄰近租戶爭用實體主機資源,團隊可以更清楚分辨巢狀架構帶來的負載,與共享平台過度分配資源造成的波動。這種可預測性很有價值,但不代表內層工作負載能夠達到原生效能。
哪些情況值得使用額外的虛擬化層?
當內層 Hypervisor 本身就是需要測試、部署自動化或示範的對象時,巢狀虛擬化最有實際用途。開發團隊可以重現客戶的虛擬化基礎設施,而不用為每個環境準備一部實體伺服器。平台團隊亦可以先驗證 Hypervisor 設定、作業系統映像檔、備份流程及編排邏輯,再套用到生產硬件。
這種架構也適合需要啟動短期虛擬機器的 CI/CD 流程。最外層裸機主機提供穩定容量,內層 KVM、Hyper-V 或其他支援的 Hypervisor 則建立一次性的測試目標。每次測試後都可以重建環境,並減少整合測試所需的實體機數量。
培訓實驗室、保安演練及託管服務原型也是常見應用。團隊可以為不同項目提供獨立的內層環境,練習網絡及身份設定,再在不改動最外層主機的情況下刪除環境。服務供應商亦可以先測試多租戶流程,再決定最終應採用專屬伺服器、一般虛擬機器、容器,或混合方案。
- 為實驗室及 CI 測試建立可重複使用的虛擬機器範本
- 測試 Hypervisor 及韌體的相容性
- 為示範及保安演練提供隔離環境
- 建立每次測試後都可以重建的短期內層叢集
啟用巢狀虛擬化前,先確認硬件支援
第一項要求是處理器支援硬件輔助虛擬化。Intel VT-x 配合 EPT,以及 AMD-V 配合 Nested Paging,都是常見基礎,但實際可以傳遞給客戶機的功能,仍取決於最外層 Hypervisor、韌體、核心及相關設定。應先確認 BIOS 或 UEFI 已啟用虛擬化擴充功能,並確認最外層能夠把所需 CPU 功能傳遞給內層客戶機。
記憶體規劃同樣重要。最外層主機需要為作業系統及 Hypervisor 預留空間,第一層客戶機需要自己的分配,而內層工作負載又需要額外記憶體運行作業系統及應用程式。三層同時過度分配,在紙面上看似有效率,實際上可能造成不可預測的延遲、Swap 或難以重現的測試結果。
如果內層工作負載需要加速器或直接連接硬件,設計限制會更多。Dataplugs 的文章 在虛擬化環境部署 GPU Passthrough 說明 IOMMU、裝置擁有權、驅動程式相容性及 Hypervisor 支援需要一併檢查。PCI Passthrough 在單一虛擬化層或許可行,但當實體裝置與客戶機之間再加入另一層虛擬化時,功能可能無法傳遞或不值得維護。
提示:應以準備實際運行的伺服器、韌體、核心及 Hypervisor 組合驗證巢狀虛擬化,不要只依賴一般性的相容性清單。
理解效能開銷
每一個虛擬機器邊界都會增加處理工作。CPU 指令可能需要更多轉換,記憶體存取可能要經過額外的位址映射,而儲存及網絡操作亦可能經過更多佇列或模擬裝置。現代硬件及 Hypervisor 已經減少不少開銷,但剩餘影響仍取決於工作負載,並會在高 I/O、小封包流量或持續資源競爭時更明顯。
因此,不應在未經測試的情況下,為巢狀虛擬化作出效能承諾。應以實際內層工作負載進行基準測試,並使用準備採用的 vCPU 拓撲、儲存控制器、網絡模式及保安設定。除了平均吞吐量,也要比較尾端延遲、CPU steal time、I/O wait、封包遺失、啟動時間及故障恢復時間。
- 內層客戶機的 vCPU 排程延遲及 CPU steal time
- 內層虛擬磁碟的隨機及循序 I/O 延遲
- 跨層網絡的吞吐量、封包率及尾端延遲
- Snapshot、複製、啟動及關機時間
- 同時進行建置、備份及測試時的效能
儲存尤其需要注意,因為多個磁碟映像檔可能共用相同實體裝置。Dataplugs 的文章:專屬伺服器應選擇哪種檔案系統:XFS 還是 EXT4? 說明虛擬化主機上的檔案系統行為及 I/O 並行量為何重要。在巢狀環境中,還要把這項選擇與 NVMe 效能、RAID 設計、佇列深度、映像檔格式、快取策略及內層客戶機的同時活動量一併考慮。
設定清晰的保安及營運界線
巢狀虛擬化會增加管理層次,但不會自動成為保安邊界。控制內層 Hypervisor 的使用者可能可以修改虛擬網絡、掛載映像檔、建立高權限的客戶機,或消耗超出預期的資源。應分開管理最外層主機及內層環境的權限,限制可以建立巢狀客戶機的人員,並記錄每個項目可使用的映像檔及裝置。
映像檔管理同樣重要。內層虛擬機器通常由範本建立,如果範本未有妥善清理,便可能把憑證、SSH 金鑰、Agent 或過時的核心設定帶入每個新環境。應使用有版本管理的映像檔,避免在範本內保存秘密資料,部署前掃描映像檔,並定義 Snapshot 的加密、保留及刪除方式。
最外層主機仍然是最終資源的擁有人。應為 vCPU 數量、記憶體、磁碟空間、IOPS、網絡頻寬及內層客戶機數量設定上限。監察系統亦要分辨問題源自應用程式、內層客戶機、第一層虛擬機器、最外層 Hypervisor,還是實體伺服器。沒有這張關係圖,巢狀環境的事故會變成緩慢而難以定位的排錯工作。
建立內層客戶機前,先設計網絡
巢狀環境可能同時使用虛擬交換器、NAT、Bridge、VLAN、Overlay Network 及保安群組。應先決定哪些流量只留在內層實驗室,哪些流量需要到達外層網絡,以及如何把管理流量與測試流量分開。每一層都要記錄 MTU 及防火牆規則;在簡單客戶機網絡中可行的封包,加入另一層封裝標頭後可能便會失敗。
選擇巢狀虛擬機器還是容器,應取決於工作負載的隔離及作業系統要求。Dataplugs 的文章 容器化與虛擬化:裸機上的隔離與效能 比較了兩者涉及的信任邊界。如果內層工作負載只需要程序隔離,容器方案可能更簡單;如果必須運行另一個核心或模擬客戶的虛擬機器,巢狀虛擬化才較有理由。
了解何時不應使用巢狀虛擬化
巢狀虛擬化通常用於測試、開發、培訓或特殊平台技術,不應預設作為低延遲生產服務的基礎。資料庫、高頻交易或大型儲存平台如果置於多層排程及 I/O 之後,可能失去太多可預測性。這些情況可考慮直接使用裸機、單一且經調校的 Hypervisor,或配合應用程式隔離要求採用容器平台。
如果設計依賴無法順利穿透最外層的功能,巢狀虛擬化也不是理想選擇,例如直接裝置存取、進階電源管理、精確 NUMA 配置、即時排程及部分低層網絡功能。如果這些能力對業務十分重要,應盡早測試,或選擇較少抽象層的架構。
實際部署順序
- 確認 CPU、韌體、核心、Hypervisor 及內層客戶機支援
- 為所有虛擬化層預留記憶體及儲存空間
- 先建立一部小型內層客戶機,驗證主控台、網絡及儲存路徑
- 在加入更多項目前,測試正常及高峰工作負載
- 加入資源上限、映像檔控制、監察及恢復流程
- 每次 Hypervisor、核心或硬件變更後重新檢視設計
裸機上的巢狀虛擬化可以用於重現複雜基礎設施、自動化整合環境及測試虛擬化行為,但前提是正視它的取捨:專用硬件可以令最外層平台更穩定,卻不會令內層虛擬機器等同實體伺服器。確認硬件支援、量度完整技術堆疊、清楚劃分保安界線,並只在靈活性值得額外營運複雜性的情況下採用巢狀架構。
對於需要建立可重複測試平台或特殊虛擬化環境的團隊,Dataplugs 提供可配置 CPU、記憶體、NVMe 儲存及網絡方案的專屬伺服器,並為需要可預測單租戶基礎設施的工作負載提供技術支援。
如需了解更多,歡迎瀏覽 Dataplugs 或聯絡 sales@dataplugs.com。
