KVM 虚拟化技术实战指南 - 第一部分:环境准备与基础
文档信息
- 系列: KVM 虚拟化技术实战指南
- 部分: 第一部分 - 环境准备与基础
- 版本: V1.0
- 创建日期: 2026 年 3 月 9 日
- 对应视频: 6-06, 12-12
- 预计阅读时间: 1-2 小时
目录
KVM 虚拟化概述
什么是 KVM?
KVM (Kernel-based Virtual Machine) 是一个开源的虚拟化技术,它将 Linux 内核转变为一个 Hypervisor。
┌─────────────────────────────────────────────────────────┐
│ KVM 架构概览 │
├─────────────────────────────────────────────────────────┤
│ │
│ 用户空间 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ QEMU (设备模拟) │ │
│ │ - I/O 设备、BIOS、硬件模拟 │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ libvirt (管理接口) │ │
│ │ - 统一的 API、virsh、virt-manager │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ 内核空间 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ KVM 内核模块 │ │
│ │ - kvm.ko (核心) │ │
│ │ - kvm-intel.ko 或 kvm-amd.ko (CPU 特定) │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ 硬件层 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ CPU (VT-x/AMD-V) + 内存 + 存储 + 网络 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
KVM 的核心特性
| 特性 | 说明 | 优势 |
|---|---|---|
| 内核集成 | 作为 Linux 内核模块运行 | 稳定性好,性能优 |
| 硬件辅助 | 依赖 Intel VT-x/AMD-V | 接近原生性能 |
| 开源免费 | GPL 许可 | 无许可成本 |
| 生态丰富 | QEMU、libvirt、OpenStack | 工具链完善 |
| 灵活扩展 | 支持多种 Guest OS | Linux、Windows、BSD 等 |
KVM vs 其他虚拟化技术
┌─────────────────────────────────────────────────────────┐
│ 虚拟化技术对比 │
├─────────────────────────────────────────────────────────┤
│ │
│ VMware ESXi: │
│ - 商业软件,功能完善 │
│ - 价格昂贵 ($3,595/CPU) │
│ - 企业级首选 │
│ │
│ Microsoft Hyper-V: │
│ - Windows 生态集成 │
│ - 免费 (Windows Server 包含) │
│ - 适合 Windows 环境 │
│ │
│ KVM: │
│ - 开源免费,Linux 原生 │
│ - 性能优异 (98-99% 原生) │
│ - 适合云环境和开发者 │
│ │
│ Xen: │
│ - 半虚拟化先驱 │
│ - AWS 早期使用 │
│ - 现被 KVM 超越 │
│ │
└─────────────────────────────────────────────────────────┘
硬件要求与检测
CPU 要求
必要条件:
- ✅ Intel VT-x 或 AMD-V 虚拟化扩展
- ✅ 64 位处理器
- ✅ 多核推荐 (4 核+)
检测 CPU 虚拟化支持:
bash
# Intel CPU 检测
egrep -c '(vmx|svm)' /proc/cpuinfo
# 输出 > 0 表示支持
# 查看详细标志
lscpu | grep Virtualization
# 输出:
# Virtualization: Intel VT-x
# 或使用
cat /proc/cpuinfo | grep -E 'vmx|svm'
# vmx = Intel, svm = AMD
BIOS/UEFI 设置:
开机进入 BIOS/UEFI 设置:
Intel 平台:
Advanced → CPU Configuration → Intel Virtualization Technology → Enabled
AMD 平台:
Advanced → CPU Configuration → SVM Mode → Enabled
保存并重启 (F10)
内存要求
最低要求:
- 宿主机:4GB
- 每个 VM: 512MB-2GB (根据需求)
推荐配置:
小型环境 (5-10 个 VM):
- 宿主机内存:16GB
- 每个 VM: 2-4GB
中型环境 (10-50 个 VM):
- 宿主机内存:64-128GB
- 每个 VM: 4-8GB
大型环境 (50+ 个 VM):
- 宿主机内存:256GB+
- 每个 VM: 8-16GB
内存检测命令:
bash
# 查看总内存
free -h
# 输出:
# total used free
# Mem: 15G 2.1G 10G
# 查看内存详情
cat /proc/meminfo
# 查看内存插槽
dmidecode -t memory
存储要求
存储类型选择:
| 类型 | 速度 | 成本 | 推荐场景 |
|---|---|---|---|
| NVMe SSD | 最快 (3000+ MB/s) | 最贵 | 高性能 VM、数据库 |
| SATA SSD | 快 (500 MB/s) | 中等 | 一般应用、开发环境 |
| HDD | 慢 (100-150 MB/s) | 便宜 | 冷备份、归档 |
存储容量规划:
单个 VM 存储需求:
- 系统盘:20-50GB (Linux), 50-100GB (Windows)
- 数据盘:根据应用需求
- 快照预留:20-30%
示例:10 个 Linux VM
- 系统盘:10 × 30GB = 300GB
- 数据盘:10 × 50GB = 500GB
- 快照:300GB × 30% = 90GB
- 总计:~900GB
存储检测:
bash
# 查看磁盘空间
df -h
# 查看磁盘类型
lsblk -d -o name,rota
# rota=1 表示 HDD, rota=0 表示 SSD
# 查看磁盘性能
hdparm -Tt /dev/sda
# 查看分区
fdisk -l
网络要求
网卡要求:
- 千兆网卡 (1Gbps) 最低
- 推荐万兆网卡 (10Gbps) 用于生产
- 多网卡用于网络隔离
网络检测:
bash
# 查看网卡信息
ip addr show
lspci | grep -i ethernet
# 查看网卡速度
ethtool eth0 | grep Speed
# 网络性能测试
iperf3 -c server_ip
宿主机系统选择
推荐 Linux 发行版
1. CentOS/RHEL 8
优势:
✅ 企业级稳定性
✅ 长期支持 (10 年)
✅ KVM 优化最好
✅ 文档丰富
适用场景:
- 企业生产环境
- 需要商业支持
版本选择:
- CentOS Stream 8 (滚动更新)
- RHEL 8 (商业支持)
2. Ubuntu 20.04/22.04 LTS
优势:
✅ 软件包最新
✅ 社区活跃
✅ 易于使用
✅ 5 年支持
适用场景:
- 开发和测试
- 初创公司
- 个人学习
版本选择:
- Ubuntu Server 20.04 LTS (推荐)
- Ubuntu Server 22.04 LTS (最新)
3. Debian 10/11
优势:
✅ 稳定可靠
✅ 轻量级
✅ 完全自由软件
适用场景:
- 高级用户
- 追求纯净系统
系统安装选项
分区建议:
/boot/efi 512MB (UEFI 启动)
/boot 1GB (内核和引导)
/ 50GB (系统根目录)
/var 50GB (日志和 VM 镜像)
/home 剩余 (用户数据)
swap 4-8GB (交换空间)
软件包选择:
bash
# 最小化安装 + 虚拟化组
yum groupinstall -y "Virtualization Host"
# 或
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients
KVM 安装与配置
CentOS/RHEL 安装 KVM
步骤 1: 检查虚拟化支持
bash
# 确认 CPU 支持
egrep -c '(vmx|svm)' /proc/cpuinfo
# 应该输出 > 0
# 检查 KVM 模块
lsmod | grep kvm
# 如果没有输出,需要加载
步骤 2: 安装 KVM 及相关组件
bash
# 安装 KVM 核心组件
sudo yum install -y qemu-kvm libvirt libvirt-python libvirt-client
# 安装管理工具
sudo yum install -y virt-install bridge-utils virt-manager virt-viewer
# 安装额外组件
sudo yum install -y libguestfs-tools guestfs-tools
步骤 3: 加载 KVM 内核模块
bash
# Intel CPU
sudo modprobe kvm_intel
# AMD CPU
sudo modprobe kvm_amd
# 验证模块加载
lsmod | grep kvm
# 输出应该包含:
# kvm_intel 或 kvm_amd
# kvm
步骤 4: 启动并启用 libvirt 服务
bash
# 启动服务
sudo systemctl start libvirtd
# 设置开机自启
sudo systemctl enable libvirtd
# 检查服务状态
sudo systemctl status libvirtd
# 应该显示 active (running)
步骤 5: 配置用户权限
bash
# 将当前用户添加到 libvirt 组
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)
# 验证组成员
groups
# 需要注销并重新登录才能生效
步骤 6: 验证 KVM 安装
bash
# 使用 virt-host-validate 验证
virt-host-validate
# 输出应该全部通过:
# QEMU: Checking for hardware assisted virtualization : PASS
# QEMU: Checking for IOMMU support : PASS
# ...
Ubuntu 安装 KVM
步骤 1: 更新系统
bash
sudo apt update
sudo apt upgrade -y
步骤 2: 安装 KVM 及相关组件
bash
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
步骤 3: 验证安装
bash
# 检查 libvirt 服务
sudo systemctl status libvirtd
# 验证 KVM
virsh list --all
管理工具安装
virsh (命令行工具)
安装:
bash
# CentOS/RHEL
sudo yum install -y libvirt-client
# Ubuntu/Debian
sudo apt install -y libvirt-clients
基本使用:
bash
# 列出所有 VM
virsh list --all
# 查看节点信息
virsh nodeinfo
# 查看 CPU 信息
virsh cpu-stats
# 查看内存信息
virsh freecell
virt-manager (图形界面)
安装:
bash
# CentOS/RHEL
sudo yum install -y virt-manager
# Ubuntu/Debian
sudo apt install -y virt-manager
启动:
bash
virt-manager
功能:
- 创建和配置 VM
- 图形化控制台
- 存储和网络管理
- 快照管理
virt-install (命令行创建 VM)
安装:
bash
sudo yum install -y virt-install
# 或
sudo apt install -y virtinst
示例:
bash
virt-install \
--name centos7-vm1 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/centos7-vm1.qcow2,size=20 \
--os-variant centos7.0 \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0 \
--cdrom /var/lib/libvirt/images/CentOS-7-x86_64-DVD-2009.iso
环境验证
完整验证脚本
bash
#!/bin/bash
# kvm-verify.sh
echo "=== KVM 环境验证 ==="
echo
# 1. CPU 虚拟化检查
echo "1. CPU 虚拟化支持检查"
if egrep -q '(vmx|svm)' /proc/cpuinfo; then
echo "✓ CPU 虚拟化支持:通过"
lscpu | grep Virtualization
else
echo "✗ CPU 虚拟化支持:失败"
exit 1
fi
echo
# 2. KVM 模块检查
echo "2. KVM 内核模块检查"
if lsmod | grep -q kvm_intel; then
echo "✓ Intel KVM 模块:已加载"
elif lsmod | grep -q kvm_amd; then
echo "✓ AMD KVM 模块:已加载"
else
echo "✗ KVM 模块:未加载"
exit 1
fi
echo
# 3. libvirt 服务检查
echo "3. libvirt 服务状态"
if systemctl is-active --quiet libvirtd; then
echo "✓ libvirtd 服务:运行中"
else
echo "✗ libvirtd 服务:未运行"
exit 1
fi
echo
# 4. 用户权限检查
echo "4. 用户权限检查"
if groups | grep -q libvirt; then
echo "✓ libvirt 组:已加入"
else
echo "✗ libvirt 组:未加入"
fi
if groups | grep -q kvm; then
echo "✓ kvm 组:已加入"
else
echo "✗ kvm 组:未加入"
fi
echo
# 5. 网络连接检查
echo "5. 网络配置检查"
virsh net-list --all
echo
# 6. 存储池检查
echo "6. 存储池检查"
virsh pool-list --all
echo
# 7. 性能快速测试
echo "7. 创建测试 VM (可选)"
# virsh create test-vm.xml
echo "=== 验证完成 ==="
使用方法:
bash
chmod +x kvm-verify.sh
sudo ./kvm-verify.sh
手动验证步骤
验证 1: virsh 连接
bash
virsh -c qemu:///system list
# 应该能正常连接并列出 VM (空的)
验证 2: 创建测试网络
bash
virsh net-define /tmp/test-net.xml
virsh net-start test-net
virsh net-list --all
验证 3: 查看_capabilities
bash
virsh capabilities
# 查看支持的虚拟化特性
常见问题排查
问题 1: CPU 虚拟化未启用
症状:
bash
egrep -c '(vmx|svm)' /proc/cpuinfo
# 输出 0
解决方案:
1. 重启进入 BIOS/UEFI
2. 找到 Virtualization Technology
3. 设置为 Enabled
4. 保存并退出 (F10)
5. 重启系统
问题 2: KVM 模块加载失败
症状:
bash
modprobe kvm_intel
# 报错:FATAL: Module kvm_intel not found
排查步骤:
bash
# 1. 检查内核版本
uname -r
# 2. 检查内核模块是否存在
find /lib/modules/$(uname -r) -name "kvm*.ko"
# 3. 重新安装 KVM 模块
sudo yum reinstall -y qemu-kvm
# 或
sudo apt install --reinstall -y qemu-kvm
# 4. 重启系统
sudo reboot
问题 3: libvirtd 服务无法启动
症状:
bash
systemctl start libvirtd
# 失败
排查:
bash
# 1. 查看错误日志
journalctl -u libvirtd -n 50
# 2. 检查配置文件
sudo vim /etc/libvirt/libvirtd.conf
# 3. 检查权限
sudo ls -la /var/lib/libvirt/
# 4. 重启服务
sudo systemctl restart libvirtd
问题 4: 权限不足
症状:
bash
virsh list
# error: failed to connect to the hypervisor
解决方案:
bash
# 1. 添加用户到组
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)
# 2. 重启 libvirtd
sudo systemctl restart libvirtd
# 3. 注销并重新登录
# 或重启系统
问题 5: 网络配置问题
症状:
bash
virsh net-list --all
# 网络未启动或不存在
解决方案:
bash
# 1. 定义默认网络
cat > /tmp/default-net.xml <<EOF
<network>
<name>default</name>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
EOF
# 2. 启动网络
virsh net-define /tmp/default-net.xml
virsh net-start default
virsh net-autostart default
# 3. 验证
virsh net-list --all
性能优化建议
BIOS/UEFI 优化
启用以下选项:
✓ Intel VT-x / AMD-V
✓ VT-d / AMD-Vi (I/O 虚拟化)
✓ Hyper-Threading (超线程)
✓ C-States (节能状态)
✓ Turbo Boost (睿频)
内核参数优化
bash
# 编辑 /etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
# KVM 性能优化
kernel.sched_min_granularity_ns = 1000000
kernel.sched_wakeup_granularity_ns = 2000000
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.swappiness = 10
EOF
# 应用配置
sudo sysctl -p
存储优化
bash
# 使用 virtio 驱动
--disk bus=virtio
# 使用 cache=none
--disk cache=none
# 使用 discard (SSD)
--disk discard=unmap
网络优化
bash
# 使用 virtio 网卡
--network model=virtio
# 使用 SR-IOV (高级)
# 需要硬件支持
总结
安装检查清单
□ CPU 虚拟化支持检测
□ BIOS/UEFI 启用虚拟化
□ 选择并安装宿主机系统
□ 安装 KVM 及相关组件
□ 加载 KVM 内核模块
□ 启动 libvirtd 服务
□ 配置用户权限
□ 安装管理工具
□ 验证安装
□ 配置网络
□ 性能优化
下一步学习
完成环境准备后,继续学习:
- 第二部分: Linux 虚拟机安装
- 第三部分: 网络配置
- 第四部分: 安全设置
- 第五部分: 快照管理
- 第六部分: 模板制作
本文档属于 KVM 虚拟化技术实战系列
对应视频:6-06, 12-12
最后更新:2026 年 3 月