在Ubuntu22.04中安装KVM(一)
KVM(Kernel-based Virtual Machine)是基于内核的虚拟机的首字母缩写, 这是一项集成在内核中的开源虚拟化技术。虚拟机是一种软件应用程序,可作为另一台实体计算机中的独立计算机使用。虚拟机与实体计算机共享 CPU 周期、网络带宽和内存等资源。KVM 是 Linux 操作系统组件,它为 Linux 上的虚拟机提供原生支持。自 2007 年以来,它已在 Linux 发行版中推出。
本文将介绍在Ubuntu22.04(jammy) 中如何安装KVM。
一、 安装准备
在安装KVM前需要将Ubuntu的软件进行更新,并检查本系统是否支虚拟化,同时检查本系统是否能够运行KVM虚拟机。
1. 系统更新
1  | sudo apt update  | 
2. 检查本系统是否支虚拟化
检查CPU是否支持KVM虚拟化,如英特尔处理器的VT-x(vmx)或AMD处理器的AMD-V(svm)虚拟化技术。
可以通过运行如下命令,如果输出值大于 0,那么虚拟化被启用。如果虚拟化功能没有启用,请确保在系统的BIOS设置中启用虚拟化功能;同时确保CPU支持虚拟化技术。
1  | egrep -c '(vmx|svm)' /proc/cpuinfo  | 
3. 检查本系统是否能够运行KVM虚拟机
- 安装cpu-checker
 
1  | sudo apt install -y cpu-checker  | 
- 执行kvm-ok命令
 
1  | kvm-ok  | 
如果支持运行KVM虚拟机将会有如下输出
1  | INFO: /dev/kvm exists  | 
如果以上检查都通过,可以进入下一步进行KVM安装。
二、安装KVM
安装KVM主要分为以下几步:
- 安装KVM软件
 - 启动虚拟化守护进程
 - 配置网络
 
1. 安装KVM软件
通过如下命令在 Ubuntu 22.04 中安装 KVM 以及其他相关虚拟化软件包:
1  | sudo apt install -y qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils virt-manager  | 
- qemu-kvm: 一个提供硬件仿真的开源仿真器和虚拟化包
 - libvirt-daemon-system: 为运行 libvirt 进程提供必要配置文件的工具
 - virtinst: 一套为置备和修改虚拟机提供的命令行工具
 - libvirt-clients: 一组客户端的库和API,用于从命令行管理和控制虚拟机和管理程序
 - bridge-utils: 一套用于创建和管理桥接设备的工具
 - virt-manager: 一款通过 libvirt 守护进程,基于 QT 的图形界面的虚拟机管理工具
 
virt-manager是cs结构的虚拟机管理工具,在下一篇中,将安装webvirtcloud来管理KVM虚拟机。
将当前登录用户加入 kvm 和 libvirt 用户组,以便能够创建和管理虚拟机。
1  | sudo usermod -aG kvm $USER  | 
以上增加用户组的操作需要重新登录才能使得配置生效。
2. 启动虚拟化守护进程
在所有软件包安装完毕之后,通过如下命令启用并启动libvirt守护进程:
1  | sudo systemctl enable --now libvirtd  | 
可以通过以下命令查看libvirtd的运行状态:
1  | sudo systemctl status libvirtd  | 
如果服务正常将会看到类似信息:(包含:Active: active (running))
1  | ● libvirtd.service - Virtualization daemon  | 
3. 配置网络
如果需要从外部访问 KVM 虚拟机,必须将虚拟机的网卡映射至网桥。virbr0 网桥是 KVM 安装完成后自动创建的,仅做测试用途。
可以通过如下内容在 /etc/netplan 目录下创建文件 01-netcfg.yaml 来新建网桥, 步骤如下:
- 如果在/etc/netplan下已经有配置文件,如:00-installer-config.yaml,可以先备份。
 
1  | cd /etc/netplan  | 
- 查看现有网卡信息
 
1  | ip addr  | 
返回信息如下:
1  | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  | 
可以看到第2条网卡信息显示:
  interface: eno1
  addresses(inet): 192.168.1.162/24
  macaddress(link/ether): 08:00:27:4b:1d:45
- 配置01-netcfg.yaml
 
1  | network:  | 
保存并退出文件。
- 通过netplan apply 命令应用上述变更
 
1  | sudo netplan apply  | 
可以通过如下 ip addr 命令,查看是否出现新的interface为br0的网卡,
并用查看macaddress与addresses是否与你配置的相同。