KVM 虚拟化入门:原理与整体架构深度解析
这是KVM 虚拟化从入门到实战系列的第 1 篇。本系列共 8 篇,从原理讲到生产落地,建议按顺序阅读。
开篇:为什么用 KVM?
在容器大行其道的今天,很多初学者会问:KVM 还有必要学吗?答案是肯定的。KVM(Kernel-based Virtual Machine)是目前 Linux 平台上最主流的全虚拟化方案,它直接构建在 Linux 内核之上,是 OpenStack、Kubernetes 底层节点虚拟化、以及大量企业私有云的基石。
和容器(共享内核、隔离较弱)不同,KVM 提供的是完整的硬件虚拟化,每个虚拟机拥有独立的内核和资源,隔离性强、安全边界清晰,适合承载数据库、核心业务等对稳定性和隔离性要求高的应用。
KVM 与 QEMU、Libvirt 的关系
这是新手最容易搞混的一组概念。一句话概括:
- KVM:内核模块,提供 CPU 虚拟化能力(/dev/kvm),负责虚拟 CPU 和内存管理。
- QEMU:用户态程序,负责模拟 I/O 设备(磁盘、网卡、USB 等)。
qemu-kvm是把 QEMU 与 KVM 结合起来的二进制。 - Libvirt:一个统一的管理 API/守护进程(libvirtd),它把 KVM 复杂的底层操作封装成
virsh、virt-manager等工具,是日常管理 KVM 的核心入口。
理解:KVM 提供硬件加速,QEMU 模拟设备,Libvirt 负责"好用好管"。三者配合才能形成完整的虚拟化平台。
KVM 的核心组成
text
┌─────────────────────────────────────────────┐ |
│ 管理工具层 (virsh / virt-manager) │ |
├─────────────────────────────────────────────┤ |
│ Libvirt (libvirtd) │ |
├─────────────────────────────────────────────┤ |
│ QEMU 用户态进程 (模拟 I/O 设备) │ |
├─────────────────────────────────────────────┤ |
│ KVM 内核模块 (虚拟 CPU / 内存 / /dev/kvm) │ |
├─────────────────────────────────────────────┤ |
│ Linux 内核 + 物理硬件 │ |
└─────────────────────────────────────────────┘ |
KVM 的工作原理
KVM 依赖 CPU 的硬件虚拟化扩展(Intel VT-x 或 AMD-V)。它让虚拟机运行在非根模式(guest mode),而宿主机运行在根模式(host mode)。
- 虚拟机的指令绝大多数直接在物理 CPU 上执行,几乎不损失性能(这是它快于纯软件模拟 QEMU 的根本原因)。
- 只有当虚拟机执行到特权指令、需要访问真实设备时,才会触发VM-Exit,陷入宿主机的 KVM 模块处理。
这种"大多数指令直接跑,少数指令陷入处理"的机制,让 KVM 达到了接近物理机的性能。
常用概念速览
| 术语 | 含义 |
|---|---|
| Guest / VM | 虚拟机 |
| Host | 宿主机(运行 KVM 的物理机) |
| vCPU | 虚拟机分配的虚拟 CPU |
| virtio | 半虚拟化 I/O 驱动,能显著提升磁盘/网络性能 |
| 快照 Snapshot | 虚拟机某一时刻的状态保存 |
| 迁移 Migration | 虚拟机在宿主机之间搬移 |
硬件前提
部署 KVM 前必须确认 CPU 支持虚拟化:
bash
# 检查 CPU 是否支持 VT-x / AMD-V |
grep -E -o '(vmx|svm)' /proc/cpuinfo | sort -u |
# 输出 vmx(Intel)或 svm(AMD)即支持 |
小结
KVM 是 Linux 虚拟化的基石,理解"KVM 内核 + QEMU 用户态 + Libvirt 管理"三层结构是后续所有操作的前提。下一篇文章我们会真正动手,在 CentOS 上把 KVM 环境装起来。
推荐标签:#KVM #虚拟化 #Linux #QEMU #Libvirt #虚拟机 #运维