# 《实战AI大模型》AI数字人应用-第01节:实践QEMU-KVM 虚拟化

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

大家好,我是冰河~~

今天,带着大家在Ubuntu Server25.04上实践QEMU-KVM 虚拟化,开始今天的正题。

# 一、案例背景与目标

# 1.1 案例背景

在企业的IT基础架构中,一个常见的现象是:许多承担着诸如Nginx代理等轻量级服务的Linux物理服务器,其CPU、内存等核心硬件资源的利用率长期处于低位。这本质上是一种资源闲置与资本浪费。为了充分“唤醒”这些沉睡的算力,将单台物理服务器转变为能够同时承载多个独立业务系统的资源池,引入服务器虚拟化技术成为关键。

KVM(基于内核的虚拟机)正是这样一个高效、成熟的解决方案。它允许我们在单一的物理主机上,创建并运行多个像Tomcat应用服务器这样的虚拟机实例。通过这种方式,我们可以将原本分散在不同低利用率主机上的服务整合起来,大幅提升硬件资源的整体使用效率,从而有效降低企业在基础设施上的投入和运维成本。

# 二、KVM 虚拟化原理详解

# 2.1 KVM 的核心构成

我们通常所说的“KVM虚拟化”,在广义上是一个由两大核心组件协同工作的技术栈:

  • KVM 内核模块:这是技术的灵魂。它作为Linux内核的一部分,直接负责对物理服务器的处理器(CPU)和内存资源进行虚拟化抽象,为虚拟机的运行提供最底层的硬件模拟支持。
  • Qemu:这是一个功能强大的“管家”。它是一个经过定制化修改的用户空间程序,主要负责处理虚拟机的输入输出(I/O)操作(如磁盘、网络),并为我们提供了管理虚拟机生命周期(创建、启动、监控等)的各种命令行工具。

需要明确的是,Qemu本身就是一个完整的软件模拟器,可以独立创建虚拟机,但性能不佳。而KVM的创新之处在于,它“嵌入”Linux内核,借助处理器自身的虚拟化扩展指令(如Intel VT或AMD-V),将大部分繁重的模拟工作交给硬件高效执行,从而实现了接近原生物理机的性能、出色的安全性与稳定性。

# 2.2 KVM 运行模式的演进

KVM 的引入,为传统的Linux系统增加了新的维度,形成了以下三种运行模式:

# 2.2.1 客户机模式

这是虚拟机内部的操作系统(Guest OS)所处的世界。它本身又包含两个层面:

  • 客户机内核模式:运行Guest OS的内核,管理其虚拟的硬件资源。
  • 客户机用户模式:运行Guest OS中的应用程序。

# 2.2.2 宿主机模式

这是物理服务器本身的操作系统(Host OS)的世界,也分为两个经典层面:

  • 宿主机内核模式:运行Linux宿主机的内核,KVM内核模块就在此生效。
  • 宿主机用户模式:运行宿主机上的管理程序,例如Qemu进程就运行于此。

# 2.3 KVM 的工作流程剖析

KVM 虚拟机的运行是一个精妙的、在三种模式间动态切换的过程:

  1. 启动:用户在宿主机上通过 qemu-kvm 命令启动一台虚拟机。Qemu 进程在宿主机用户模式下开始工作。
  2. 内核介入:Qemu 通过特定的系统调用(ioctl)与运行在宿主机内核模式的 KVM 模块通信。KVM 模块负责为这个虚拟机创建虚拟的CPU(vCPU)和内存空间。
  3. 投入运行:KVM 模块通过特殊的CPU指令(如 Intel 的 VMLAUNCH)将物理CPU切换到客户机模式,开始执行虚拟机内的Guest OS代码。
  4. 异常处理:当虚拟机运行时需要执行特权操作(如访问真实硬件)、发生外部中断(如时钟中断)或触发缺页异常时,CPU会自动从客户机模式退出,交还控制权给宿主机内核模式的KVM模块。
  5. I/O 代理:如果退出的原因是虚拟机需要进行I/O操作(例如读写虚拟磁盘),KVM模块会将此请求转交给运行在宿主机用户模式下的Qemu进程来处理。
  6. 周期循环:Qemu 完成模拟的I/O操作后,再次通过KVM模块将CPU切换回客户机模式,让Guest OS继续运行。

这个“客户机模式执行 -> 退出到宿主机内核处理 -> 必要时委托给宿主机用户空间Qemu”的循环,构成了KVM虚拟机高效运行的基石。

# 三、案例环境准备

本案例使用的环境如下表所示:

主机名 操作系统 IP 地址 主要软件
binghe001 CentOS 7.9 x86_64 192.168.10.108 KVM 虚拟机
binghe002 CentOS 7.9 x86_64 192.168.10.109 -

# 四、KVM 虚拟化平台搭建

# 4.1 准备 KVM 虚拟化环境

# 4.1.1 YUM 安装 KVM 相关软件

在 CentOS 系统中,可以通过 YUM 方便地安装 KVM 所需的软件包。首先需要部署基于光盘镜像的本地 YUM 源,然后执行以下命令安装相关软件:

# 安装GNOME桌面环境
yum groupinstall -y "GNOME Desktop"
# 安装KVM模块
yum -y install qemu-kvm
# 安装KVM调试工具(可选)
yum -y install qemu-kvm-tools
# 安装构建虚拟机的命令行工具
yum -y install virt-install
# 安装qemu组件,用于创建磁盘和启动虚拟机
yum -y install qemu-img
# 安装网络支持工具
yum -y install bridge-utils
# 安装虚拟机管理工具
yum -y install libvirt
# 安装图形界面管理虚拟机工具
yum -y install virt-manager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

安装完成后,需要将系统的默认运行目标更改为图形化界面,否则重启时可能会报错:

ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
1

# 4.1.2 验CPU 虚拟化

重启系统后,需要验证 CPU 是否支持虚拟化技术,使用以下命令检查 KVM 模块是否正确安装:

lsmod | grep kvm
1

如果输出结果中包含kvm_intelkvm_amd,则说明 KVM 模块已成功加载

# 4.1.3 开启 libvirtd 服务

安装完成后,需要启动 libvirtd 服务以提供相关支持:

# 启动libvirtd服务
systemctl start libvirtd
# 设置libvirtd服务开机自启
systemctl enable libvirtd
1
2
3
4

# 4.2 设置 KVM43网络(桥接模式)

# 4.2.1 网络模式介绍

在 libvirt 中运行 KVM 网络有两种模式:

  • NAT 模式:默认网络模式,数据包通过 NAT 方式经主机网卡接口传送,虚拟机可以访问外网,但外部主机无法访问虚拟机内部网络
  • 桥接模式:允许虚拟机像独立主机一样拥有网络,外部机器可以直接访问虚拟机内部,但需要网卡支持(一般有线网卡都支持)

这里,以桥接模式为例进行配置,宿主机 IP 地址为 192.168.10.1。首先编辑物理网卡配置文件:

vim /etc/sysconfig/network-scripts/ifcfg-ens33
1

添加以下内容

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码