Skip to main content
NetApp virtualization solutions
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

了解使用 QEMU 和 Libvirt 實現 KVM 虛擬化

貢獻者 netapp-jsnyder kevin-hoke

了解 KVM 虛擬化以及它如何與 QEMU 和 Libvirt 協同工作以創建全面的 Linux 虛擬化平台。了解這些元件如何支援接近本機效能的虛擬機,同時為企業環境中的運算、儲存和網路資源提供靈活的管理功能。

組件概述

  1. KVM(基於核心的虛擬機器):

    • 作用:KVM是一個核心模組,透過利用CPU中的硬體輔助虛擬化擴充(例如Intel VT-x或AMD-V)來提供核心虛擬化功能。

    • 功能:KVM 允許 Linux 核心充當 1 型虛擬機器管理程序,使其能夠建立和管理具有接近本機 CPU 和記憶體操作效能的虛擬機器。

    • 最低層:KVM 是最低層級的元件,直接與硬體交互,為完全虛擬化提供必要的基礎架構。

  2. QEMU(快速模擬器):

    • 作用:QEMU是一個機器(硬體)模擬器,為客戶系統提供其他虛擬化硬體元件,例如網路介面、磁碟控制器和顯示卡。

    • 功能:當 KVM 不可用時,QEMU 可以作為 2 型虛擬機器管理程式運行,但由於它必須在軟體中模擬客戶 CPU,因此速度會慢得多。 QEMU 與 KVM 結合使用時,使用 KVM 加速 CPU 和記憶體操作,而 QEMU 處理週邊設備和其他硬體設備的模擬。

    • 與 KVM 的交互:QEMU 透過裝置檔案(例如 /dev/kvm)使用 ioctl() 系統呼叫與 KVM 交互,以管理虛擬機器進程並與 KVM 通訊。

  3. "Libvirt"

    • 作用:Libvirt是一個虛擬化函式庫和API,為各種虛擬化平台提供更高層級的管理接口,包括KVM/QEMU、Xen、VMware ESXi等。

    • 功能:Libvirt 透過提供統一的介面和工具集簡化了虛擬機器的管理。它充當抽象層,允許使用者和應用程式管理虛擬機,而無需直接與底層虛擬機管理程式的特定命令或 API 互動。

    • 主要特點:

      • VM 生命週期管理:啟動、停止、暫停、儲存、復原和遷移 VM。

      • 遠端管理:透過 SSH 或其他協定控制遠端主機上的虛擬機器。

      • 儲存管理:為虛擬機器建立和管理儲存池和磁碟區。

      • 虛擬網路:配置NAT、橋接等模式的虛擬網路。

      • 安全性:與 SELinux 和 AppArmor 集成,以實現虛擬機器的安全限制。

      • 熱插拔:在虛擬機器運行時新增或刪除磁碟和網路介面等設備。

      • 工具:Libvirt 包含用於管理虛擬機器的命令列工具(如 virsh)和圖形工具(如 virt-manager)。

    • 它們如何協同工作:

      • KVM:提供核心級虛擬化基礎架構。

      • QEMU:提供模擬硬體並管理VM進程。

      • Libvirt:充當管理階層,提供 API 和工具來控制 KVM/QEMU 和其他虛擬機器管理程式。

    • 本質上:KVM 為虛擬化提供硬體加速,QEMU 提供模擬硬體並運行 VM,Libvirt 提供用戶友好的管理介面和 API 來控制整個設定。

Libvirt 用戶端工具可用於透過駕駛艙機器從 CLI、GUI 或基於 Web 管理虛擬機器或操作。若要查看使用 libvirt 的應用程式列表,請查看 "這裡"

當應用程式進入 Kubernetes 環境時,請查看 Kubevirt 以在這些環境中將虛擬機器作為 pod 運行。

"Ansible 模組可用於 libvirt"用於自動化目的。

叢集管理

通常,虛擬化管理器或 virsh cli 工具一次管理單一主機。為了管理叢集中的多個主機,通常使用更高層級的應用程序,如 oVirt、CloudStack 或 OpenStack。這些工具將協助放置虛擬機器並分配負載。如果在小型叢集環境中尋找某些虛擬機器的高可用性,則可以使用 Pacemaker 和 Corosync 或檢查您的管理堆疊選項。

帶有管理元件的 Libvirt 堆疊

運算

Libvirt 提供了一個用於管理虛擬機器資源和功能的綜合框架。這包括與以下相關的任務:

  1. 虛擬機器(域)管理:

    • 生命週期操作:Libvirt 提供了一整套用於管理虛擬機器狀態的操作(在 libvirt 術語中稱為「域」)。這包括啟動、停止、暫停、復原、儲存、還原和遷移虛擬機器。

    • XML 配置:虛擬機器配置使用 XML 檔案定義。您可以使用 virsh 或 virt-manager 等工具來建立、修改和刪除這些 XML 配置。

    • 遠端管理:您可以使用 libvirt 的遠端協定管理遠端主機上的虛擬機,該協定支援 SSH 等各種網路傳輸。

  2. 資源分配與管理:

    • CPU 管理:Libvirt 可讓您設定客戶端 CPU,包括指定虛擬 CPU 的數量、控制 CPU 固定(將 vCPU 與主機上的特定實體 CPU 關聯)以及管理 CPU 模式(如主機直通以向客戶端公開主機的 CPU 功能)。

    • 記憶體管理:您可以為虛擬機器分配記憶體並配置記憶體過量使用(允許分配給虛擬機器的記憶體總和超過主機上可用的實體記憶體)。

    • 儲存管理:Libvirt 可以管理虛擬機器的各種類型的存儲,包括磁碟映像(格式包括 qcow2、vmdk 和 raw)、NFS 共用、LVM 磁碟區、iSCSI 共用和原始磁碟裝置。

    • 主機設備管理:您可以管理實體和虛擬主機設備,如 USB、PCI、SCSI 和網路設備,包括 SR-IOV 和 NPIV 等虛擬化功能。

  3. 虛擬網路:

    • 虛擬網路交換器:Libvirt 建立虛擬網路交換器(網橋)以將虛擬機器相互連接並連接到主機網路。

    • 網路模式:它支援各種網路模式,例如 NAT、橋接、隔離和路由,以配置虛擬機器與網路的交互方式。

    • 防火牆規則:Libvirt 自動管理防火牆規則(使用 iptables)來控制虛擬網路的網路流量。

  4. 效能優化:

    • CPU 固定:將 vCPU 固定到特定的實體 CPU 可以提高快取效率和效能,尤其是在 NUMA 環境中。

    • NUMA 調整:您可以透過將客戶機大小限制為單一 NUMA 節點上的資源量並將 vCPU 和記憶體固定到連接到 I/O 適配器的相同實體插槽來優化 NUMA 系統的效能。

    • 大頁面:使用大頁面可以減少與管理小型記憶體頁面相關的開銷,從而提高效能。

  5. 與其他工具整合:

    • virsh:與 libvirt 互動的命令列介面。

    • virt-manager:用於管理虛擬機器和 libvirt 資源的圖形工具。

    • OpenStack:Libvirt 是 OpenStack 常用的虛擬化驅動程式。

    • 第三方工具:許多其他工具和應用程式利用 libvirt 的 API 來管理虛擬機,包括雲端管理平台和備份解決方案。

KVM 虛擬機器管理程式允許過度使用 CPU 和內存,因為通常 VM 用戶端的使用率較低。但需要進行監控和平衡以獲得更好的效能。

VM 元資料以 XML 形式儲存在 /etc/libvirt/qemu 中。可以使用 virt-install 或 virsh cli 建立 VM。如果優先使用 UI 或使用上層管理堆疊,則可以使用 Virt-Manager。

總而言之,libvirt 為虛擬化的運算方面提供了一個全面的管理層,讓您可以控制虛擬機器生命週期、分配資源、配置網路、最佳化效能以及與其他工具和平台整合。

儲存

VM 磁碟可以在儲存池上動態配置,也可以由儲存管理員為 VM 預先配置。 libvirt 支援多種池類型。以下是適用的池類型以及支援的儲存協定的清單。常用的選擇是 dir。然後是 netfs 和 logical。 iscsi 和 iscsi-direct 使用單一目標,不提供容錯功能。 mpath 提供多路徑,但不支援動態分配。它的使用方式更像是 vSphere 中的原始設備映射。對於文件協定(NFS/SMB/CIFS),可以在 "自動安裝程式"或使用 fstab 和目錄池類型。對於區塊協定(iSCSI、FC、NVMe-oF),使用 ocfs2 或 gfs2 等共用檔案系統。

儲存協定 目錄 檔案系統 淨流表 邏輯 磁碟 網路連線 iscsi直接 mpath

中小企業/CIFS

是的

是的

NFS

是的

是的

iSCSI

是的

是的

是的

是的

是的

是的

是的

FC

是的

是的

是的

是的

是的

NVMe-oF

是的

是的

是的

是的

1

注意: 1 - 可能需要額外的配置。

根據所使用的儲存協議,主機上需要提供額外的包。這是範例列表。

儲存協定 Fedora Debian 吃豆人

中小企業/CIFS

samba 客戶端/cifs-utils

smbclient/cifs實用程式

smbclient/cifs實用程式

NFS

nfs實用程式

nfs-通用

nfs實用程式

iSCSI

iscsi 啟動器實用程式、裝置映射器多路徑、ocfs2 工具/gfs2 實用程式

open-iscsi、多路徑工具、ocfs2 工具/gfs2 實用程式

open-iscsi、多路徑工具、ocfs2 工具/gfs2 實用程式

FC

sysfsutils、裝置映射器多路徑、ocfs2 工具/gfs2 實用程式

sysfsutils、多路徑工具、ocfs2 工具/gfs2 實用程式

sysfsutils、多路徑工具、ocfs2 工具/gfs2 實用程式

NVMe-oF

nvme-cli、ocfs2-工具/gfs2-utils

nvme-cli、ocfs2-工具/gfs2-utils

nvme-cli、ocfs2-工具/gfs2-utils

儲存池詳細資訊儲存在 /etc/libvirt/storage 的 XML 檔案中。

若要從 vSphere 環境匯入 VM 數據,請查看"Shift 工具包"

網路

Libvirt 為管理虛擬機器和容器提供了強大的虛擬網路功能。它透過虛擬網路交換器或網橋的概念來實現這一點。

核心概念:* 虛擬網路交換器(橋接器):這就像主機伺服器上基於軟體的網路交換器。虛擬機連接到此交換機,並且流量通過它流動。 * TAP 設備:這些是特殊的網路設備,可作為連接虛擬機器網路介面和 libvirt 橋的「虛擬電纜」。

  • 網路模式:Libvirt 支援多種網路配置以滿足不同的需求:

    • NAT(網路位址轉換):這是預設模式。連接到NAT網路的虛擬機器可以透過主機的IP位址存取外部網絡,但外部主機無法直接向虛擬機器發起連線。

    • Bridged:此模式下虛擬網路直接與主機連接在同一個網段。這使得虛擬機器看起來就像直接連接到實體網路一樣。

    • 隔離:隔離網路上的虛擬機器可以相互通信並與主機通信,但無法存取主機外部的任何內容。這對於測試或安全環境很有用。

    • 路由:來自虛擬網路的流量無需 NAT 即可路由到實體網路。這需要在主機網路上進行正確的路由配置。

    • 開放:類似於路由模式,但沒有 libvirt 自動套用任何防火牆規則。這假設網路流量將由其他系統管理。

  • DHCP 和 DNS:Libvirt 可以使用 dnsmasq 管理其虛擬網路的 DHCP 服務,從而允許它為虛擬機器分配 IP 位址並處理虛擬網路內的 DNS 解析。

  • 防火牆規則:Libvirt 自動設定 iptables 規則來控制虛擬網路的流量,尤其是在 NAT 模式下。

管理 Libvirt 網路:

  • virsh:virsh 命令列工具提供了一套管理虛擬網路的全面命令,包括列出、啟動、停止、定義和取消定義網路。

  • 虛擬機器管理器(virt-manager):此圖形工具透過直覺的使用者介面簡化了虛擬網路的建立和管理。

  • XML 配置:Libvirt 使用 XML 檔案來定義虛擬網路的配置。您可以直接編輯這些 XML 檔案或使用 virsh net-edit 等工具來修改網路配置。

常見用例:

  • NAT:為具有單一網路介面的主機上的虛擬機器提供簡單的基本連接。

  • 橋接:將虛擬機器無縫整合到現有網路中。

  • 隔離:建立安全或測試環境,限制虛擬機器的外部存取。

  • 路由:需要特定路由的更進階場景。

  • Open vSwitch (OVS):適用於需要進階網路管理和自動化的複雜、大規模部署。

透過利用這些功能,libvirt 提供了一個靈活且強大的框架來管理 Linux 環境中的虛擬機器網路。

監控

NetApp Data Infrastructure Insights (以前稱為Cloud Insights)是一個基於雲端的基礎架構監控和分析平台,可全面了解您的 IT 基礎架構(包括虛擬機器)。

雖然Data Infrastructure Insights以高度關注監控NetApp儲存和 VMware 環境而聞名,但它也具有監控其他類型的基礎架構和工作負載的能力。

您可以使用NetApp Data Infrastructure Insights監控基於 Libvirt 的虛擬機器:

  1. 數據收集器:

    • Data Infrastructure Insights透過採集單元軟體運行,該軟體使用各種數據收集器從您的基礎設施收集數據。

    • Data Infrastructure Insights具有異質基礎設施和工作負載的收集器,包括 Kubernetes。還有一個開放的 Telegraf 收集器和開放的 API,可輕鬆與其他系統整合。

  2. 與 Libvirt 的潛在整合:

    • 自訂資料收集:您可以使用開放的 Telegraf 收集器或Data Infrastructure InsightsAPI 從基於 Libvirt 的系統收集資料。您需要編寫或設定收集器以使用其 API 從 Libvirt 收集指標(例如,透過 virsh 命令或存取 Libvirt 的內部指標)。

  3. 使用Data Infrastructure Insights監控 Libvirt 的好處:

    • 統一視覺性:取得虛擬化環境的單一視圖,包括NetApp儲存和基於 Libvirt 的虛擬機器。

    • 效能監控:識別效能瓶頸和資源限制,無論它們是虛擬機器內部的還是與支援它們的底層基礎架構相關的。

    • 資源最佳化:分析工作負載概況以調整虛擬機器大小、回收未使用的資源並最佳化整個環境中的資源使用率。

    • 故障排除:透過將虛擬機器效能指標與後端儲存指標關聯起來,實現端對端視覺性,快速識別並解決問題。

    • 預測分析:使用機器學習獲得智慧洞察,並在潛在問題影響效能之前主動識別它們。

總而言之,雖然Data Infrastructure Insights對 VMware 有強大的支持,但可以透過使用自訂資料收集器或利用其開放 API 將其與基於 Libvirt 的虛擬化整合。這將為Data Infrastructure Insights平台內的 Libvirt 環境提供統一的可見性、增強的效能監控和資源最佳化功能。

資料保護

可以透過多種方法使用NetApp ONTAP保護基於 Libvirt 的虛擬機器的數據,通常利用 ONTAP 的內建資料保護功能。以下是常見策略的細分:

  1. 使用 ONTAP 的原生資料保護功能:

    • 快照:ONTAP 的核心資料保護技術是快照。這些是資料磁碟區的快速、時間點副本,所需的磁碟空間最少,且效能開銷可以忽略不計。您可以使用快照來建立 Libvirt VM 磁碟的頻繁備份(假設它們儲存在ONTAP磁碟區上)。

    • SnapMirror: SnapMirror用於將 Snapshot 副本從一個ONTAP儲存系統非同步複製到另一個 ONTAP 儲存系統。這可讓您在遠端站點或雲端中建立 Libvirt VM 的災難復原 (DR) 副本。

    • SnapVault: SnapVault用於將資料從多個儲存系統備份到中央ONTAP系統。這是將來自不同主機的許多 Libvirt VM 的備份整合到中央備份儲存庫的一個不錯的選擇。

    • SnapRestore: SnapRestore可讓您從 Snapshot 副本快速復原資料。這對於在資料遺失或損壞時復原 Libvirt VM 至關重要。

    • FlexClone: FlexClone根據 Snapshot 副本建立磁碟區的可寫入副本。這對於根據生產虛擬機器資料快速建立測試/開發環境很有用。

    • MetroCluster/ SnapMirror主動同步:為了實現自動零 RPO(恢復點目標)和站點到站點可用性,您可以使用ONTAP MetroCluster或 SMas,這使得能夠在站點之間建立延伸叢集。

  2. 與第三方備份解決方案整合:許多第三方備份解決方案與NetApp ONTAP整合並支援備份虛擬機器。您可以使用這些解決方案將 Libvirt VM 備份到ONTAP存儲,利用 ONTAP 的資料保護功能。例如,一些備份解決方案使用 ONTAP 的 Snapshot 技術實現快速、無代理備份。

  3. 腳本與自動化:您可以建立腳本來自動化建立 Libvirt VM 磁碟區的ONTAP快照的流程。這些腳本可以利用 ONTAP 的命令列介面或 API 與儲存系統互動。

主要考慮因素:

  • 儲存位置:您的 Libvirt VM 磁碟映像應儲存在ONTAP磁碟區上,以利用 ONTAP 的資料保護功能。

  • 網路連線:確保 Libvirt 主機和ONTAP儲存系統之間的網路連線。

  • HBA 管理:如果使用光纖通道 (FC) 進行儲存連接,請確保在 Libvirt 主機上安裝了必要的 HBA 管理套件。

  • 監控和報告:監控您的資料保護操作並確保它們成功完成。透過將 Libvirt 的功能與 ONTAP 強大的資料保護功能結合,您可以為虛擬化環境實施全面的資料保護策略。