冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 开篇:专栏介绍

    • 开篇:实战AI大模型专栏正式开撸
  • 第01部分:DeepSeek API实战

    • 第01节:实战Java和Python调用DeepSeek API
    • 第02节:DeepSeek API流式调用实战
    • 第03节:基于SpringAI实现智能问答系统
  • 第02部分:部署AI大模型

    • 第01节:DeepSeek本地部署+知识库+联网搜索
    • 第02节:DeepSeek R1蒸馏模型组本地部署与调用
    • 第03节:DeepSeek R1蒸馏模型组Ollama调用
    • 第04节:基于Windows系统部署DeepSeek多模态生成模型
    • 第05节:基于Ubuntu系统部署DeepSeek多模态生成模型
    • 第06节:基于Ollama+OpenWebUI和DeepSeek-R1本地部署AI对话系统
    • 第07节:Sealos Cloud+K8S一键脚本部署
    • 第08节:私有化部署Sealos Cloud+Devbox+Minio
  • 第03部分:生成AI应用

    • 第01节:构建生成式AI应用-安装Ollama+Dify
    • 第02节:构建生成式AI应用-接入DeepSeek大模型
    • 第03节:通过Ollama+Dify+DeepSeek+searxng创建Agent应用
    • 第04节:通过Ollama+Dify+Qwen3创建Agent应用
    • 第05节:通过Dify实现构建AI图片生成应用
    • 第06节:基于Dify+llama3+Stable Diffusion搭建AI图片生成应用
    • 第07节:基于Dify+deepseekR1搭建文章理解助手
    • 第08节:基于Dify+deepseekR1搭建智能客服机器人
    • 第09节:基于MCP插件加入高德地图MCP Server
    • 第10节:搭建云IDE平台并安装Dify
    • 第11节:基于ACE-Step搭建生成式AI音乐应用
  • 第04部分:AI数字人应用

    • 第01节:实践QEMU-KVM 虚拟化
    • 第02节:基于Dify chatflow工作流生成专业级提示词
    • 第03节:基于Awesome-Digital-Human-Live打造AI数字人
    • 第04节:基于多个大模型改写数字人应用(代码版)
    • 第05节:基于开源数字人硅基heygem生成AI数字人
  • 第05部分:增强与优化

    • 第01节:增强优化ComfyUI并安装插件
    • 第02节:从源码到Docker部署Qwen3-VL接口
    • 第03节:分离部署Duix.Avatar服务端和客户端
  • 专栏总结

    • 总结:实战AI大模型整体专栏总结

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

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

大家好,我是冰河~~

今天,带着大家在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 地址主要软件
binghe001CentOS 7.9 x86_64192.168.10.108KVM 虚拟机
binghe002CentOS 7.9 x86_64192.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

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

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

4.1.2 验CPU 虚拟化

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

lsmod | grep kvm

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

4.1.3 开启 libvirtd 服务

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

# 启动libvirtd服务
systemctl start libvirtd
# 设置libvirtd服务开机自启
systemctl enable libvirtd

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

4.2.1 网络模式介绍

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

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

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

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

添加以下内容

查看完整文章

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

在 GitHub 上编辑此页
上次更新: 2026/4/29 16:18
Contributors: binghe001
Next
第02节:基于Dify chatflow工作流生成专业级提示词
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接