QEMU-KVM介绍
- QEMU
● QEMU是一个主机上的VMM (Virtual machine monitor), 通过动态二进制模拟CPU,并提供一系列的硬件模型,使Guest OS能够与Host硬件交互。
● QEMU的代码中有完整的虚拟机实现,包括cpu虚拟化、内存虚拟化、以及I/O虚拟化 。
● 它可以模拟多种硬件架构(如x86、ARM等),并且可以与KVM结合使用来提供完整的虚拟化解决方案。 - KVM
● KVM全称 “Kernel-Based Virtual Machine”, 是基于内核的虚拟机,它由一个 Linux 内核模块组成,该模块可以将Linux变成一个Hypervisor。
● KVM主要实现CPU、内存和中断的虚拟化。
● KVM通过一组ioctl向用户空间导出接口,这些接口能够用于虚拟机的创建、虚拟机内存的设置、虚拟机vCPU的创建与运行等。
● KVM从 Linux 2.6.20起作为一个模块包含到Linux内核中。
在QEMU/KVM的框架中,KVM是运行在内核空间,QEMU运行在用户空间,QEMU将 KVM整合了进来,通过打开/dev/kvm,从而将CPU指令的部分交给内核模块来做。 KVM实现了CPU和内存的虚拟化,QEMU模拟IO设备(磁盘,网卡,显卡等),KVM加上QEMU后就是完整意义上的服务器虚拟化。
KVM上层管理工具
- libvirt
● libvirt是一个开源库,它提供统一接口供上层调用,同时对下层各种类型hypervisor进行封装
● 它是管理虚拟机、存储、网络的一系列软件集合
● 它包括一个API库、一个daemon程序(libvirtd)和一个命令行工具(virsh)
● 它作为中间适配层,让底层hypervisor对上层用户空间的管理程序做到完全透明
● 使用XML来定义各种虚拟机相关的受管理对象。一些常用的虚拟机管理工具和云管平台实际调用的都是libvirt提供的接口。 - virsh
● virsh是一个管理KVM虚拟机的命令行工具
● virsh是用c语言编写的
● 是libvirt的一部分
● virsh是管理单个虚拟机最好的工具 - virt-manager
● virt-manager是一个图形化管理工具
● virt-manager底层调用的依然是libvirt API - OpenStack
● OpenStack是一个开源的基础架构即服务(IaaS)的云计算管理平台
● OpenStack提供了非常强大的功能,如对象存储、块存储、网络、镜像、身份验证、编排服务、控制面板
● OpenStack同样也是调用libvirt API
虚拟网卡流程
查看要使用网卡的pci设备地址。
lshw -C network -businfo
假设要虚拟网卡pci设备地址为0001:01:00.0,使用如下命令生成一个虚拟网卡
echo 1 > /sys/bus/pci/devices/0001\:01\:00.0/sriov_numvfs
查看虚拟出来的网卡
lspci | grep -i Ethernet
#lshw -C network -businfo
网卡透访流程
查看要透访的网卡pci设备地址。
注意:透访后物理机中无法继续使用该网卡
编辑虚拟机配置文件,配置pci网卡设备地址。
virsh edit <虚拟机名称>
#在配置文件devices部分加入
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
# 填写pci设备的总线号 设备号等
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</hostdev>
启动虚拟机后在虚拟机内就可以看到透访的网卡。