KVM 虚拟化平台部署实战手册

一、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

前置要求

  1. 物理机 / 虚拟机 CPU 开启Intel VT-x/AMD-V虚拟化。
  2. 系统最小化安装,配置 YUM 源。
  3. 关闭防火墙、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 快照名

七、常见问题与优化知识点

  1. KVM 无法启动:检查 CPU 虚拟化是否开启、KVM 模块是否加载、libvirtd 服务是否正常。
  2. 虚拟机无网络:检查桥接网卡配置、br0 是否 UP、防火墙是否放行。
  3. 性能优化
    • 磁盘使用qcow2+virtio驱动
    • 网卡使用virtio-net半虚拟化驱动
    • 开启 CPU 绑定、大页内存提升性能

八、总结

本手册完整覆盖KVM 原理、环境初始化、软件安装、桥接网络、存储配置、虚拟机创建、全命令行管理、快照 / 克隆 / 磁盘操作等全流程,所有命令可直接在 CentOS 7.9 环境执行,适配生产与实验场景。

相关推荐
云达闲人2 天前
搭建DevOps企业级仿真实验环境:002Proxmox 系统安装流程详解
运维·虚拟化·devops·kvm·proxmox·实验环境搭建·web管理
黑蛋同志11 天前
KVM虚拟化热迁移
运维·虚拟化·kvm
白毛大侠13 天前
Docker vs 虚拟机 vs Go 用户态/内核态:这三组概念
运维·docker·golang·kvm
养乐多q.♡1 个月前
AIMaLinux系统上通过KVM创建了windows10系统,在windows10系统中通过NFS分享文件夹到内网上可以挂载
虚拟机·kvm·nfs挂载·aimalinux
real向往1 个月前
物理机磁盘损坏无法克隆虚拟机
kvm·物理机·磁盘损坏
real向往1 个月前
KVM虚拟机管理(X86/ARM)
arm·kvm·x86·虚拟机管理
tianyuanwo3 个月前
KVM 虚拟化启动失败深度解析:从硬件到软件的系统性故障排除
kvm·virsh create
人间打气筒(Ada)3 个月前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移
SmartRadio3 个月前
基于ESP32-S3+Barrier实现多电脑KVM共享方案(无缝切换+剪贴板/文件共享)
电脑·esp32·kvm·远程·虚拟键盘·虚拟鼠标