参考链接
- 虚拟化工程师之路
-
[KVM虚拟化常见面试题 常用命令整理](https://blog.csdn.net/weixin_43313333/article/details/128904292) - 常用虚拟化命令
- kvm面试题
- 20 Linux Virtualization Interview Questions and Answers
- 腾讯云csig虚拟化部门一面面经
- 30 个 Openstack 经典面试问题和解答
- 磁盘扩容
1. kvm 常用操作
1.1 如何修改虚拟机密码
用户密码重设通常使用libguestfs-tools 工具集内的virt-customize命令重设
#0. 安装libguestfs-tools
yum -y install libguestfs-tools
#1. 确认实例已关机
virsh list --all | grep ${instance_name}
#2. 修改其系统盘密码
virt-customize -a /opt/${instance_name}.img --root-password password:test-123456
#3. 重启登录
virsh start ${instance_name}
virsh console ${instance_name}
# ctrl+']' 退出登录
1.2 如何制作镜像
使用官网标准镜像创建虚拟机,并进行安装。以rock-linux为例
- 创建数据盘
# 拉取最新的 Rocky 镜像 wget -c https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.3-x86_64-minimal.iso /tmp/ # 创建系统盘 qemu-img create -f qcow2 /tmp/rocky-test-disk1.qcow2 50G
- 创建虚拟机
#!/bin/bash
virt-install \
--name rocky-test \ # 设置名称
--graphics vnc,listen='0.0.0.0',port=5920 \ # 设置vnc
--memory=8192,maxmemory=16384 \ # 设置内存8~16GB
--vcpus=2,maxvcpus=4 \ # 设置cpu
--cdrom=/tmp/Rocky-9.3-x86_64-minimal.iso \ # 设置启动镜像
--disk /tmp/rocky-test-disk1.qcow2,size=50,format=qcow2 \ # 添加数据磁盘
--network bridge=bridge0,model=virtio \ # 设置网络为bridge0 模式
--hvm \
--virt-type kvm \ #设置虚拟化方式
--autostart \
--os-type=linux \
--os-variant=rocky9.3 // 这行如果报错的话可以去掉
- vnc 登录安装
前往vnc官网,下载VNC-viewer。并使用
${宿主机地址}:5920
进行VNC登录。成功后进行如下设置- 设置Time & Date (一般都是Shanghai)
- 设置ROOT 登录密码(RootPassword)
- 选择软件最小安装(Software Selection)
- 设置网络和主机名
- 设置设置安装位置并对系统盘进行分区
- 安装完后重启
- 关闭防火墙和selinux
# 关闭防火墙
systemctl disable firewalld.service --now
# 关闭selinux
vim /etc/selinux/config
# 设置SELINUX=disabled
# 设置强制
setenforce 0
# 查询信息
getenforce
- 清除个性化设置并压缩镜像
# 清除主机个性化设置
virt-sysprep -d rocky-test
# 压缩镜像
virt-sparsify --compress rocky-test.qcow2 rocky-test-02.qcow2
1.3 virsh 常用命令
-
virsh
:直接进交互模式 -
virsh nodeinfo
:查看KVM节点(服务器)信息 -
virsh list
:列出正在运行的虚拟机 -
virsh list --all
:列出所有虚拟机(包括未启动的) -
virsh dominfo
虚拟机名称:查看指定虚拟机的信息 -
virsh start
虚拟机名称:将指定的虚拟机开机 -
virsh reboot
虚拟机名称:将指定的虚拟机重启 -
virsh shutdown
虚拟机名称:将指定的虚拟机正常关机 -
virsh destroy
虚拟机名称:将指定的虚拟机强制关机(相当于拔电源) -
virsh autostart
虚拟机名称:将指定的虚拟机设置随KVM自动开机 -
virsh autostart --disable
虚拟机名称:禁止自动开机 -
virsh dumpxml centos7-2 > /tmp/vm.xml
: 导出虚拟机配置 -
virsh console ins-xx
:进入虚拟机控制台 -
virt-clone -o 【原虚拟机】 -n 【新虚拟机】 -f 【新虚拟机镜像名(含路径)】
: 复制虚拟机 -
qemu-img info vm.img
: 查看虚拟机镜像 -
virsh snapshot-create vm
: 创建快照(快照包含内存信息) -
virsh snapshot-list vm
: 查询虚拟机快照 -
virsh snapshot-create-as 【虚拟机名】 【快照名】
: 根据快照创建虚拟机 -
virsh snapshot-current vm
: 查询虚拟机当前快照 -
virsh snapshot-revert 【虚拟机名】 【快照名】
: 将虚拟机恢复至快照状态 -
virsh snapshot-delet vm snapshot-vm
: 删除快照 -
virsh pool-define-as vmdisk --type dir --target /data/vmfs
: 定义存储池与目录 -
virsh pool-build vmdisk
: 创建已定义的存储池(kvm存储池和存储卷,KVM存储池,kvm-存储池基础介绍、创建) -
virsh pool-start vmdisk
: 激活已经定义的存储池 -
virsh pool-autostart vmdisk
: 启动已定义存储池 -
virsh pool-list --all
: 查询所有存储池 -
virsh vol-create-as vmdisk test.qcow2 3G --format qcow2
: 在存储池中创建虚拟机存储卷
1.4 实例创建和恢复快照
# 1. 创建快照
virsh snapshot-create-as linux_mini new-snapshot
# 2. 查询快照
virsh snapshot-list linux_mini
# 3. 使用快照恢复虚拟机
virsh snapshot-revert linux_mini new-snapshot
# 4. 查询虚拟机当前快照
virsh snapshot-current linux_mini
# 5. 删除快照--存在未删除快照,无法undefine实例
virsh snapshot-delete linux_mini linux_min-snap
注意:存在hostdev 设备的不支持闪照
error: Operation not supported: cannot migrate a domain with <hostdev mode='subsystem' type='pci'
针对这种情况需要弃盘迁移。不能支持快照和冷迁移。腾讯云也是这么玩的
1.5 实例热迁移
# 迁移到目标地址
virsh migrate <虚拟机名称> qemu+ssh://<目标主机IP地址>/system
# 迁移并指定参数
virsh migrate --live <虚拟机名称> qemu+ssh://<目标主机IP地址>/system
# 查询迁移进度
virsh domjobinfo <虚拟机名称>
# 取消迁移
virsh migrate-cancel <虚拟机名称>
1.6 实例重装镜像
# 0. 关闭对应实例
virsh shutdown ins-xxx
# 1. 删除实例原有系统盘镜像
mv /data/instance/ins-xxx/ldisk-xxx.qcow2 /data/instance/ins-xxx/ldisk-xxx-bak.qcow2
# 2. 创建新的实例系统盘
wget -c xxxx.qcow2 /data/instance/ins-xxx/ldisk-xxx.qcow2
# 3. 设置网卡基本信息
sed -i '/^IPADDR=/c'IPADDR=$instanceIP ifcfg-eth0
sed -i '/^GATEWAY=/c'GATEWAY=$gateway ifcfg-eth0
sed -i '/^NETMASK=/c'NETMASK=$netmask ifcfg-eth0
# 4. 将网卡配置文件拷贝到目标镜像中
## linux
virt-copy-in -a /data/instance/ins-xxx/ldisk-xxx.qcow2 ifcfg-eth0 /etc/sysconfig/network-scripts/
## windows
yum install libguestfs-winsupport.x86_64 dos2unix -y
unix2dos ifcfg-eth0
virt-copy-in -a "$imgPath/$diskID".qcow2 ifcfg-eth0 /"Windows"/
# 5. 重新拉起实例
virsh define
注意:虚拟机vnc登录,使用端口号加:
的形式进行登录
使用如下命令查询,实例对应的vnc端口
virsh vncdisplay ins-xxxx
# :0 表示5900
# :1 表示5901
1.6 加载usb设备
# 1. 查询主机对应usb
sudo yum -y install usbutils pciutils
lsusb
# Bus 001 Device 004: ID 287f:00f8
# 2. 生成usb.xml
sudo yum install -y virt-install
virt-xml --build-xml --hostdev 287f:00f8,type=usb > add-usb.xml
#<hostdev mode="subsystem" type="usb" managed="yes">
# <source>
# <vendor id="0x287f"/>
# <product id="0x00f8"/>
# </source>
# </hostdev>
# 3. 进行挂载
virsh attach-device amzn2 add-usb.xml --live
#OPTIONS
# [--domain] <string> domain name, id or uuid
# [--file] <string> XML file
# --persistent make live change persistent
# --config affect next boot
# --live affect running domain
# --current affect current domain
# 4. 进行移除
virsh detach-device amzn2 add-usb.xml
# 快速步骤
# 添加
virt-xml amzn2 --update --add-device --hostdev 21c4:0cd1,type=usb
# 删除
virt-xml amzn2 --update --remove-device --hostdev 21c4:0cd1,type=usb
2. 腾讯云csig虚拟化部门一面面经
2.1 启动一个vm的流程,libvirt,qemu,kvm分别都做了哪些工作
在启动一个虚拟机的过程中,libvirt会通过调用QEMU和KVM的API来创建并启动虚拟机。具体的流程包括以下步骤:
- libvirt加载虚拟机的定义和配置信息。
- libvirt调用QEMU创建虚拟机的运行环境,并加载虚拟机的镜像文件。
- QEMU启动虚拟机,并模拟虚拟机的硬件设备。
- KVM管理虚拟机的内存和CPU资源,并将虚拟机的指令转换为物理主机的指令。
- 参考:libvirt官方文档
2.2 虚拟内存槽memslot
虚拟内存槽主要是指 kvm_memslot 是虚拟机用来组织物理内存结构的关键数据结构。 维护了GPA到HVA的映射关系
也是虚拟机内存管理的核心关键。其主要操作流程如下所示:
2.3 热迁移了解多少,迁移流程
2.4 脏页迭代流程,脏页位图,脏环,pml
2.5 gva到hpa转换过程
2.6 ebpf简要介绍一下,介绍ebpf项目中的vm exit ,mmu page fault,halt polling
2.7 使用ebpf技术对kvm进行观测,会对虚拟机产生性能影响吗
2.8 KVM内存虚拟化是怎么是怎么实现的?
追问:EPT页表如何实现 追问:Guest通过EPT页表访问要经过多少次访存 追问:SPT和EPT的优缺点,什么场合适合使用SPT或者EPT
2.9 KVM中CPU虚拟化是如何实现的
2.10 问了一下KVM和OpenStack/XEN的区别
2.11 Docker的命名空间有哪些
2.12 Docker的四种网络类型
2.13 IOMMU 介绍一下
IOMMU 是一种硬件功能,于将输入/输出设备的内存访问隔离,以防止设备对系统内存的非法访问。这对于虚拟化环境特别有用,因为它允许虚拟机对硬件设备进行独占访问,并且不会影响到其他虚拟机。
如果您正在使用虚拟化软件,并且需要为虚拟机提供独占访问硬件设备,那么您应该开启 IOMMU 功能。但是,如果您不使用虚拟化软件,或者不需要独占访问硬件设备,那么您可以不开启 IOMMU 功能。
3. 字节二面面经
3.1 qemu-kvm的虚拟化过程讲一讲?
3.2 虚拟机上硬件设备如何模拟的?
3.3 vruntime和进程的优先级有什么关系?(查阅之后:虚拟运行时间 vruntime += 实际运行时间 delta_exec * NICE_0_LOAD/ 权重)
3.4 virtio中的VM Exit状态了解吗?什么时候会出现这个状态?
3.5 调度系统中的sched_entity知道吗?
3.6 操作系统中的虚拟地址转换物理地址的全过程?
3.7 了解内存虚拟化的影子页表,EPT技术吗?
4. 百度一面
1 Linux kvm,GPU 直通,SRIOV
2. CPU架构,NUAM,SMP
3. Guest OS发个网络请求,到Host OS,再到硬件的过程
4. CPU ***结构,是否共享
5. 腾讯os内核虚拟化面经
6. KVM 常见面试题
1. 简单介绍一下KVM
KVM是Kernel-based Virtual Machine的简称,一个开源的系统虚拟化模块,使用Linux自身的调度器进行管理,KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。
2. KVM的三个组件及作用
- KVM:内核虚拟化模块,负责CPU虚拟化与内存虚拟化
- qemu: 负责设备虚拟化,包含IO设备、usb设备,串口设备等
- libvirt: 虚拟化综合管理工具,封装kvm/qemu接口,用于快速操作虚拟机
3. 磁盘镜像格式raw和qcow2的区别
虚拟机常见的磁盘格式有如下几种:
- qcow2(cow/qcow/qcow3): qemu 主要镜像格式。支持写复制、动态扩容、压缩、AES加密,但是读写性能相对raw较差。
- raw: 原始数据格式,可以直接由dd命令生成。较为原始。创建时占用全部容量,不支持动态扩容,不支持快照,性能好
- vmdk: VMware的格式,使用较少
- 格式转换:可以使用如下命令进行格式转换
# qcow2 -> raw
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/centos7.0.raw
# 使用StarWind V2V Image Converter 工具进行镜像格式转换
4. 虚拟机文件中配置文件和硬盘文件分别在哪些路径下
- 虚拟机配置文件,XML文件,位置 :/etc/libvirt/qemu/
- 虚拟机硬盘文件,位置:/var/lib/libvirt/images
5. kvm虚拟机的网络配置有哪两种模式?默认使用哪一种?
- NAT模式:也是用户模式,数据包由NAT方式通过主机的接口进行传送,可以访问公网,但是无法从外部访问虚拟机网络,kvm默认用的这种网络。
- Bridge:也就是桥接模式,这种模式允许虚拟机像一个独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。
6. KVM三种工作模式
- 客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下
- 用户模式:用户执行I/O代码,QEMU运行在这个模式下
- 内核模式:CPU调度和内存管理相关,KVM内核模块运行在该模式下
7. 什么是虚拟化技术
虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
8. kvm支持哪些虚拟磁盘格式?
kvm从qemu继承了丰富的磁盘格式, 包括裸映象(raw images), 原始qemu格式(qcow), VMware格式和更多
9. Libvirt 包含 哪3 个组件?
- libvirtd: 宿主机daemon程序,用于接收和处理 API 请求;
- virsh: 常用KVM命令管理工具
- api库:常用的libvirt开发高级工具,如 virt-manager
10. 说一下KVM虚拟化架构
KVM 主要虚拟化架构如下:
11. virsh shutdown与destory的区别
12. 添加USB设备
13. 腾讯云设备对比
2.5GHz Intel® Xeon® Cascade Lake 处理器,计算性能稳定。
搭配最新一代六通道 DDR4 内存。
最高可支持23Gbps内网带宽,满足极高的内网传输需求。
采用 NVMe SSD 的实例存储,提供低延迟、超高的 IOPS。
单盘随机读性能高达65万 IOPS(4KB块大小),顺序读吞吐能力高达2.8GB/s(128KB块大小)。
整机随机读性能高达205万 IOPS(4KB块大小),顺序读吞吐能力均高达11GB/s(128KB块大小)。
支持关闭或开启超线程配置。
内部高IO
一个机架4个机位100台