KVM, QEMU, libvirt, Proxmox 之间的关系

C 2019-5-8 3309

不同的基于KVM的虚拟化平台,可能会采用不同的虚拟化组件,目前主流的采用QEMU-KVM组件,但在不同的产品里版本有所不同,功能也有差异,下面就几个概念进行梳理下。


KVM:Kernel-Based Virtual Machine 基于内核的虚拟机,是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),是一种全虚拟化架构。KVM在2007年2月被导入Linux 2.6.20内核中。从存在形式来看,它包括两个内核模块:kvm.ko  和  kvm_intel.ko(或kvm_amd.ko),本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责vCPU的创建,虚拟内存的分配,vCPU寄存器的读写以及vCPU的运行。


QEMU:是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。QEMU有两种工作模式:系统模式,可以模拟出整个电脑系统,另一种是用户模式,可以运行不同与当前硬件平台的其他平台上的程序(比如在x86平台上运行跑在ARM平台上的程序);其代码地址 http://git.qemu.org/qemu.git  ,有兴趣的同学可以自己去看看,目前最新的版本是2.7.0,在0.9.1及之前版本还可以使用kqemu加速器(可以理解为QEMU的一个插件,用来提高QEMU的翻译性能,支持Windows平台),但1.0以后版本就只能使用qemu-kvm(只支持Linux)进行加速了,1.3版本后QEMU和QEMU-KVM合二为一了。


QEMU-KVM:从前面对KVM内核模块的介绍知道,它只负责CPU和内存的虚拟化,加载了它以后,用户就可以进一步通过工具创建虚拟机(KVM提供接口),但仅有KVM还是不够的,用户无法直接控制内核去做事情(KVM只提供接口,怎么创建虚拟机,分配vCPU等并不在它上面进行),还必须有个运行在用户空间的工具才行,KVM的开发者也想进一步实现完整虚拟化,但自己懒得搞。于是就选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,并对其进行了修改,最后形成了QEMU-KVM,作为KVM的扩展模块使用,实现完整的虚拟化。


在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,实际模拟创建,管理各种虚拟硬件。后来QEMU作者觉得那边KVM老从他这抄代码挺费事的,直接把KVM整合了进来,至此QEMU-KVM模块正式成为QEMU的一部分,KVM也省得再去修改QEMU了。至此想实现完整的虚拟化,只需要安装KVM,再安装QEMU,然后KVM对接QEMU就可以了。


当然,由于qemu模拟io设备效率不高的原因,现在常常采用半虚拟化的virtio方式来虚拟IO设备,另文再谈。

综上所述,QEMU-KVM具有两大作用:

1.提供对cpu,内存(KVM负责),IO设备(QEMU负责)的虚拟

2.对各种虚拟设备的创建,调用进行管理(QEMU负责)

单独运行KVM虽然无法模拟完整的系统运行环境,但可以进行硬件模拟。这个常用于机房硬件管理,利用自动化机器人+KVM的模拟方式,将独立服务器通过KVM模拟为对象进行管理,从而实现通过Web端全自动实现服务器启动、断电、重装等操作。


libvirt:顺带提一提libvirt,这是RedHat开始支持KVM后,大概是觉得QEMU+KVM方案中的用户空间虚拟机管理工具不太好用或者通用性不强,所以干脆搞了个libvirt出来,一个针对各种虚拟化平台的虚拟机管理的API库,一些常用的虚拟机管理工具如virsh(类似vim编辑器),virt-install,virt-manager等和云计算框架平台(如OpenStack,OpenNebula,Eucalyptus等)都在底层使用libvirt提供的应用程序接口。

libvirt主要由三个部分组成:API库,一个守护进程 libvirtd 和一个默认命令行管理工具 virsh。


Proxmox:就是一个虚拟化管理器,可以基于LXC创建虚拟环境,也可以基于KVM创建。和上述虚拟化技术有本质上的区别,和libvirt地位类似。Proxmox只能运行在Debian系统上,所以libvirt是对CentOS下虚拟化管理器的一个很好的补充。


总结:

目前来说,QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU

即使后来RedHat后来开发了libvirt,也只能简单的认为是个虚拟机管理工具,仍然需要通过用户空间QEMU来与KVM进行交互


---------------------

作者:dAng1r0Us

来源:CSDN

原文:https://blog.csdn.net/shengxia1999/article/details/52244119

本文经过发帖人修改,如有不正确之处均为发帖人失误,与原文作者无关。

最新回复 (0)
返回
发新帖