什么是KVM

KVM (Kernel-based Virtual Machine) 由Quramnet开发,此公司于2008年被Red Hat收购;自Linux 2.6.20后整合到内核,这个模块使得Linux变成了一个Hypervisor层;运行虚拟机仅需要加载相应的KVM模块,依托于CPU虚拟化指令集,性能、安全性、兼容性、稳定性表现良好,每一个虚拟化操作系统表现为单个系统进程,于Linux安全模块SELinux安全模块很好结合。
在KVM中,可以运行各种GUN/Linux, Windows或者其他系统镜像(例如:FreeBSD);每一个虚拟机都可以提供独享的虚拟硬件,包括网卡、硬盘等;虚拟机也可以直通主机设备硬件(例如:GPU PCI pass through);但是KVM需要硬件支持虚拟化技术,需要使用Intel 处理器 ( 含 VT 虚拟化技术 ) 或 AMD 处理器 ( 含 SVM 安全虚拟机技术的 AMD 处理器 , 也叫 AMD-V).

检查KVM支持

硬件检查(主要)

KVM需要虚拟机宿主(host)的处理器带有虚拟化支持(对于Intel处理器来说是VT-x,对于AMD处理器来说是AMD-V),你可以通过以下命令来检查你的处理器是否支持虚拟化:

1
$ LC_ALL=C lscpu | grep Virtualization

例如在此处我的电脑输出为:

1
Virtualization:                  VT-x

如果运行后没有输出,那么你的处理器可能不支持硬件虚拟化,不能使用KVM。
注意:部分品牌机,会默认关闭虚拟化支持,请前往BIOS检查启用

内核检查

通常情况下,相对较新的Linux内核都提供了相应的内核模块来支持KVM。

  • 你可以通过以下命令来检查内核是否包含了支持虚拟化的模块:
    1
    $ zgrep CONFIG_KVM /proc/config.gz

安装

此处需要的软件包:

  • qemu (向虚拟主机提供模拟硬件)
  • libvirt (提供管理虚拟机和其他虚拟化功能的工具和API)
  • ovmf (为虚拟机启用UEFI支持)
  • virt-manager (管理虚拟机的GUI)

注:实际情况下,安装完qemu就可以使用虚拟机,但是qemu-kvm的接口相对复杂,libvirt和virt-manager可以让配置和管理虚拟机更加便捷简单。

以下是用于网络连接的软件包:

  • iptables-nft (和dnsmasq一起用于default的NAT/DHCP网络)
  • dnsmasq
  • bridge-utils (用于桥接网络)
  • openbsd-netcat (通过SSH远程管理)
1
$ pacman -S packages

将用户加入KVM与libvirt组

1
$ usermod -a -G group username

注:root用户此处跳过

启动libvirtd服务并设置开机启动

1
2
3
$ systemctl start libvirted
$ systemctl enable libvirted

现在,主机上已经配置完成KVM环境了,可以使用QEMU/virt-manager来安装与管理虚拟机了。

我遇到的问题

(此部分会持续更新)

default网络不活动

如果出现Requested operation is not valid: network 'default' is not active的问题。
检查虚拟网络状态:

1
sudo virsh net-list -all

若输出状态为inactive,autostart显示为no,使用一下命令:

1
2
sudo virsh net-start default
sudo virsh net-autostart default

性能监控工具 (Performance Monitoring Tools)

Virtual Machine Manager 默认情况下只会显示CPU usage,当点击View想启用其他参数显示时,均为灰色不可操作选项,提示信息为:Disable in perferences dialog.参考RedHat官方文档:Monitoring Performance in Virtual Machine Manager.
步骤为:

  1. 点击Edit菜单,选择Perferences.
  2. Perferences窗口中,选择Polling页面下,修改更新时间与stats polling options.
    Performance Monitoring Tools

结语

我使用Linux桌面系统已经快两年,在Linux上对虚拟机的需求在此前一直都是延续了在Windows上的习惯,直接使用VMware Workstaion,为什么在Linux抛弃了使用了半年多的VMware Workstation。
在这里不可绕开的一点是Workstation是商业私有软件,而KVM是开源软件,除此之外对于我来说还有:

  • 在性能上KVM由于内核集成接近于原生速度
  • 作为Linux内核的一部分,我本身也是使用Linux桌面
  • 切换到KVM后,可以检查、修改和完善虚拟机监控程序背后的源代码,能访问源代码便有了几乎便是万能钥匙;能够虚拟化传统工作负载和应用,并为云原生和基于容器的工作负载打下基础(虽然这是后话)。