<aside>

本文介绍在Intel处理器的Linux系统(yum包管理)上配置KVM虚拟机的完整流程,包括环境配置、虚拟机创建和设备直通等内容。

</aside>

宿主机环境准备

  1. 确认支持硬件虚拟化:lscpu | grep virtual ,出现VT-x类似字样(intel)说明cpu支持硬件虚拟化。

  2. *(only for 设备直通 vfio)*确认内核开启 iommu 并设置 passthrough:cat /proc/cmdline ,查看内核选项是否包含intel_iommu=on iommu=pt

    1. 没有,需要手动添加参数并重启:

      yum install grubby
      grubby --update-kernel=DEFAULT --args="intel_iommu=on iommu=pt"
      grubby --info=DEFAULT #confirm
      reboot
      
    2. 继续

  3. 安装虚拟化管理框架libvirtd和虚拟化执行软件qemu-kvm ,启用 libvirtd

    yum install libvirtd qemu-kvm
    systemctl enable --now libvirtd.service
    
  4. *(optional)*安装辅助工具 libvirt-install (用于生成 libvirt 所需配置文件)

    yum install libvirt-install
    
  5. 准备虚拟机磁盘镜像(已经有系统),例如:ubuntu-cloud.qcow2

生成基本配置

  1. 以下命令生成一个内存大小为32*1024M,cpu核心数为32,配置了默认NAT网络,配置系统盘为/var/lib/libvirt/images/ubuntu-cloud.qcow2的名叫ubuntu-cloud的虚拟机配置文件(重定向到ubuntu-cloud.xml中)。

    1. 注意这里 --os-variant <os-type> 必须按照虚拟机镜像安装的os类型来填写,支持的os类型通过virt-install --os-variant list查看
    2. --network network=default 配置了一个默认网络,连接到宿主机的一个网桥上(libvirt自动创建的),不需要的话可以去掉。
    virt-install \\
    	--name ubuntu-cloud \\
    	--memory $((32*1024)) \\
    	--os-variant ubuntu22.04 \\
    	--network network=default \\
    	--vcpus 32 \\
    	--disk path=/var/lib/libvirt/images/ubuntu-cloud2.qcow2 \\
    	--print-xml > /var/lib/libvirt/images/ubuntu-cloud.xml
    
  2. *(optional)*编辑 xml 文件,需要参考:https://libvirt.org/formatdomain.html

配置网卡直通*

  1. 查找网卡总线地址:ethtool -i <netdev>,例如这里查看要直通的网卡ens6f1np1的总线地址为0000:98:00.1

image.png

  1. 在 xml 文件的<device>内部添加<hostdev>配置:

    1. 按照对应pci号填写<address>内容
     <device>
     ...
     	<hostdev mode='subsystem' type='pci' managed='yes'>
    	  <source>
    	    <address domain='0x0000' bus='0x98' slot='0x00' function='0x1'/>
    	  </source>
    	</hostdev>
    </device>
    
  2. 如果需要配置SR-IOV的VF直通(网卡虚拟化),参考:

    SR-IOV 设备直通多VM实践

启动虚拟机

virsh define <path-to-xml>
virsh list --all
virsh start <vm-name>