3. KVM环境搭建
KVM 并不是一个可以单独运行的“软件”,而是 Linux 内核提供的虚拟化能力。要让一台物理机成为合格的 KVM 宿主机,需要同时满足三个条件:CPU 支持硬件虚拟化并已在 BIOS/UEFI 中开启、内核加载了正确的虚拟化模块、用户态工具链(QEMU、libvirt、virt-manager)完整可用。本节围绕“检查—选型—安装—验证”这条主线,给出可落地的环境搭建方法。
一、核心原理:KVM 的分层结构
理解安装对象之前,先要看清各组件在系统中的位置。KVM 是内核模块,负责利用 CPU 的 VT-x/AMD-V 指令完成特权级切换;QEMU 是用户态的硬件模拟器,负责设备模型与 I/O;libvirt 是管理抽象层,统一管理 QEMU/KVM、存储、网络;virt-manager 则是基于 libvirt 的图形化管理前端。四者缺一不可,但职责边界清晰。
二、硬件虚拟化检查
第一步是确认 CPU 是否支持虚拟化扩展,以及内核是否已加载对应模块。Intel 平台对应 vmx 标志与 kvm_intel 模块,AMD 平台对应 svm 标志与 kvm_amd 模块。
# 1. 查看 CPU 是否支持硬件虚拟化
grep -Eoc '(vmx|svm)' /proc/cpuinfo
# 返回值大于 0 表示支持
# 2. 查看虚拟化相关内核模块
lsmod | grep kvm
# 期望看到 kvm_intel 或 kvm_amd 以及 kvm
# 3. 确认 /dev/kvm 设备存在
ls -l /dev/kvm
# crw-rw----+ 1 root kvm ... /dev/kvm
# 4. 若模块未加载,手动加载
sudo modprobe kvm_intel # Intel
sudo modprobe kvm_amd # AMD
若
/proc/cpuinfo 中完全没有 vmx 或 svm,通常不是系统问题,而是 BIOS/UEFI 中的 Intel Virtualization Technology、SVM Mode 等选项未开启。虚拟机中嵌套 KVM 时,还需在宿主层开启“虚拟化 Intel VT-x/EPT”或“虚拟化 AMD-V/RVI”透传。
三、Linux 发行版选择
KVM 已进入 Linux 主线内核,理论上任何现代发行版都能运行。但作为宿主机,发行版的软件包完整度、内核版本、libvirt 版本与长期支持周期会直接影响稳定性。选择时可参考下表。
| 发行版 | 虚拟化工具包 | 内核特点 | 适用场景 |
|---|---|---|---|
| RHEL / Rocky / AlmaLinux | qemu-kvm、libvirt、virt-install、virt-manager | 长期支持,企业级补丁 | 生产环境、企业私有云 |
| Ubuntu LTS / Debian | qemu-system-x86、libvirt-daemon-system、virt-manager | 内核较新,社区活跃 | 开发测试、云镜像实验 |
| openSUSE Leap | qemu、libvirt、yast2-vm | 稳定,YaST 图形配置 | 中小规模部署 |
| Fedora / Arch | qemu、libvirt、virt-manager | 内核最新,特性前沿 | 尝鲜、驱动验证 |
生产宿主机优先选择有长期支持(LTS)的发行版,并保持内核与 libvirt 版本一致;不要为了追求新特性而在生产环境使用滚动发行版。若使用云主机,需确认实例类型支持嵌套虚拟化。
四、安装 KVM/QEMU/libvirt/virt-manager
不同发行版的包名略有差异,但安装目标一致:内核模块、QEMU、libvirt 守护进程、管理工具。以下给出两类主流发行版的安装命令。
# Debian / Ubuntu
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
bridge-utils virtinst virt-manager
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm $USER
# RHEL / Rocky / AlmaLinux
sudo dnf install -y qemu-kvm libvirt libvirt-daemon-kvm \
virt-install virt-manager
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
安装完成后,建议启用默认 NAT 网络,使虚拟机可以访问外网:
sudo virsh net-list --all
sudo virsh net-start default
sudo virsh net-autostart default
五、安装后验证
验证要覆盖“内核能力、服务状态、管理通道、实际创建”四个层次,避免只看安装是否成功。
- 内核能力验证:执行
virt-host-validate,检查 CPU、内存、IOMMU、cgroup 等是否满足要求。 - 服务状态验证:执行
systemctl status libvirtd,确认守护进程处于 active (running)。 - 管理通道验证:执行
virsh list --all与virsh nodeinfo,确认能连接默认 URI。 - 实际创建验证:用
virt-install或 virt-manager 创建一台最小虚拟机,确认能启动并进入安装界面。
# 综合验证示例
virt-host-validate
virsh version
virsh nodeinfo
virsh net-list --all
virsh list --all
# 快速创建一台测试虚拟机(需准备 ISO)
virt-install --name test-vm --memory 2048 --vcpus 2 \
--disk size=20 --cdrom /var/lib/libvirt/images/CentOS.iso \
--network network=default --graphics spice
六、常见误区与复盘
- 只装 virt-manager 就以为装好了 KVM:virt-manager 只是前端,缺少 libvirtd 或 /dev/kvm 时无法创建虚拟机。
- 忽略用户组权限:未加入 libvirt 或 kvm 组时,普通用户无法连接 qemu:///system,只能使用会话模式。
- BIOS 未开启虚拟化:安装全部成功但
virsh capabilities中 domain 类型缺失 kvm,实际退化为纯 QEMU 模拟,性能极低。 - 嵌套虚拟化未透传:在云主机或 VMware 中搭建 KVM,需在宿主层开启嵌套虚拟化,否则 /dev/kvm 不存在。
- 默认网络未启动:虚拟机创建后无网络,通常是 default 网络未 start 或未 autostart。
环境搭建的验收标准可以概括为一句话:lscpu 有 vmx/svm、lsmod 有 kvm、/dev/kvm 存在、libvirtd 运行、virsh list 可执行、能成功创建并启动一台虚拟机。六项全部通过,才说明 KVM 宿主机真正可用。