KVM虛擬機介紹

2020-08-05     藝麟盛世

原標題:KVM虛擬機介紹

KVM 僅僅是 Linux 內核的一個模塊。管理和創建完整的 KVM 虛擬機,需要更多的輔助工具。CentOS 8中的虛擬化包含以下主要軟體組件:

4.1、虛擬機組件及其交互

管理程序

hypervisor(VMM):在CentOS 8中創建虛擬機(VM)的基礎是hypervisor,它是控制硬體並允許在主機上運行多個作業系統的軟體層。

系統管理程序包括基於內核的虛擬機(KVM)模塊和虛擬化內核驅動程序,例如virtio和vfio。這些組件可確保主機上的Linux內核為用戶空間軟體提供虛擬化資源。

QEMU:在用戶空間級別,QEMU仿真器模擬可運行虛擬機作業系統的完整虛擬化硬體平台,並管理如何在主機上分配資源並將其呈現給虛擬機。

QEMU是一套由Fabrice Bellard所編寫的模擬處理器的自由軟體。它與Bochs,PearPC近似,但其具有某些後兩者所不具備的特性,如高速度及跨平台的特性。經由kqemu這個開源的加速器,QEMU能模擬至接近真實電腦的速度。

QEMU是一個主機上的VMM(virtual machine monitor),通過動態二進位轉換來模擬CPU,並提供一系列的硬體模型,使guest os認為自己和硬體直接打交道,其實是同QEMU模擬出來的硬體打交道,QEMU再將這些指令翻譯給真正硬體進行操作。通過這種模式,guest os可以和主機上的硬碟,網卡,CPU,CD-ROM,音頻設備和USB設備進行交互。但由於所有指令都需要經過QEMU來翻譯,因而性能會比較差。

KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 內核模塊的用戶空間工具 QEMU-KVM。所以 Linux 發行版中分為 內核部分的 KVM 內核模塊和 QEMU-KVM 工具。這就是 KVM 和 QEMU 的關係。

Libvirt、virsh、virt-manager:儘管 QEMU-KVM 工具可以創建和管理 KVM 虛擬機,RedHat 為 KVM 開發了更多的輔助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易於使用。

CentOS 8特別說明

儘管QEMU是該體系結構的重要組成部分,但出於安全考慮,它並不打算直接在CentOS 8系統上使用。因此,qemu-*紅帽不支持使用命令,強烈建議使用libvirt與QEMU進行交互。

libvirt: libvirt軟體套件還充當管理和通信層,使QEMU易於與之交互,執行安全規則,並提供了許多用於配置和運行VM的其他工具。

Libvirt 是一套提供了多種語言接口的 API,為各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持 Xen 等其他虛擬機。使用 libvirt,你只需要通過 libvirt 提供的函數連接到 KVM 或 Xen 宿主機,便可以用同樣的命令控制不同的虛擬機了。

Libvirt 不僅提供了 API,還自帶一套基於文本的管理虛擬機的命令 virsh,你可以通過使用 virsh 命令來使用 libvirt 的全部功能。

但最終用戶更渴望的是圖形用戶介面,這就是 virt-manager。他是一套用 python 編寫的虛擬機管理圖形介面,用戶可以通過它直觀地操作不同的虛擬機。Virt-manager 就是利用 libvirt 的 API 實現的。

cpu 分為4層 ring0-ring3

0 執行特權指令

3 用戶指令

ring1 vmm

XML配置

基於主機的XML配置文件(也稱為域XML文件)描述了特定的VM。這包括:

  • 元數據,例如VM的名稱,時區以及有關VM的其他信息。
  • VM中的設備的描述,包括虛擬CPU(vCPUS),存儲設備,輸入/輸出設備,網絡接口卡以及其他實際和虛擬硬體。
  • VM設置,例如它可以使用的最大內存量,重新啟動設置以及有關VM行為的其他設置。

組件互動

啟動VM後,系統管理程序將使用XML配置來創建VM的實例,作為主機上的用戶空間進程。管理程序也使得虛擬機進程訪問的基於主機的接口,比如virsh,virt-install和guestfish實用程序或Web控制台GUI。

使用這些虛擬化工具時,libvirt會將其輸入轉換為QEMU的指令。QEMU將指令傳遞給KVM,以確保內核適當分配執行指令所需的資源。結果,QEMU可以執行相應的用戶空間更改,例如創建或修改VM,或在VM的作業系統中執行操作。

文章來源: https://twgreatdaily.com/zh-mo/KLNpvnMBURTf-Dn52CbR.html