Skip to content

KVM 虚拟化技术指南

KVM(Kernel-based Virtual Machine)是 Linux 内核内置的虚拟化解决方案,将 Linux 内核直接转变为 Type-1 型虚拟机监控器(Hypervisor)。本章档涵盖从基础概念到生产环境部署的完整知识体系。

目录


什么是 KVM

KVM 基本定义

KVM(Kernel-based Virtual Machine)是一种开源的硬件辅助虚拟化技术,它将 Linux 内核转变为虚拟机监控器。KVM 本身不提供模拟硬件的功能,而是利用 CPU 的硬件虚拟化扩展(Intel VT-x 或 AMD-V)来实现虚拟化。

KVM 与 QEMU 的关系

QEMU 是一个纯软件实现的模拟器,可以模拟多种硬件平台,但性能较差。KVM 是 Linux 内核模块,利用硬件虚拟化技术提供高性能虚拟化。

两者通常结合使用:

  • KVM 负责 CPU 和内存的虚拟化(通过硬件辅助)
  • QEMU 负责模拟 I/O 设备(网卡、磁盘、显卡等)
┌─────────────────────────────────────────┐
│           虚拟机 (Guest OS)             │
├─────────────────────────────────────────┤
│  QEMU (设备模拟)  ←───  KVM (CPU/内存)  │
├─────────────────────────────────────────┤
│           Linux 内核                     │
├─────────────────────────────────────────┤
│  物理硬件 (CPU VT-x/AMD-V)              │
└─────────────────────────────────────────┘

工作原理:当虚拟机执行特权指令时,KVM 会捕获并处理这些指令,利用硬件虚拟化扩展直接在物理 CPU 上运行,而非模拟执行,从而实现接近物理机的性能。

KVM 与 VMware、Hyper-V 对比

特性KVMVMware ESXiHyper-V
类型Type-1(开源)Type-1(商业)Type-1(商业)
许可证GPL 开源付费免费(Windows Server)
管理工具libvirt/virsh/virt-managervSphere ClientHyper-V Manager/SCVMM
性能接近物理机接近物理机接近物理机
平台支持Linux多平台Windows Server
生态系统OpenStack、oVirt、Proxmox庞大企业生态Microsoft 生态
热迁移支持支持支持
资源开销低(Linux 内核集成)中等中等

选择建议

  • KVM:适合开源云平台、OpenStack 集成、成本敏感场景
  • VMware:适合已有 VMware 生态的企业、需要成熟技术支持
  • Hyper-V:适合 Windows 环境、Microsoft 技术栈

KVM 环境部署

CPU 检测与硬件要求

检查 CPU 是否支持虚拟化扩展

bash
# Intel CPU 检查 VT-x
grep -E 'vmx|svm' /proc/cpuinfo

# 或者使用更详细的命令
lscpu | grep -E 'Virtualization|VTX|SVM'

# 检查 CPU 虚拟化标志(Intel)
cat /proc/cpuinfo | grep flags | head -1 | grep -o 'vmx'

# 检查 CPU 虚拟化标志(AMD)
cat /proc/cpuinfo | grep flags | head -1 | grep -o 'svm'

硬件要求

资源最低要求推荐配置
CPU支持 VT-x/AMD-V,双核多核多线程,VT-d 支持
内存4GB 宿主机 + 虚拟机需求16GB+ ECC
磁盘20GB 可用空间SSD,RAID 配置
网络千兆网卡万兆网卡

启用 CPU 虚拟化(BIOS 配置)

如果 CPU 支持但未启用,需要在 BIOS 中开启:

  1. 进入 BIOS 设置
  2. 找到 "Intel VT-x" 或 "AMD-V" 选项
  3. 启用该选项
  4. 保存并退出

内核模块加载

检查 KVM 模块状态

bash
# 检查 KVM 模块是否已加载
lsmod | grep kvm

# 详细检查
lsmod | grep -E 'kvm_intel|kvm_amd'

# 检查模块信息
modinfo kvm_intel
modinfo kvm_amd

加载 KVM 模块

bash
# 加载 Intel KVM 模块
modprobe kvm
modprobe kvm_intel

# 加载 AMD KVM 模块
modprobe kvm
modprobe kvm_amd

# 验证加载成功
lsmod | grep kvm

配置模块自动加载

bash
# 添加到模块黑名单(如果需要禁用)
echo "blacklist kvm-intel" >> /etc/modprobe.d/blacklist.conf

# 配置模块参数(可选)
# 例如:禁用嵌套虚拟化
echo "options kvm_intel nested=0" >> /etc/modprobe.d/kvm.conf

安装 libvirt

在 RHEL/CentOS/Fedora 上安装

bash
# 安装 libvirt 和相关工具
yum install -y libvirt libvirt-client virt-install virt-manager \
    qemu-kvm qemu-img bridge-utils

# 启动 libvirtd 服务
systemctl enable libvirtd
systemctl start libvirtd

# 检查服务状态
systemctl status libvirtd

在 Debian/Ubuntu 上安装

bash
# 更新软件源
apt update

# 安装 KVM 和 libvirt
apt install -y qemu-kvm libvirt-bin virtinst virt-manager \
    bridge-utils

# 启动服务
system enable libvirtd
system start libvirtd

验证安装

bash
# 检查 libvirtd 版本
libvirtd --version

# 检查 virsh 版本
virsh --version

# 检查连接状态
virsh list --all

# 检查 KVM 加速
virsh nodeinfo

基础配置

配置 libvirtd

bash
# 编辑 libvirtd 配置
vim /etc/libvirt/libvirtd.conf

# 关键配置项:
# 监听 TCP 连接(生产环境建议禁用)
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"

# 认证配置
auth_tcp = "none"  # 生产环境使用 "sasl"

# 允许自动启动

配置 qemu.conf

bash
# 编辑 QEMU 配置
vim /etc/libvirt/qemu.conf

# 配置示例:
# 用户和组(生产环境使用专用用户)
user = "root"
group = "root"

# VNC 配置
vnc_listen = "0.0.0.0"
vnc_passwd = "your_password"

# 安全配置
security_driver = "selinux"

启动和测试

bash
# 重启 libvirtd
systemctl restart libvirtd

# 检查运行状态
systemctl status libvirtd

# 测试连接
virsh -c qemu:///system list

# 查看节点信息
virsh nodeinfo

常见问题

Q: KVM 虚拟机无法启动,提示 "failed to initialize KVM: Permission denied"

原因:KVM 模块权限问题,通常是用户不在 kvm 组中。

解决方法

bash
# 将用户添加到 kvm 组
usermod -aG kvm username

# 或者重新登录后生效

Q: 嵌套虚拟化(Nested KVM)如何启用

启用方法

bash
# 临时启用(Intel)
echo 1 > /sys/module/kvm_intel/parameters/nested

# 永久启用
echo "options kvm_intel nested=1" >> /etc/modprobe.d/kvm.conf

# 验证
cat /sys/module/kvm_intel/parameters/nested

Q: 如何查看 KVM 虚拟化是否正常工作

检查方法

bash
# 方法1:检查 /dev/kvm 设备
ls -l /dev/kvm

# 方法2:使用 virsh
virsh nodeinfo

# 方法3:检查内核模块
lsmod | grep kvm

下一步

完成环境部署后,继续学习 虚拟机管理 了解如何创建和管理虚拟机。