了解使用 QEMU 和 Libvirt 實現 KVM 虛擬化
了解 KVM 虛擬化以及它如何與 QEMU 和 Libvirt 協同工作以創建全面的 Linux 虛擬化平台。了解這些元件如何支援接近本機效能的虛擬機,同時為企業環境中的運算、儲存和網路資源提供靈活的管理功能。
組件概述
-
KVM(基於核心的虛擬機器):
-
作用:KVM是一個核心模組,透過利用CPU中的硬體輔助虛擬化擴充(例如Intel VT-x或AMD-V)來提供核心虛擬化功能。
-
功能:KVM 允許 Linux 核心充當 1 型虛擬機器管理程序,使其能夠建立和管理具有接近本機 CPU 和記憶體操作效能的虛擬機器。
-
最低層:KVM 是最低層級的元件,直接與硬體交互,為完全虛擬化提供必要的基礎架構。
-
-
QEMU(快速模擬器):
-
作用:QEMU是一個機器(硬體)模擬器,為客戶系統提供其他虛擬化硬體元件,例如網路介面、磁碟控制器和顯示卡。
-
功能:當 KVM 不可用時,QEMU 可以作為 2 型虛擬機器管理程式運行,但由於它必須在軟體中模擬客戶 CPU,因此速度會慢得多。 QEMU 與 KVM 結合使用時,使用 KVM 加速 CPU 和記憶體操作,而 QEMU 處理週邊設備和其他硬體設備的模擬。
-
與 KVM 的交互:QEMU 透過裝置檔案(例如 /dev/kvm)使用 ioctl() 系統呼叫與 KVM 交互,以管理虛擬機器進程並與 KVM 通訊。
-
-
-
作用: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 提供了一整套用於管理虛擬機器狀態的操作(在 libvirt 術語中稱為「域」)。這包括啟動、停止、暫停、復原、儲存、還原和遷移虛擬機器。
-
XML 配置:虛擬機器配置使用 XML 檔案定義。您可以使用 virsh 或 virt-manager 等工具來建立、修改和刪除這些 XML 配置。
-
遠端管理:您可以使用 libvirt 的遠端協定管理遠端主機上的虛擬機,該協定支援 SSH 等各種網路傳輸。
-
-
資源分配與管理:
-
CPU 管理:Libvirt 可讓您設定客戶端 CPU,包括指定虛擬 CPU 的數量、控制 CPU 固定(將 vCPU 與主機上的特定實體 CPU 關聯)以及管理 CPU 模式(如主機直通以向客戶端公開主機的 CPU 功能)。
-
記憶體管理:您可以為虛擬機器分配記憶體並配置記憶體過量使用(允許分配給虛擬機器的記憶體總和超過主機上可用的實體記憶體)。
-
儲存管理:Libvirt 可以管理虛擬機器的各種類型的存儲,包括磁碟映像(格式包括 qcow2、vmdk 和 raw)、NFS 共用、LVM 磁碟區、iSCSI 共用和原始磁碟裝置。
-
主機設備管理:您可以管理實體和虛擬主機設備,如 USB、PCI、SCSI 和網路設備,包括 SR-IOV 和 NPIV 等虛擬化功能。
-
-
虛擬網路:
-
虛擬網路交換器:Libvirt 建立虛擬網路交換器(網橋)以將虛擬機器相互連接並連接到主機網路。
-
網路模式:它支援各種網路模式,例如 NAT、橋接、隔離和路由,以配置虛擬機器與網路的交互方式。
-
防火牆規則:Libvirt 自動管理防火牆規則(使用 iptables)來控制虛擬網路的網路流量。
-
-
效能優化:
-
CPU 固定:將 vCPU 固定到特定的實體 CPU 可以提高快取效率和效能,尤其是在 NUMA 環境中。
-
NUMA 調整:您可以透過將客戶機大小限制為單一 NUMA 節點上的資源量並將 vCPU 和記憶體固定到連接到 I/O 適配器的相同實體插槽來優化 NUMA 系統的效能。
-
大頁面:使用大頁面可以減少與管理小型記憶體頁面相關的開銷,從而提高效能。
-
-
與其他工具整合:
-
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 的虛擬機器:
-
數據收集器:
-
Data Infrastructure Insights透過採集單元軟體運行,該軟體使用各種數據收集器從您的基礎設施收集數據。
-
Data Infrastructure Insights具有異質基礎設施和工作負載的收集器,包括 Kubernetes。還有一個開放的 Telegraf 收集器和開放的 API,可輕鬆與其他系統整合。
-
-
與 Libvirt 的潛在整合:
-
自訂資料收集:您可以使用開放的 Telegraf 收集器或Data Infrastructure InsightsAPI 從基於 Libvirt 的系統收集資料。您需要編寫或設定收集器以使用其 API 從 Libvirt 收集指標(例如,透過 virsh 命令或存取 Libvirt 的內部指標)。
-
-
使用Data Infrastructure Insights監控 Libvirt 的好處:
-
統一視覺性:取得虛擬化環境的單一視圖,包括NetApp儲存和基於 Libvirt 的虛擬機器。
-
效能監控:識別效能瓶頸和資源限制,無論它們是虛擬機器內部的還是與支援它們的底層基礎架構相關的。
-
資源最佳化:分析工作負載概況以調整虛擬機器大小、回收未使用的資源並最佳化整個環境中的資源使用率。
-
故障排除:透過將虛擬機器效能指標與後端儲存指標關聯起來,實現端對端視覺性,快速識別並解決問題。
-
預測分析:使用機器學習獲得智慧洞察,並在潛在問題影響效能之前主動識別它們。
-
總而言之,雖然Data Infrastructure Insights對 VMware 有強大的支持,但可以透過使用自訂資料收集器或利用其開放 API 將其與基於 Libvirt 的虛擬化整合。這將為Data Infrastructure Insights平台內的 Libvirt 環境提供統一的可見性、增強的效能監控和資源最佳化功能。
資料保護
可以透過多種方法使用NetApp ONTAP保護基於 Libvirt 的虛擬機器的數據,通常利用 ONTAP 的內建資料保護功能。以下是常見策略的細分:
-
使用 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,這使得能夠在站點之間建立延伸叢集。
-
-
與第三方備份解決方案整合:許多第三方備份解決方案與NetApp ONTAP整合並支援備份虛擬機器。您可以使用這些解決方案將 Libvirt VM 備份到ONTAP存儲,利用 ONTAP 的資料保護功能。例如,一些備份解決方案使用 ONTAP 的 Snapshot 技術實現快速、無代理備份。
-
腳本與自動化:您可以建立腳本來自動化建立 Libvirt VM 磁碟區的ONTAP快照的流程。這些腳本可以利用 ONTAP 的命令列介面或 API 與儲存系統互動。
主要考慮因素:
-
儲存位置:您的 Libvirt VM 磁碟映像應儲存在ONTAP磁碟區上,以利用 ONTAP 的資料保護功能。
-
網路連線:確保 Libvirt 主機和ONTAP儲存系統之間的網路連線。
-
HBA 管理:如果使用光纖通道 (FC) 進行儲存連接,請確保在 Libvirt 主機上安裝了必要的 HBA 管理套件。
-
監控和報告:監控您的資料保護操作並確保它們成功完成。透過將 Libvirt 的功能與 ONTAP 強大的資料保護功能結合,您可以為虛擬化環境實施全面的資料保護策略。