KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它允许在Linux操作系统上创建和管理虚拟机。以下是关于KVM的一些关键信息:

  • KVM基于Linux内核的模块,通过利用虚拟化扩展(如Intel VT或AMD-V)提供硬件虚拟化功能。

  • KVM使用QEMU(快速模拟器)作为虚拟机的管理程序,QEMU提供了模拟设备和虚拟化硬件的能力。

  • KVM支持多种虚拟化模式,包括完全虚拟化和硬件辅助虚拟化。

  • KVM可以管理多个虚拟机,每个虚拟机都可以运行独立的操作系统。

  • KVM提供了性能高、安全和稳定的虚拟化环境,广泛用于服务器虚拟化和云计算平台。

更新 Ubuntu 22.04

打开终端并通过如下命令更新本地的软件包索引:

sudo apt update

检查虚拟化是否开启

检查CPU是否支持 KVM 虚拟化,确保你系统中有 VT-x( vmx)英特尔处理器或 AMD-V(svm)处理器。

你可以通过运行如下命令,如果输出值大于 0,那么虚拟化被启用。否则,虚拟化被禁用,你需要启用它。

egrep -c '(vmx|svm)' /proc/cpuinfo

根据上方命令输出,你可以推断出虚拟化功能已经启用,因为输出结果大于 0。如果虚拟化功能没有启用,请确保在系统的 BIOS 设置中启用虚拟化功能。

另外,你可以通过如下命令判断 KVM 虚拟化是否已经在运行:

kvm-ok

运行该命令之前,请确定已经安装了cpu-checker软件包,否则将提示未找到该命令的报错。

通过如下命令安装cpu-checker软件包:

sudo apt install -y cpu-checker

接着再运行kvm-ok命令,如果 KVM 已经启动,你将看到如下输出:

kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

在 Ubuntu 22.04 上安装 KVM

通过如下命令在 Ubuntu 22.04 中安装 KVM 以及其他相关虚拟化软件包:

sudo apt install -y qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils

解释刚刚安装哪些软件包:

  • qemu-kvm 一个提供硬件仿真的开源仿真器和虚拟化包

  • libvirt-daemon-system 为运行 libvirt 进程提供必要配置文件的工具

  • virtinst 一套为置备和修改虚拟机提供的命令行工具

  • libvirt-clients 一组客户端的库和API,用于从命令行管理和控制虚拟机和管理程序

  • bridge-utils 一套用于创建和管理桥接设备的工具

启用虚拟化守护进程(libvirtd)

在所有软件包安装完毕之后,通过如下命令启用并启动 libvirt 守护进程:

sudo systemctl enable --now libvirtd
sudo systemctl start libvirtd

你可以通过如下命令验证该虚拟化守护进程是否已经运行:

sudo systemctl status libvirtd

另外,请将当前登录用户加入kvm和libvirt用户组,以便能够创建和管理虚拟机。

sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER

$USER环境变量引用的即为当前登录的用户名。你需要重新登录才能使得配置生效。

创建网桥(br0)

编辑/etc/netplan/00-installer-config.yaml

network:
  ethernets:
    enp2s0:
      dhcp4: false
      dhcp6: false
  # add configuration for bridge interface
  bridges:
    br0:
      interfaces: [enp2s0]
      dhcp4: false
      addresses: [192.168.**.**/24]
      routes:
        - to: default
          via: 192.168.3.1
          metric: 100
      nameservers:
        addresses: [114.114.114.114]
      parameters:
        stp: false
      dhcp6: false
  version: 2

创建虚拟机

Linux示例

virt-install -n ubuntu22_01\
  -r 4096 --vcpus=2 \
  --os-variant=ubuntu22.04 \
  --accelerate \
  -c /home/tools/ubuntu-22.04.1-live-server-amd64.iso \
  --disk path=/data/kvm/ubuntu22_01.img,format=qcow2,bus=virtio,size=50 \
  --network bridge=br0 \
  --vnc --vncport=5996 --vnclisten=0.0.0.0

参数介绍

  • -n:指定生成的虚拟机名称,全局唯一

  • --os-type=linux :不需要添加了,已删除配置

  • -os-variant:参数支持的os # osinfo-query os 查看系统支持的系统

  • -c:引用的iso文件

  • -r:内存大小

  • --vcpus:系统核心数

  • --disk:生成的磁盘文件存储目录

  • --format:磁盘格式

  • --network:指定网络模式,及其网卡

  • --size:磁盘空间大小

  • --vnc:指定宿主机开放的监控端口和监听地址(0.0.0.0 表示监听所有的IP),可以使用vnc连接系统

  • --accelerate 快速生成

Windows示例

virt-install -n windows10\
  -r 8192 --vcpus=4 \
  --os-variant=win10 \
  --accelerate \
  -c /data2/kvm/Win10_22H2_China_GGK_Chinese_Simplified_x64.iso \
  --disk device=cdrom,path=/data2/kvm/virtio-win.iso \
  --disk path=/data/kvm/windows10.img,format=qcow2,bus=virtio,size=100 \
  --network bridge=br0 \
  --vnc --vncport=5996 --vnclisten=0.0.0.0

virtio-win.iso下载地址

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.248-1/virtio-win.iso

Virsh 管理工具

在安装之后,可以通过virsh来管理我们的虚拟机,常用命令如下

常用命令

virsh list --all # 查看所有的虚拟机
virsh start ubuntu22_01 # 启动虚拟机
virsh shutdown ubuntu22_01 # 关闭虚拟机
virsh destroy ubuntu22_01 # 清除Domain中的记录,同时也会强制关机
virsh edit ubuntu22_01 # 编辑虚拟机的配置文件,虚拟机中的参数是以配置文件的形式来控制的
virsh define ubuntu22_01 # 重载配置文件
virsh undefine ubuntu22_01 # 删除配置文件

系统配置文件

cat /etc/libvirt/qemu/ubuntu22_01.xml

VNC

下载地址:https://www.realvnc.com/en/connect/download/viewer/

开机自启动

virsh autostart ubuntu22_01 #设置虚拟机开机自动启动
virsh autostart --disable ubuntu22_01 #设置取消虚拟机自动启动