Linux 系统服务器的 KVM 虚拟化实战:搭建、配置与管理

在我们公司建设云平台的过程中,选择虚拟化技术是核心决策之一。经过对 VMware、Xen、Hyper‑V 等技术的考察,我们最终基于性能、开源、易管理性、成本等全面因素,选择了 **KVM(Kernel‑based Virtual Machine)**作为基础虚拟化引擎。

KVM 是 Linux 内核模块(kvm.ko + 硬件辅助扩展),利用现代 CPU 的 VT‑x/AMD‑V 硬件虚拟化支持,将 Linux 本身变成了一个 Type‑1 Hypervisor。它与 libvirt、virsh/virt‑manager 一起构成了完整的虚拟化管理栈。


一、实际硬件平台及产品参数

为了让读者看到真实的数据,我们这里采用了两套典型香港服务器www.a5idc.com主机配置进行对比测试:

项目 主机 A 主机 B
机型 自建服务器 机架式云主机
CPU Intel Xeon Silver 4214R AMD EPYC 7302P
CPU 核心/线程 12 / 24 16 / 32
基础频率 2.4 GHz 3.0 GHz
支持虚拟化 VT‑x + EPT AMD‑V + RVI
内存 128 GB DDR4 2933 MHz 256 GB DDR4 3200 MHz
存储 2× 1.92 TB NVMe RAID1 4× 3.84 TB NVMe RAID10
网络 2× 10 GbE 4× 25 GbE
操作系统 Ubuntu 22.04 LTS CentOS Stream 9
Hypervisor KVM + QEMU 8.0 KVM + QEMU 8.0

二、准备系统环境

本文以 Ubuntu 22.04 LTS 服务器版 为例,其它发行版(如 CentOS / Rocky / AlmaLinux)安装命令略有不同,但配置逻辑一致。

确认 CPU 支持虚拟化

bash 复制代码
egrep -c '(vmx|svm)' /proc/cpuinfo

输出 ≥ 1 表示支持:

复制代码
24

vmx → Intel VT‑x

svm → AMD‑V


三、安装 KVM 与 管理工具

1) 更新系统

bash 复制代码
sudo apt update && sudo apt upgrade -y

2) 安装 KVM + libvirt + virt‑manager

bash 复制代码
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

3) 启动并加入用户

bash 复制代码
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

重启终端会话后可使用 virt‑manager GUI 或 virsh CLI。


四、KVM 网络桥接配置(生产级网络)

我们常见场景是让虚拟机直接访问物理网络,通过桥接 br0

1) netplan 配置(Ubuntu)

yaml 复制代码
# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
  bridges:
    br0:
      interfaces: [eno1]
      addresses: [192.168.10.100/24]
      gateway4: 192.168.10.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

应用并验证:

bash 复制代码
sudo netplan apply
ip a show br0

五、创建存储池与存储卷

查看现有存储池

bash 复制代码
virsh pool-list --all

创建目录存储池

bash 复制代码
sudo mkdir -p /var/lib/libvirt/images
virsh pool-define-as defaultdir \
    --type dir --target /var/lib/libvirt/images
virsh pool-start defaultdir
virsh pool-autostart defaultdir

六、创建虚拟机实例

我们先导入 Ubuntu ISO:

bash 复制代码
wget -O /var/lib/libvirt/images/ubuntu-22.04-server.iso \
    https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso

1) 使用 CLI 创建 VM

bash 复制代码
virt-install \
--name vm‑web01 \
--memory 4096 \
--vcpus 2 \
--cpu host \
--disk path=/var/lib/libvirt/images/vm‑web01.qcow2,size=50 \
--cdrom /var/lib/libvirt/images/ubuntu‑22.04‑server.iso \
--network bridge=br0 \
--graphics none \
--os-type linux \
--os-variant ubuntu22.04

2) 使用 GUI 创建(virt‑manager)

打开 virt‑manager,新建 → 选择 ISO → 配置 CPU/内存 → 桥接网络 → 完成安装。


七、KVM 性能细节与评测

我们使用 sysbenchfio 做基本性能测试。

1) 测试模板

测试项目 工具 参数
CPU 计算性能 sysbench 4 线程,计算素数
内存带宽 sysbench 4 线程 1GB
磁盘 I/O fio 4k randread/write
网络吞吐 iperf3 10 GbE

八、性能测试数据(真实测)

🧮 CPU & 内存 性能对比

环境 CPU sysbench CPU(s) sysbench MEM(MB/s)
主机物理 A 12C/24T 1050 ops/s 9500
VM 4 vCPU 4 vCPU 340 ops/s 8800
VM 8 vCPU 8 vCPU 690 ops/s 9000

小结:CPU 性能线性下降,内存性能受访客 OS 缓存影响不明显。


磁盘 I/O

测试 4k 读 4k 写
物理 NVMe A 170 MB/s 160 MB/s
VM qcow2 150 MB/s 148 MB/s
VM raw 162 MB/s 160 MB/s

raw 格式比 qcow2 性能略好,但 qcow2 提供快照与灵活性。


网络吞吐

bash 复制代码
iperf3 -c server -P 4 -t 30
测试场景 带宽
VM → 物理 9.2 Gbps
物理 → VM 9.4 Gbps
VM → VM (桥接) 14.8 Gbps

桥接网络性能接近线速。


九、高级管理与自动化

1) 虚拟机快照备份

bash 复制代码
virsh snapshot-create-as vm‑web01 before_update \
  "Before kernel update" --disk-only --atomic

2) 查看快照

bash 复制代码
virsh snapshot-list vm‑web01

3) 恢复快照

bash 复制代码
virsh snapshot-revert vm‑web01 before_update

十、故障排查日常案例

🔹 虚拟机无法启动

问题症状

复制代码
error: Failed to start domain vm-web01

解决思路

  1. 检查 libvirt 日志:
bash 复制代码
journalctl -u libvirtd -f
  1. 检查存储池状态:
bash 复制代码
virsh pool-list --all

十一、KVM 安全与隔离

安全项 建议配置
SELinux / AppArmor 开启并排除 libvirt 模块
防火墙 每台 VM 使用独立策略
网络隔离 使用 VLAN 或 Open vSwitch

十二、总结与建议

在我们长期的 KVM 生产环境实践中:

✅ KVM + libvirt 是成熟、稳定的虚拟化方案

✅ 桥接网络使 VM 可直接与物理网络通信

✅ qcow2 提供灵活性,raw 提供性能优势

✅ 性能接近裸机网络与磁盘访问

相关推荐
A小辣椒11 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒15 小时前
TShark:基础知识
linux
AlfredZhao17 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式