Linux虚拟机-KVM虚拟机常用的几个组件
前言
kvm虚拟机是Linux常用的虚拟机。使用kvm虚拟机都会涉及到QEMU、KVM以及libvirt等组件,还有一些命令行或者图形工具,比如virsh、virt-manager等。那这几个是什么关系呢?
QEMU
QEMU提供了一个开源的全虚拟化的解决方案,可以在特定平台的物理机上模拟出其他平台的处理器、硬盘、显卡等等。对于虚拟机系统来说,这些虚拟组件就跟物理机上的一样。QEMU可以作为用户空间工具与内核的KVM结合使用,充分发挥KVM的功能。
KVM
KVM是Linux内核中的可加载的木块,是一个基于内核的虚拟机。在硬件支持虚拟化(intel VT,AMD-V)的X86平台上实现了全虚拟化功能,由于用户不能直接操作内核,因此需要一个用户空间工具进行操作,通过与QEMU的结合,就可以通过QEMU去操作KVM虚拟机。
libvirt
libvirt是为了更方便地管理平台虚拟化技术而设计的开放源代码的应用程序接口、守护进程和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理。尽管libvirt项目最初是为Xen设计的一套API,但是目前对KVM等其他Hypervisor的支持也非常的好。libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMware、VirtualBox等在内的平台虚拟化方案,又支持OpenVZ、LXC等Linux容器虚拟化系统,还支持用户态Linux(UML)的虚拟化。
libvirt其实质就是对针对不同的hypervisor的命令进行了一个封装,libvirt针对不同的开发语言提供了api接口,如python、c等;libvirtd是linux的一个守护进程,使用libvirt必须先启动这个守护进程。
其他组件
因为libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口(API),而且一些常用的虚拟机管理工具(如virsh、virt-install、virt-manager等)和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用libvirt的应用程序接口。
libvirt作为中间适配层,让底层Hypervisor对上层用户空间的管理工具是可以做到完全透明的,因为libvirt屏蔽了底层各种Hypervisor的细节,为上层管理工具提供了一个统一的、较稳定的接口(API)。
总结
KVM是内核的模块,QEMU是提供虚拟化的组件,用户操作KVM模块,libvirt提供一整套的API,用于管理KVM虚拟机,其他图形化界面(virt-manager等)可以通过libvirt管理kvm虚拟机。