qemu、kvm、qemu-kvm、openstack、libvert概念講解

QEMU

Qemu是一個獨立的虛擬化解決方案,通過inter-VT或AMD SVM實現虛擬化,安裝qemu的系統,可以直接 模擬吹另一個完全不同的系統環江,虛擬機的創建通過qemu-image即可完成。Qemu本身可以不依賴KVM,但是如果有KVM的存在並且硬件(處理器)支持比如Inter VT功能,那麼QEMU在對處理器虛擬化這一塊可與裏哦用KVM提供的功能來提升性能。

KVM

KVM 是集成到 Linux 內核的 Hypervisor 是 X86 架構且硬件支持虛擬化技術(IntelVT或AMD-V)的Linux 的全虛擬化解決方案。它是Linux 的一個很小的模塊,利用 Linux 做大量的事,如任務調度、內存管理與硬件設備交互等。準確來說,KVM 是Linux kernel 的一個模塊。可以用命令 modprobe 去加載KVM 模塊。加載了模塊後,才能進一步通過其他工具創建虛擬機。但僅有KVM 模塊是遠遠不夠的,因爲用戶無法直接控制內核模塊去作事情,你還必須有一個運行在用戶空間的工具才行。這個用戶空間的工具,kvm 開發者選擇了已經成型的開源虛擬化軟件 QEMU。說起來QEMU 也是一個虛擬化軟件。它的特點是可虛擬不同的CPU。比如說在x86 的CPU 上可虛擬一個Power 的CPU,並可利用它編譯出可運行在Power 上的程序。KVM 使用了QEMU 的一部分,並稍加改造,就成了可控制 KVM 的用戶空間工具了。所以你會看到,官方提供的 KVM 下載有兩大部分(qemu 和 kvm)三個文件(KVM 模塊、QEMU 工具以及二者的合集)。也就是說,你可以只升級 KVM 模塊,也可以只升級QEMU 工具。這就是 KVM 和QEMU 的關係。 KVM 內核模塊本身只能提供CPU 和內存的虛擬化,所以它必須結合QEMU 才能構成一個完成的虛擬化技術,這就是下面要說的qemu-kvm。

KVM-QEMU

Qemu 將KVM 整合進來,通過 ioctl 調用/dev/kvm 接口,將有關CPU 指令的部分交由內核模塊來做。kvm 負責 cpu 虛擬化+內存虛擬化,實現了 cpu 和內存的虛擬化,但kvm不能模擬其他設備。qemu 模擬 IO 設備(網卡,磁盤等),kvm 加上 qemu 之後就能實現真正意義上服務器虛擬化。因爲用到了上面兩個東西,所以稱之爲qemu-kvm。 Qemu 模擬其他的硬件,如 Network, Disk,同樣會影響這些設備的性能,於是又產生了pass through 半虛擬化設備virtio_blk, virtio_net,提高設備性能。
qemu、kvm、qemu-kvm、openstack、libvert概念講解

LIBVIRT

Libvirt 是管理虛擬機和其他虛擬化功能,比如存儲管理,網絡管理的軟件集合。它包括一個API 庫,一個守護程序(libvirtd)和一個命令行工具(virsh);libvirt 本身構建於一種抽象的概念之上。它爲受支持的虛擬機監控程序實現的常用功能提供通用的 API。 libvirt 的主要目標是爲各種虛擬化工具提供一套方便、可靠的編程接口,用一種單一的方式管理多種不同的虛擬化提供方式。

功能

  1. 虛擬機管理:包括不同的領域生命週期操作,比如:啓動、停止、暫停、保存、恢復和遷移。支持多種設備類型的熱插拔操作,包括:磁盤、網卡、內存和CPU。
  2. 遠程機器支持:只要機器上運行了 libvirt daemon,包括遠程機器,所有的libvirt 功能就都可以訪問和使用。支持多種網絡遠程傳輸,使用最簡單的 SSH,不需要額外配置工作。
  3. 存儲管理:任何運行了libvirt daemon 的主機都可以用來管理不同類型的存儲:創建不同格式的文件鏡像(qcow2、vmdk、raw 等)、掛接NFS 共享、列出現有的LVM 卷組、創建新的LVM 卷組和邏輯卷、對未處理過的磁盤設備分區、掛接iSCSI 共享,等等等等。因爲libvirt 可以遠程工作,所有這些都可以通過遠程主機使用。
  4. 網絡接口管理:任何運行了libvirt daemon 的主機都可以用來管理物理和邏輯的網絡接口。虛擬NAT 和基於路由的網絡:任何運行了libvirt daemon 的主機都可以用來管理和創建虛擬網絡。

    openstack, kvm, qemu-kvm 及 libvirt 之間的關係(照抄自網絡)

    KVM 是最底層的 hypervisor,它是用來模擬 CPU 的運行,它缺少了對 network 和周邊 I/O 的支持,所以我們是沒法直接用它的。QEMU-KVM 就是一個完整的模擬器,它是構建基於KVM 上面的,它提供了完整的網絡和 I/O 支持。Openstack 不會直接控制qemu-kvm,它會用一個叫libvirt 的庫去間接控制qemu-kvm。libvirt 提供了跨 VM 平臺的功能,它可以控制除了 QEMU 之外的模擬器,包括 vmware, virtualbox, xen 等等。所以爲了openstack 的跨 VM 性,所以openstack 只會用 libvirt 而不直接用 qemu-kvm。libvirt還提供了一些高級的功能,例如 pool/vol 管理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章