一、KVM 核心原理与知识点补充
1. KVM 核心概念
KVM(Kernel-based Virtual Machine)是Linux 内核原生的虚拟化模块,自 Linux 2.6.20 版本后集成在内核中,依托 Intel VT-x/AMD-V 硬件虚拟化指令集实现高性能虚拟化,是云计算场景最常用的开源虚拟化方案。
2. KVM 三大工作模式
表格
| 模式 | 核心作用 | 运行组件 |
|---|---|---|
| 客户模式(Guest Mode) | 虚拟机内部操作系统运行,处理非 I/O 客户代码 | 客户机内核 / 用户程序 |
| 用户模式(User Mode) | 处理 I/O 模拟、虚拟机管理交互 | QEMU、libvirt、virt-manager |
| 内核模式(Kernel Mode) | CPU 调度、内存虚拟化、模式切换、异常处理 | KVM 内核模块(kvm/kvm_intel) |
3. 关键组件补充
- QEMU:纯软件模拟器,负责 I/O 设备模拟(磁盘、网卡、显卡),与 KVM 内核模块配合实现完整虚拟化。
- libvirt:虚拟化统一管理工具,屏蔽底层差异,提供 virsh 命令行与 API 接口。
- bridge-utils:桥接网络工具,让虚拟机与物理机处于同一网络平面。
- qcow2:KVM 推荐磁盘格式,支持快照、压缩、增量存储,性能优于 raw 格式。
二、实验环境规划
表格
| 主机名 | 操作系统 | IP 地址 | 核心软件 |
|---|---|---|---|
| kvm-node01 | CentOS 7.9 x86_64 | 192.168.10.100 | KVM、QEMU、libvirt、桥接网络 |
| kvm-node02 | CentOS 7.9 x86_64 | 192.168.10.101 | 同 kvm-node01 |
前置要求
- 物理机 / 虚拟机 CPU 开启Intel VT-x/AMD-V虚拟化。
- 系统最小化安装,配置 YUM 源。
- 关闭防火墙、SELinux(生产环境可按需配置规则)。
三、KVM 环境部署(全命令行)
1. 系统初始化配置
bash
运行
# 1. 设置主机名
hostnamectl set-hostname kvm-node01
bash
# 2. 配置hosts解析
cat >> /etc/hosts << EOF
192.168.10.100 kvm-node01
192.168.10.101 kvm-node02
EOF
# 3. 关闭防火墙并禁用开机自启
systemctl stop firewalld
systemctl disable firewalld
# 4. 临时关闭SELinux,永久禁用
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 5. 验证CPU是否支持虚拟化(Intel输出vmx,AMD输出svm)
cat /proc/cpuinfo | grep -E "vmx|svm"
2. 安装 KVM 核心依赖包
bash
运行
# 安装KVM核心组件、QEMU、桥接工具、libvirt、命令行管理工具
yum install -y qemu-kvm qemu-img bridge-utils \
qemu-kvm-tools virt-install libvirt libvirt-python \
virt-manager libguestfs-tools
# 验证KVM内核模块加载
lsmod | grep kvm
包作用补充:
qemu-kvm:KVM 核心加速模块virt-install:命令行创建虚拟机工具libguestfs-tools:虚拟机磁盘文件编辑工具
3. 启动并配置 libvirtd 服务
bash
运行
# 启动libvirtd服务
systemctl start libvirtd
# 设置开机自启
systemctl enable libvirtd
# 查看服务状态
systemctl status libvirtd
四、KVM 桥接网络配置
1. 备份原网卡配置
bash
运行
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33.bak
2. 配置物理网卡(ens33)
bash
运行
cat > ifcfg-ens33 << EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
EOF
3. 配置桥接网卡(br0)
bash
运行
cat > ifcfg-br0 << EOF
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
DNS2=8.8.8.8
NAME=br0
DEVICE=br0
ONBOOT=yes
EOF
4. 重启网络生效
bash
运行
nmcli connection reload
nmcli connection up br0
# 验证桥接网络
ifconfig br0
brctl show
五、KVM 存储与虚拟机创建
1. 创建 KVM 存储池
bash
运行
# 创建存储池目录
mkdir -p /data/kvm/images
mkdir -p /data/kvm/iso
# 定义存储池(images:存放虚拟机磁盘;iso:存放系统镜像)
virsh pool-define-as images dir --target /data/kvm/images
virsh pool-define-as iso dir --target /data/kvm/iso
# 启动存储池并设置开机自启
virsh pool-start images
virsh pool-autostart images
virsh pool-start iso
virsh pool-autostart iso
# 查看存储池状态
virsh pool-list --all
2. 创建虚拟机磁盘(存储卷)
bash
运行
# 创建10G qcow2格式磁盘
qemu-img create -f qcow2 /data/kvm/images/kvm-centos7.qcow2 10G
# 查看磁盘信息
qemu-img info /data/kvm/images/kvm-centos7.qcow2
3. 命令行创建 KVM 虚拟机
bash
运行
# 上传CentOS 7镜像到/data/kvm/iso目录后执行
virt-install \
--name=kvm-centos7 \
--os-type=linux \
--os-variant=rhel7 \
--ram=1024 \
--vcpus=1 \
--disk path=/data/kvm/images/kvm-centos7.qcow2,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port=5910 \
--noautoconsole \
--cdrom=/data/kvm/iso/CentOS-7-x86_64-Minimal-2009.iso
参数说明:
--graphics vnc:开启 VNC 远程安装,端口 5910--network bridge=br0:使用桥接网络
六、KVM 虚拟机全生命周期管理命令
1. 基础管理命令
bash
运行
# 查看所有虚拟机状态
virsh list --all
# 启动虚拟机
virsh start kvm-centos7
# 正常关机
virsh shutdown kvm-centos7
# 强制断电(类似拔电源)
virsh destroy kvm-centos7
# 挂起虚拟机
virsh suspend kvm-centos7
# 恢复虚拟机
virsh resume kvm-centos7
# 设置虚拟机开机自启
virsh autostart kvm-centos7
# 取消开机自启
virsh autostart --disable kvm-centos7
2. 虚拟机配置管理
bash
运行
# 导出虚拟机配置文件
virsh dumpxml kvm-centos7 > /etc/libvirt/qemu/kvm-centos7-bak.xml
# 删除虚拟机(仅删配置,不删磁盘)
virsh undefine kvm-centos7
# 重新定义虚拟机
virsh define /etc/libvirt/qemu/kvm-centos7-bak.xml
# 编辑虚拟机配置(安全编辑,自动校验语法)
virsh edit kvm-centos7
3. 虚拟机磁盘与文件管理
bash
运行
# 查看虚拟机磁盘格式
qemu-img info /data/kvm/images/kvm-centos7.qcow2
# raw格式转换为qcow2格式
qemu-img convert -f raw -O qcow2 /data/kvm/images/test.raw /data/kvm/images/test.qcow2
# 查看虚拟机内文件(类似cat)
virt-cat -a /data/kvm/images/kvm-centos7.qcow2 /etc/hosts
# 编辑虚拟机内文件(类似vim)
virt-edit -a /data/kvm/images/kvm-centos7.qcow2 /etc/resolv.conf
# 查看虚拟机磁盘使用情况
virt-df -h kvm-centos7
4. 虚拟机克隆
bash
运行
# 关机后克隆
virsh shutdown kvm-centos7
virt-clone -o kvm-centos7 -n kvm-centos7-clone -f /data/kvm/images/kvm-centos7-clone.qcow2
# 启动克隆虚拟机
virsh start kvm-centos7-clone
5. 虚拟机快照管理(仅支持 qcow2)
bash
运行
# 创建快照
virsh snapshot-create kvm-centos7
# 查看所有快照
virsh snapshot-list kvm-centos7
# 查看当前快照
virsh snapshot-current kvm-centos7
# 恢复到指定快照
virsh snapshot-revert kvm-centos7 快照名
# 删除指定快照
virsh snapshot-delete kvm-centos7 快照名
七、常见问题与优化知识点
- KVM 无法启动:检查 CPU 虚拟化是否开启、KVM 模块是否加载、libvirtd 服务是否正常。
- 虚拟机无网络:检查桥接网卡配置、br0 是否 UP、防火墙是否放行。
- 性能优化 :
- 磁盘使用
qcow2+virtio驱动 - 网卡使用
virtio-net半虚拟化驱动 - 开启 CPU 绑定、大页内存提升性能
- 磁盘使用
八、总结
本手册完整覆盖KVM 原理、环境初始化、软件安装、桥接网络、存储配置、虚拟机创建、全命令行管理、快照 / 克隆 / 磁盘操作等全流程,所有命令可直接在 CentOS 7.9 环境执行,适配生产与实验场景。