Openstack(nova)、kvm、qemu和libvirtd之間的聯繫

之前一直不清楚kvm、qemu、libvirtd和nova組件之間的區別和聯繫,今天在網上看了幾篇文章,基本搞清了這幾者之間的關係。下面簡單總結一下。先介紹一下這幾種技術。

一:QEMU

QEMU是一個模擬器,通過動態二進制轉換來模擬cpu以及其他一系列硬件,使guest os認爲自己就是在和真正的硬件打交道,其實是和qemu模擬的硬件交互。這種模式下,guest os可以和主機上的硬件進行交互,但是所有的指令都需要qemu來進行翻譯,性能會比較差。

 

二:KVM

KVM是Linux內核提供的虛擬化架構,它需要硬件硬件CPU支持,比如採用硬件輔助虛擬化的Intel-VT,AMD-V。

KVM通過一個內核模塊kvm.ko來實現核心虛擬化功能,以及一個和處理器相關的模塊,如kvm-intel.ko或者kvm-amd.ko。kvm本身不實現模擬,僅暴露一個接口/dev/kvm,用戶態程序可以通過訪問這個接口的ioctl函數來實現vcpu的創建,和虛擬內存的地址空間分配。

有了kvm之後,guest-os的CPU指令不用再經過qemu翻譯就可以運行,大大提升了運行速度。

但是kvm只能模擬cpu和內存,不能模擬其他設備,於是就有了下面這個兩者合一的技術qemu-kvm。

 

三:QEMU-KVM

qemu-kvm,是qemu一個特定於kvm加速模塊的分支。

qemu將kvm整合進來,通過ioctl調用/dev/kvm,將cpu相關的指令交給內核模塊來做,kvm只實現了cpu和內存虛擬化,但不能模擬其它設備,因此qemu還需要模擬其它設備(如:硬盤、網卡等),qemu加上kvm就是完整意義上的服務器虛擬化

綜上所述,QEMU-KVM具有兩大作用:

  1. 提供對cpu,內存(KVM負責),IO設備(QEMU負責)的虛擬
  2. 對各種虛擬設備的創建,調用進行管理(QEMU負責)

qemu-kvm架構如下:

四:libvirtd

Libvirtd是目前使用最廣泛的對kvm虛擬機進行管理的工具和api。Libvirtd是一個Domain進程可以被本地virsh調用,也可以被遠端的virsh調用,libvirtd調用kvm-qemu控制虛擬機。

libvirtd由幾個不同的部分組成,其中包括應用程序編程接口(API)庫,一個守護進程(libvirtd)和一個默認的命令行工具(virsh),libvirtd守護進程負責對虛擬機的管理,因此要確保這個進程的運行。

 

五:openstack(nova)、kvm、qemu-kvm和libvirtd之間的關係。

kvm是最底層的VMM,它可以模擬cpu和內存,但是缺少對網絡、I/O及周邊設備的支持,因此不能直接使用。

qemu-kvm是構建與kvm之上的,它提供了完整的虛擬化方案

openstack(nova)的核心功能就是管理一大堆虛擬機,虛擬機可以是各種各樣(kvm, qemu, xen, vmware...),而且管理的方法也可以是各種各樣(libvirt, xenapi, vmwareapi...)。而nova中默認使用的管理虛擬機的API就是libvirtd。

簡單說就是,openstack不會去直接控制qemu-kvm,而是通過libvirtd庫去間接控制qemu-kvm。

另外,libvirt還提供了跨VM平臺的功能,它可以控制除了QEMU之外的模擬器,包括vmware, virtualbox, xen等等。所以爲了openstack的跨VM性,所以openstack只會用libvirt而不直接用qemu-kvm

參考:

https://www.cnblogs.com/echo1937/p/7138294.html

https://www.cnblogs.com/qiaoyanlin/p/6888408.html

https://blog.csdn.net/zhaihaifei/article/details/51018113

https://blog.csdn.net/zhaihaifei/article/details/51018113

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