KVM 入门介绍
一、前言
虚拟化技术已经成为现代数据中心、云计算和服务器运维的基础。它通过将物理资源抽象化,使得多操作系统能够在同一台物理主机上并行运行,大大提升了硬件资源的利用率。KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是当前主流的开源虚拟化解决方案之一,广泛应用于企业级环境和云服务提供商。本文将带你从零开始认识KVM,了解它的原理、安装配置、基本使用及最佳实践。
二、KVM是什么?
KVM,全称为Kernel-based Virtual Machine,是Linux内核中的一项虚拟化基础设施。自2.6.20版本起,KVM作为主线内核模块被集成进Linux。它将Linux转变为一个类型一(Type 1)和类型二(Type 2)兼具的混合虚拟机监控器(Hypervisor)。简单来说,KVM允许你在一台物理服务器(通常称为“宿主机”)上运行多个完全隔离的虚拟机(VM,客机)。
KVM本身只是一套内核模块,具体的虚拟机管理与硬件模拟功能由QEMU(Quick Emulator)等用户态工具协同完成。KVM利用CPU虚拟化扩展(Intel VT-x或AMD-V)来提升虚拟机的性能,使得VM可以近乎原生地执行指令。
KVM的主要特点有:
- 开源免费,集成于Linux内核,兼容性好。
- 支持完整虚拟化(Full Virtualization)。
- 支持硬件加速(VT-x、AMD-V)。
- 支持多种操作系统,包括Linux、Windows等。
- 生态丰富,兼容QEMU、libvirt、Virt-Manager、oVirt等管理工具。
三、KVM的工作原理
3.1 虚拟化类型
虚拟化主要分为两类:
- 全虚拟化(Full Virtualization):客机操作系统无需修改,虚拟机监控器模拟硬件环境,完全隔离。
- 半虚拟化(Paravirtualization):需要修改客机内核,通过特定接口与宿主机通信,提高性能。
KVM属于全虚拟化方案,但可结合VirtIO等机制实现准虚拟化设备驱动,进一步提升性能。
3.2 KVM架构
KVM本质是一个内核模块(kvm.ko及架构相关模块如kvm-intel.ko或kvm-amd.ko)。加载该模块后,Linux内核变身为Hypervisor,每个虚拟机以普通进程的方式存在于用户空间,并通过QEMU完成硬件模拟和管理。
KVM架构图如下:
+-------------------+
| 用户空间 |
|-------------------|
| QEMU/Libvirt等 |
+-------------------+
| KVM模块 |
+-------------------+
| Linux内核 |
+-------------------+
| 硬件(CPU、内存)|
+-------------------+
- QEMU负责创建和管理虚拟机进程,模拟BIOS、IDE、显卡等外围设备。
- KVM模块为每个虚拟机分配一套虚拟CPU(vCPU),并借助CPU硬件虚拟化特性提升效率。
- 虚拟机运行在用户空间进程里,和普通进程一样由Linux调度。
3.3 KVM与QEMU
- QEMU原本是一套纯软件模拟器,效率较低。
- KVM模块加载后,QEMU会通过
/dev/kvm
接口调用KVM加速。 - 大部分指令和I/O请求由KVM直接下发至硬件,QEMU只负责模拟复杂设备(如显卡、USB等)。
四、KVM的应用场景
KVM广泛应用于以下领域:
- 服务器虚拟化:将多台业务服务器整合到一台物理机上,提高资源利用率,降低硬件成本。
- 云计算基础设施:OpenStack、oVirt等IaaS平台常以KVM作为底层虚拟化技术,为用户提供弹性计算资源。
- 开发与测试环境:隔离不同的开发环境,方便多系统兼容性测试。
- 桌面虚拟化:为终端用户分配隔离的桌面环境,提高安全性和管理效率。
五、KVM的安装与配置
5.1 环境准备
- 支持VT-x(Intel)或AMD-V(AMD)的CPU。
- 安装了Linux操作系统(如CentOS、Ubuntu等)。
检查CPU是否支持硬件虚拟化
egrep -c '(vmx|svm)' /proc/cpuinfo
输出大于0则表示支持。
检查虚拟化是否被BIOS开启
lscpu | grep Virtualization
显示VT-x
或AMD-V
,则BIOS已开启虚拟化。
5.2 安装KVM相关软件包
在CentOS/RHEL:
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils
在Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
5.3 启动和配置libvirtd服务
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
5.4 添加当前用户到libvirt组(非root操作)
sudo usermod -aG libvirt $(whoami)
执行后需重新登录或重启。
六、KVM的基本使用
6.1 使用命令行创建虚拟机
以CentOS为例,下载ISO镜像并创建虚拟机:
virt-install --name centos7-vm --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/centos7-vm.qcow2,size=20 --cdrom=/root/CentOS-7-x86_64-DVD.iso --os-type linux --os-variant centos7.0 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
参数说明:
--name
:虚拟机名称--ram
:分配内存(MB)--vcpus
:分配虚拟CPU数量--disk
:虚拟硬盘位置与大小--cdrom
:安装镜像路径--network
:网络模式(default为NAT)--graphics
:图形方式,可用VNC远程访问
6.2 虚拟机管理常用命令(virsh工具)
virsh list --all # 列出所有虚拟机
virsh start vmname # 启动虚拟机
virsh shutdown vmname # 关闭虚拟机(正常关机)
virsh destroy vmname # 强制关闭虚拟机(相当于断电)
virsh suspend vmname # 挂起虚拟机
virsh resume vmname # 恢复虚拟机
virsh undefine vmname # 删除虚拟机配置(不删磁盘)
virsh console vmname # 连接到虚拟机控制台
6.3 使用Virt-Manager图形界面
virt-manager
是KVM/Libvirt的官方GUI管理工具,适合新手:
sudo apt-get install virt-manager # Ubuntu
sudo yum install virt-manager # CentOS
virt-manager &
通过图形界面可以轻松完成虚拟机的创建、配置和管理。
七、KVM常见网络模式
KVM支持多种虚拟机网络连接方式:
- NAT(默认):虚拟机通过NAT上网,外部无法主动访问虚拟机,适合桌面和开发测试。
- 桥接(Bridge):虚拟机直接作为局域网主机,拥有独立IP,外部可直接访问,适合生产环境。
- 仅主机(Host-Only):虚拟机只能与宿主机通信,适合隔离测试。
配置桥接网络示例(CentOS 7+):
编辑/etc/sysconfig/network-scripts/ifcfg-br0
,将物理网卡桥接到br0
,并重启网络服务。
八、KVM虚拟机磁盘格式
KVM支持多种虚拟磁盘格式:
- raw:原生磁盘映像,性能最好,但不支持动态扩容。
- qcow2:支持快照、压缩、动态分配空间,是KVM推荐的格式。
常用命令:
qemu-img create -f qcow2 /var/lib/libvirt/images/test.qcow2 10G
qemu-img info /var/lib/libvirt/images/test.qcow2
九、KVM的优势与不足
优势
- 完全开源,免费、社区活跃。
- 集成于Linux内核,性能优良。
- 支持多种操作系统和硬件平台。
- 支持动态资源分配、快照、热迁移等高级功能。
- 与云原生生态兼容性好。
不足
- 不支持Windows宿主机,仅限于Linux平台。
- 图形化管理和自动化能力相较于VMware ESXi等商业产品略弱。
- 配置相对繁琐,新手需要一定Linux基础。
十、最佳实践与建议
- 合理分配资源:避免超分配内存和CPU,确保宿主机有足够的剩余资源。
- 使用桥接网络:生产环境推荐桥接方式,方便虚拟机和外部通信。
- 定期快照备份:利用qcow2格式和libvirt快照功能,保护关键数据。
- 关注安全:及时更新KVM、QEMU等相关组件,避免安全漏洞。
- 结合云平台:结合OpenStack、oVirt等云管理平台,提高自动化和运维效率。
十一、END
KVM作为Linux平台上的主流虚拟化技术,以其高性能、开源免费和良好的生态兼容性,成为企业服务器虚拟化和云计算基础架构的首选方案。通过本文的介绍,相信你已经对KVM的原理、架构、安装、管理有了初步认识。如果你有兴趣深入学习KVM,建议动手实践虚拟机的创建和管理,并了解更多进阶功能,如虚拟机热迁移、快照、虚拟网络等。虚拟化世界广阔,KVM只是一个开始!
参考资料:
- KVM 官方文档
- Libvirt 官方文档
- QEMU 官方文档
- 《鸟哥的Linux私房菜》