一、KVM虚拟化高频面试题

1、简单介绍KVM

  • KVM是Kernel-based Virtual Machine的简称,一个开源的系统虚拟化模块,使用Linux自身的调度器进行管理,KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。

2、kvm的三个组件及作用

  1. kvm:负责cpu虚拟化+内存虚拟化
  2. qemu:负责IO的虚拟化
  3. libvirt:是调用kvm虚拟化技术的接口用于管理的

3、磁盘镜像格式raw和qcow2的区别

  • raw:创建时占用全部容量,不支持动态扩容,不支持快照,性能好
  • qcow2:写时复制,开始只占用少许容量,支持动态扩容,性能不如raw

4、虚拟机文件中配置文件和硬盘文件分别在哪哥路径下

  • 虚拟机配置文件,XML文件,位置 :/etc/libvirt/qemu/
  • 虚拟机硬盘文件,位置:/var/lib/libvirt/images/

5、kvm虚拟机的网络配置有哪两种模式?默认使用哪一种?

  • NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问公网,但是无法从外部访问虚拟机网络,kvm默认用的这种网络。
  • Bridge:也就是桥接模式,这种模式允许虚拟机像一个独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。

6、KVM三种工作模式 

  1. 客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下
  2. 用户模式:用户执行I/O代码,QEMU运行在这个模式下
  3. 内核模式:CPU调度和内存管理相关,KVM内核模块运行在该模式下

7、什么是虚拟化技术

  • 虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

 8、kvm支持哪些虚拟磁盘格式?

  • kvm从qemu继承了丰富的磁盘格式, 包括裸映象(raw images), 原始qemu格式(qcow), VMware格式和更多

9、kvm和VMware有何区别?

  • VMware是一个专利产品.,企业级的是收费的。
  • kvm是一个开源的系统虚拟化软件。

10、Libvirt 包含 哪3 个组件?

  • libvirtd是服务程序,接收和处理 API 请求;
  • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
  • virsh 是我们经常要用的 KVM 命令行工具

二、KVM虚拟化常用命令

  • vm为虚机的名字

#列出正在运行的虚机
virsh list

#列出所有的虚拟机
virsh list --all

#查看virsh的版本
virsh version

#启动虚机
virsh start vm

#关闭虚机
virsh shutdown vm

#强制性关闭该虚拟机,相当于强行断电
virsh destroy vm

#将虚机的配置文件导出到/tmp/目录下,并命名为vm.xml
virsh dumpxml centos7-2 > /tmp/vm.xml

#虚拟机自启动
virsh autostart vm

#虚拟机自启动撤销
virsh autostart --disable vm

#虚拟机克隆
virt-clone -o 【原虚拟机】 -n 【新虚拟机】 -f 【新虚拟机镜像名(含路径)】
virt-clone -o vm-1 -n vm-2 -f /var/lib/libvirt/images/vm-2.img

#查看虚拟机镜像
qemu-img info vm.img

#创建快照
virsh snapshot-create vm

#列出虚机快照
virsh snapshot-list vm
qemu-img info vm

#指定虚拟机名字创建快照
virsh snapshot-create-as 【虚拟机名】 【快照名】
virsh snapshot-create-as vm snapshot-vm

#查看该虚拟机当前使用的快照
virsh snapshot-current vm

#恢复快照
virsh snapshot-revert 【虚拟机名】 【快照名】
virsh snapshot-revert vm snapshot-vm

#删除快照
virsh snapshot-delet vm snapshot-vm

#定义存储池与其目录
virsh pool-define-as vmdisk --type dir --target /data/vmfs

#创建已定义的存储池
virsh pool-build vmdisk

#激活已定义的存储池
virsh pool-start vmdisk

#自动启动已定义的存储池
virsh pool-autostart vmdisk

#查看已定义的存储池
virsh pool-list --all

#在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk test.qcow2 3G --format qcow2


整合一下如下:

#列出正在运行的虚机
virsh list#列出所有的虚拟机
virsh list --all#查看virsh的版本
virsh version#启动虚机
virsh start vm#关闭虚机
virsh shutdown vm#强制性关闭该虚拟机,相当于强行断电
virsh destroy vm#将虚机的配置文件导出到/tmp/目录下,并命名为vm.xml
virsh dumpxml centos7-2 > /tmp/vm.xml#虚拟机自启动
virsh autostart vm#虚拟机自启动撤销
virsh autostart --disable vm#虚拟机克隆
virt-clone -o 【原虚拟机】 -n 【新虚拟机】 -f 【新虚拟机镜像名(含路径)】
virt-clone -o vm-1 -n vm-2 -f /var/lib/libvirt/images/vm-2.img#查看虚拟机镜像
qemu-img info vm.img#创建快照
virsh snapshot-create vm#列出虚机快照
virsh snapshot-list vm
qemu-img info vm#指定虚拟机名字创建快照
virsh snapshot-create-as 【虚拟机名】 【快照名】
virsh snapshot-create-as vm snapshot-vm#查看该虚拟机当前使用的快照
virsh snapshot-current vm#恢复快照
virsh snapshot-revert 【虚拟机名】 【快照名】
virsh snapshot-revert vm snapshot-vm#删除快照
virsh snapshot-delet vm snapshot-vm#定义存储池与其目录
virsh pool-define-as vmdisk --type dir --target /data/vmfs#创建已定义的存储池
virsh pool-build vmdisk#激活已定义的存储池
virsh pool-start vmdisk#自动启动已定义的存储池
virsh pool-autostart vmdisk#查看已定义的存储池
virsh pool-list --all#在存储池中创建虚拟机存储卷
virsh vol-create-as vmdisk test.qcow2 3G --format qcow2

三、KVM虚拟化架构解析

虚拟化面试宝典 虚拟化面试会问什么_虚拟化

  • 从rhel6开始使用,红帽公司直接把KVM的模块做成了内核的一部分。
  • xen用在rhel6之前的企业版中默认内核不支持,需要重新安装带xen功能的内核
  • KVM 针对运行在x86 硬件上的、驻留在内核中的虚拟化基础结构。KVM 是第一个成为原生 Linux 内核 (2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。这个hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC@ 和A64的通道。另外,KM 最近还添加了对对称多处理(SMP)主机(和来宾)的支持,并且支持企业级特性,比如活动迁移(允许来宾操作系统在物理服务器之间迁移)。
  • KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。KVM为支持 hypervisor 指令的硬件平台提供完整的虚拟化(比如 ntel@ Virtualization Technology [lntel VT] 或AMD Virtualization[AMD-V] 产品)。KVM 还支持准虚拟化来宾操作系统,包括 Linux和 Windows。
  • 这种技术由两个组件实现。第一个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以管理虚拟化硬件,并通过/proc 文件系统公开其功能。第二个组件用于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU作为用户空间进程执行,并且在来宾操作系统请求方面与内核协调。
  • 当新的操作系统在 KVM 上启动时(通过一个称为 KVM 的实用程序),它就成为宿主操作系统的一个进程,因此就可以像其他进程一样调度它。但与传统的 Linux 进程不一样,来宾操作系统被 hypervisor 标识为处于“来宾”模式(独立于内核和用户模式)。
  • 每个来宾操作系统都是通过 /dev/KVM 设备映射的,它们拥有自己的虚拟地址空间,该空间映射到主机内核的物理地址空间。如前所述,KVM 使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。I/0 请求通过主机内核映射到在主机上 (hypervisor) 执行的 QEMU进程
  • KVM 在 Linux 环境中以主机的方式运行,不过只要底层硬件虚拟化支持,它就能够支持大量的来宾操作系统.