KVM虚拟化基础二(QEMU,KVM,Hypervisor,Libvirt)
QEMU是什么?
QEMU is a generic and open source machine emulator and virtualizer QEMU官网
QEMU是一套由 Fabrice Bellard 开发者编写的模拟处理器的自由软件,是一个完整的可以单独运行的软件。可独立模拟出整台计算机(CPU/内存/IO设备)它是通过一个特殊的"重编译器"对特定的处理器(CPU)的二进制代码进行翻译转换来提供一系列的硬件模拟,使Guest OS认为自己和硬件直接打交道(其实是同QEMU模拟出来的硬件打交道)。QEMU再将这些指令翻译给真正硬件进行操作,通过这种模式Guest OS可以和主机上的各种IO类及USB设备等进行交互。但由于其所有指令都需要经过QEMU来翻译因而性能会比较差(存软件模拟);
QEMU有两种工作模式:系统模式:可模拟出整个电脑系统
用户模式:可运行不同与当前硬件平台的其他平台上的程序(如在x86平台上运行跑在ARM平台上的程序)
代码地址:目前最新的版本是3.1,在1.3之后QEMU和QEMU-KVM合二为一叫QEUMU-KVM
QEMU 代码
KVM 是什么?
红帽的官网KVM知识点参考 红帽官网
KVM的知识点社区参考 KVM社区
KVM(Kernel -base-virtual machine)实际上是类Linux发行版内核中提供的虚拟化技术(内核级虚拟化),可将内核直接充当Hypervisor来使用,在内核中独立存在可动态加载。
注意:其处理器(CPU)自身必须支持虚拟化扩展
工作原理:
KVM包含一个内核模块kvm.ko其用来实现核心虚拟化功能,以及一个和处理器强相关的模块 kvm-intel.ko或kvm-amd.ko。KVM本身不实现任何模拟仅仅是暴露了一个 /dev/kvm 接口。这个接口可被宿主机用来主要负责vCPU的创建、虚拟内存的地址空间分配、vCPU寄存器的读写以及vCPU的运行。有了KVM以后Guest OS的CPU指令不用再经过QEMU来转译便可直接运行,大大提高了运行速度。但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,其它网络等IO的支持需配合另一组件 QEMU-KVM;
动态装载:
如果装载了kvm模块内核立即变为僵尸并变成了Hypervisor(悄悄并腐蚀了寄生在内核级宿主机之上的Hypervisor)用户空间就变为了其中一台虚拟机的管理控制台,完全寄生不驱动任何驱动管理程序;
Hypervisor 是什么?
通俗来讲 Hypervisor 是一种将操作系统与硬件抽象分离的一种技术实现方法。一种运行在物理服务器和操作系统之间的中间软件层(可以是软件程序,也可以是固件程序);
它允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的"元"操作系统;
它可以协调访问服务器上的所有物理设备和虚拟机,当服务器启动并执行Hypervisor时它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统,它能够使得这些虚拟机可高效地去分享物理服务器的硬件资源。也叫虚拟机监视器VMM(Virtual Machine Monitor);
Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能;
Hypervisor 翻译过来就是超级监督者,被引申为超级管理程序、超多功能管理器、虚拟机管理器、VMM;
Hypervisor(主机虚拟化)的两种类型1型虚拟化:在硬件上跑的不是宿主机(直接跑的是虚拟化软件,需驱动底层硬件)所创建每个主机都是虚拟机
2型虚拟化:在硬件安装操作系统(操作系统安装虚拟软件vmware,virtualbox)
Libvirt 是什么?
社区站点:libvirt 社区站点
这是 RedHat 开始支持KVM后搞的一个用户空间虚拟机管理工具。目标是提供一个单一途径以管理多种不同虚拟化方案以及虚拟化主机,其包括:KVM/QEMU,Xen,LXC,OpenVZ 或 VirtualBox hypervisors等 ;
它Libvirt内置的API广泛用于云解决方案开发中的虚拟机监视器编排层(Orchestration Layer)。常用的管理工具如,virsh,virt-install,virt-manager等;
Libvirt 的一些主要功能
- VM management(虚拟机管理)
各种虚拟机生命周期的操作,如:启动、停止、暂停、保存、恢复和迁移等;多种不同类型设备的热插拔操作,包括磁盘、网络接口、内存、CPU等
- Remote machine support(支持远程连接)
Libvirt 的所有功能都可以在运行着 libvirt 守护进程的机器上执行,包括远程机器。通过最简便且无需额外配置的 SSH 协议,远程连接可支持多种网络连接方式
- Storage management(存储管理)
任何运行 libvirt 守护进程的主机都可以用于管理多种类型的存储:创建多种类型的文件镜像(qcow2,vmdk,raw,...),挂载 NFS 共享,枚举现有 LVM 卷组,创建新的 LVM 卷组和逻辑卷,对裸磁盘设备分区,挂载 iSCSI 共享,以及更多......
- Network interface management(网络接口管理)
任何运行 libvirt 守护进程的主机都可以用于管理物理的和逻辑的网络接口,枚举现有接口,配置(和创建)接口、桥接、VLAN、端口绑定
- Virtual NAT and Route based networking(虚拟 NAT 和基于路由的网络)
任何运行 libvirt 守护进程的主机都可以管理和创建虚拟网络。Libvirt 虚拟网络使用防火墙规则实现一个路由器,为虚拟机提供到主机网络的透明访问
安装:安装 libvirt 以及至少一个虚拟运行环境(hypervisor)
基于守护进程/客户端架构的 libvirt 只需装在需要实现虚拟化的机器上,服务及客户端可以是相同的物理机器
Libvirt 的 KVM/QEMU 驱动
KVM/QEMU驱动站点Archlinux站点上的Libvirt参考?
libvirt wiki 参考