1.部署KVM虚拟化平台

一.KVM原理简介

广义的KVM实际上包含两部分,一部分是基于Linux内核支持的KVM内核模块,另一部分就是经过简化和修改的Qemuo

KVM内核模块是模拟处理器和内存以支持虚拟机的运行,Qemu主要处理丨℃以及为用户提供一个用户空间工具来进行虚拟机的管理。两者相互结合、相辅相成,构成了一个完整的虚拟化平台。

需要注意的是,Qemu本身并不是KVM的一部分,Qemu是一套完整的虚拟化解决方案,是纯软件实现虚拟化,包括处理器虚拟化、内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟出来的,所以Qemu的性能比较低。

二.KVM运行时的三种模式

客户模式:执行非I/O的客户代码,虚拟机运行在这个模式下

用户模式:用户执行I/O代码,QEMU运行在这个模式下 

内核模式:CPU调度和内存管理相关

客户模式(‌Guest Mode)‌:‌可以理解为虚拟机在操作系统中运行的模式。客户模式又分为内核模式和用户模式。‌内核模式模拟CPU以及内存,‌实现客户模式的切换,‌处理从客户模式的退出。‌KVM内核模块运行在这个模式下,‌模拟CPU以及内存,‌实现客户模式的切换,‌处理从客户模式的退出。

用户模式(‌User Mode)‌在这种模式下,‌运行QEMU,‌实现IO模拟与虚拟机管理。‌QEMU运行在这个模式下,‌为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O操作。‌

内核模式(‌Kernel Mode)‌这是KVM虚拟化的核心模式,‌运行KVM内核模块。‌在这个模式下,‌KVM为虚拟机创建虚拟CPU和虚拟内存,‌然后执行VMLAUNCH指令进入客户模式,‌装载Guest OS并运行。‌如果Guest OS运行过程中发生异常,‌KVM会暂停Guest OS的运行,‌保存当前状态,‌并退出到内核模式来处理这些异常。‌内核模式还负责处理需要I/O的情况,‌处理完成后重新进入客户模式。

三.KVM工作原理

KVM(Kernel-based Virtual Machine)是基于Linux内核的虚拟机技术,其工作原理核心是利用硬件虚拟化扩展(如Intel VT-x/AMD-V)将物理CPU、内存和I/O设备虚拟化为多个虚拟机资源,具体如下:

核心组件

• KVM模块:作为Linux内核模块,负责创建和管理虚拟机(VM),并通过硬件虚拟化功能实现CPU和内存的虚拟化。

• QEMU:模拟I/O设备(如网卡、硬盘),与KVM结合后,通过KVM模块接管CPU和内存,自身专注于I/O模拟,提升性能。

工作流程

1. 初始化:KVM模块加载后,通过/dev/kvm接口为每个虚拟机创建虚拟CPU(vCPU),每个vCPU对应一个Linux进程。

2. CPU虚拟化:利用硬件虚拟化技术(如Intel VT-x的VMX模式),将vCPU调度到物理CPU上运行,实现指令集的隔离和特权级转换。

3. 内存虚拟化:通过KVM的内存管理组件(如影子页表或EPT/NPT技术),将虚拟机的虚拟地址映射到物理地址,确保各VM内存独立。

4. I/O虚拟化:QEMU通过软件模拟或硬件直通(如PCIe设备直通),让VM访问外设,硬件直通可提升I/O性能。

5. 资源调度:Linux内核的调度器负责分配物理CPU时间片给各个vCPU,内存和I/O资源也由KVM和QEMU协同管理。

关键技术

• 硬件辅助虚拟化:依赖CPU提供的虚拟化指令,避免纯软件模拟的性能损耗。

• 半虚拟化驱动(virtio):VM通过virtio接口与宿主机通信,优化网络、磁盘等I/O性能。

• 实时迁移:利用KVM的状态保存和恢复机制,可在物理主机间迁移运行中的VM,不中断服务。

KVM通过与Linux内核深度整合,实现了高效的服务器虚拟化,广泛应用于云计算和企业服务器集群。

  • Qemu:快速仿真器
  • Libkvm: libkvm 通过 ioctl 系统调用进入内核模式
  • Ioctl:ioctl是设备驱动程序中对设备的I/O通道进行管理的函数
  • fd:用fd 通过ioctl 向设备驱动来发送创建,运行虚拟机命令,设备驱动/dev/kvm 就会来解析命令
  • /dev/kvm:Linux字符集设备 /dev/kvm,是kvm的内核模块

QEMU(Quick EMUlator)是一个开源的通用模拟器和虚拟化软件,由‌Fabrice Bellard创建。 它允许在一个平台上运行一个或多个操作系统,这些操作系统与宿主机(运行QEMU的机器)的原生操作系统完全隔离。QEMU具有以下主要功能:

  • 系统模拟:可以模拟多种不同的计算机类型和架构,如x86, x86-64 (AMD64/Intel 64), ‌ARM, ‌PowerPC, ‌SPARC等。这意味着可以在一个架构上运行为另一架构编译的操作系统和程序。
  • 用户模式模拟:支持用户模式模拟,允许单个程序以不同的操作系统用户空间在主机上运行,这对于开发和测试跨平台应用程序非常有用。
  • 虚拟化:当在支持硬件虚拟化的处理器上运行时,QEMU可以利用‌KVM(Kernel-based Virtual Machine)模块提供快速虚拟化,使虚拟机以接近物理硬件的速度运行,同时提供隔离和资源控制的优点。
  • 网络和设备模拟:支持复杂的网络模拟功能,允许虚拟机通过不同的网络拓扑配置相互通信或访问互联网。同时能够模拟各种硬件设备,如硬盘、网络接口卡、图形适配器、USB设备等。

QEMU可以独立使用,也经常与其他虚拟化和模拟工具一起使用,如‌VirtualBox或‌VMware的用户界面,或者与‌libvirt这样的虚拟化管理库配合使用,以简化虚拟机的管理和操作。这使得QEMU在软件开发、测试、系统管理、教育和研究等领域有广泛应用

四.实验步骤

实验环境

主机

操作系统

IP地址

主要软件

kvm01

CentOS 7.9 x86_64

192.168.10.108

KVM 虚拟机

kvm02

CentOS 7.9 x86_64

192.168.10.109

1.搭建KVM虚拟化平台

1.2准备KVM虚拟化环境

1YUM 安装 KVM

yum -y install qemu-kvm

yum -y install qemu-img

yum -y install bridge-utils

yum -y install qemu-kvm-tools

yum -y install virt-install

yum -y install libvirt

yum -y install virt-manager

yum -y install libguestfs-tools

备注:

qemu-kvm : kvm核心包–虚拟操作系统模拟器加速模块

qemu-img :是QEMU的磁盘管理工具

bridge-utils:虚拟机与外界通信的命令管理工具

qemu-kvm-tools :qemu-kvm的工具包

virt-install:虚拟机安装工具

libvirt:必须要装的核心工具

virt-manager:虚拟机图形管理工具(宿主机有桌面环境时可以考虑安装,命令操作或者远程控制则不需要)

libguestfs-tools:用于访问虚拟机的磁盘映像文件提供的一组命令

QEMU是“Quick Emulator”的缩写,是一个用C语言编写的开源虚拟化软件。

QEMU(Quick Emulator)快速仿真器

(2)关机,设置CPU支持虚拟化,然后开机

(3)开机后验证

hostnamectl set-hostname kvm01

 bash

vim /etc/hosts

192.168.10.201 kvm01

192.168.10.202 kvm02

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

cat /proc/cpuinfo | grep vmx

lsmod | grep kvm

(4)开启libvirtd服务

安装完成后还需要开启 libvirtd 服务,以开启相关支持。

systemctl start libvirtd

systemctl enable libvirtd

2.设置KVM网络

这里以 Bridge(桥接)为例进行操作演示

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-br0

vi ifcfg-ens160

BRIDGE=br0

vi ifcfg-br0

TYPE=bridge

NAME=br0

DEVICE=br0

systemctl restart network

ifconfig

3.KVM管理

virt-manager

1)创建存储池

存储池的名称为:kgc

存储池的目录为:/data_kvm/store

(2)创建存储卷

kgc的存储池中添加存储卷

存储卷名称为:test01

卷最大容量10G

(3)将Linux系统的ISO文件拷贝到/opt目录下,并关闭存储设置

(4)在kvm01的主机上新建虚拟机,名称为test01

5.使用KVM命令集管理虚拟机

virsh -h                              //查看命令帮助

ls /etc/libvirt/qemu/            //查看KVM的配置文件存放目录

virsh list --all                      //查看虚拟机状态

virsh shutdown test01       //虚拟机关机

virsh start test01                //虚拟机开机

virsh destroy test01           //强制实例系统关闭电源

 virsh create /etc/libvirt/qemu/test01.xml   //通过配置文件启动虚拟机系统实例

virsh suspend test01             //挂起虚拟机

 virsh resume test01              //恢复虚拟机

virsh autostart test01            //配置虚拟机实例伴随宿主机自动启动

virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml         //导出虚拟机配置

virsh shutdown test01

virsh undefine test01                 //虚拟机的删除与添加

查看删除结果,test01 的配置文件被删除,但是磁盘文件不会被删除。

ls /etc/libvirt/qemu/

通过 virsh list --all 查看不到 test01 的信息,说明此虚拟机被删除

通过备份的配置文件重新定义虚拟机:

cd /etc/libvirt/qemu

 mv test02.xml test01.xml

重新定义虚拟机:

virsh define test01.xml

修改虚拟机配置信息

vim命令:vim /etc/libvirt/qemu/test01.xml

virsh命令: virsh edit test01

6.KVM文件管理

(1)查看当前磁盘格式

qemu-img info /data_kvm/store/test01.qcow2

备注:

如果虚拟机磁盘文件不是 qcow2 格式,可以通过 qemu-img 命令转换磁盘文件格式,

如执行以下操作可以将 test01 虚拟机 raw 格式磁盘转换至 qcow2 格式。

[root@kvm01 ~]# virsh shutdown test01

[root@kvm01 ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/test01.img /data_kvm/store/test01.qcow2

执行转换磁盘格式的命令后还需要修改 test01 的 xml 配置文件中磁盘的类型与磁盘文件名。

[root@kvm01 ~]# virsh edit test01

…… //省略部分内容

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2' cache='none'/>

<source file='/data_KVM/store/test01.qcow2'/>

<target dev='vda' bus='virtio'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

</disk>

(2)virt-cat 命令,类似于 cat 命令

使用这个命令需要安装 libguestfs-tools-c 工具包。

virt-cat -a /data_kvm/store/test01.qcow2 /etc/sysconfig/grub

3virt-edit 命令

virt-edit 命令,用于编辑文件,用法与 vim 基本一致。

virt-edit -a /data_kvm/store/test01.qcow2 /etc/resolv.conf

(4virt-df 命令

virt-df 命令用于查看虚拟机磁盘信息。

virt-df -h test01

7.虚拟机克隆

 (1)查看虚拟机状态  

virsh list --all

(2)从 test01 克隆 test02

virt-clone -o test01 -n test02 -f /data_kvm/store/test02.qcow2

(3)查看虚拟机状态

virsh list --all

(4)启动虚拟机

 virsh start test02

8.虚拟机快照

KVM 虚拟机要使用镜像功能,磁盘格式必须为 qcow2。

1)对 test01 创建快照

virsh snapshot-create test01

已生成域快照 1503494464

2)查看虚拟机快照版本信息

virsh snapshot-current test01

(3)查看快照信息

 virsh snapshot-list test01

(4)创建新快照

 virsh snapshot-create test01

(5)查看快照信息

virsh snapshot-list test01

(6)恢复虚拟机状态

virsh snapshot-revert test01 1503494464

(7)查看虚拟机快照版本信息

 virsh snapshot-current test01

(8)删除快照

 virsh snapshot-delete test01 1503494464

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87591.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化与管理数据库连接池

优化与管理数据库连接池 在现代高并发系统中,数据库连接池是保障数据库访问性能的核心组件之一。合理配置、优化和管理连接池,可以有效缓解连接创建成本高、连接频繁断开重连等问题,从而提升系统整体的响应速度与稳定性。 数据库连接池的作用与价值 数据库连接池的核心思…

实现回显服务器(基于UDP)

目录 一.回显服务器的基本概念 二.回显服务器的简单示意图 三.实现回显服务器&#xff08;基于UDP&#xff09;必须要知道的API 1.DatagramSocket 2.DatagramPacket 3.InetSocketAddress 4.二者区别 1. 功能职责 2. 核心作用 3. 使用场景流程 四.实现服务器端的主…

LabVIEW电液伺服阀自动测试

针对航空航天及工业液压领域电液伺服阀测试需求&#xff0c;采用 LabVIEW 图形化编程平台&#xff0c;集成 NI、GE Druck 等品牌硬件&#xff0c;构建集静态特性&#xff08;流量/ 压力 / 泄漏&#xff09;与动态特性&#xff08;频率响应&#xff09;测试于一体的自动化系统&a…

性能优化 - 高级进阶: Spring Boot服务性能优化

文章目录 Pre引言&#xff1a;为何提前暴露指标与分析的重要性指标暴露与监控接入Prometheus 集成 性能剖析工具&#xff1a;火焰图与 async-profilerasync-profiler 下载与使用结合 Flame 图优化示例 HTTP 及 Web 层优化CDN 与静态资源加速Cache-Control/Expires 在 Nginx 中配…

力扣网C语言编程题:除自身以外数组的乘积

一. 简介 本文记录力扣网上涉及数组方面的编程题&#xff0c;主要以 C语言实现。 二. 力扣上C语言编程题&#xff1a;涉及数组 题目&#xff1a;除自身以外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i…

SpringBoot扩展——发送邮件!

发送邮件 在日常工作和生活中经常会用到电子邮件。例如&#xff0c;当注册一个新账户时&#xff0c;系统会自动给注册邮箱发送一封激活邮件&#xff0c;通过邮件找回密码&#xff0c;自动批量发送活动信息等。邮箱的使用基本包括这几步&#xff1a;先打开浏览器并登录邮箱&…

【html】iOS26 液态玻璃实现效果

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>液体玻璃效果演示</title><style>bo…

探索算法秘境:量子随机游走算法及其在图论问题中的创新应用

目录 ​编辑 一、量子随机游走算法的起源与原理 二、量子随机游走算法在图论问题中的创新应用 三、量子随机游走算法的优势与挑战 四、结语 在算法研究的浩瀚星空中&#xff0c;总有一些领域如同遥远星系&#xff0c;闪烁着神秘而诱人的光芒。今天&#xff0c;我们将一同深…

C# 一维数组和矩形数组全解析

在编程的世界里&#xff0c;数组是一种非常重要的数据结构。今天&#xff0c;我们就来详细了解一下一维数组和矩形数组。 数组基础认知 数组实例是从 System.Array 继承类型的对象。由于它从 BCL 基类派生而来&#xff0c;所以继承了许多有用的成员&#xff1a; Rank 属性&a…

WebStorm编辑器侧边栏

目录 编辑器侧边栏行号配置行号隐藏行号 代码折叠侧边栏图标书签添加匿名书签添加助记符书签 运行和调试管理断点配置断点图标 版本控制配置Git Blame注释 编辑器侧边栏 编辑器左侧的垂直区域。当编写代码时&#xff0c;提供重要信息和操作图标。外观和行为可以根据你的喜好进…

腾讯云TCCA认证考试报名 - TDSQL数据库交付运维工程师(PostgreSQL版)

数据库交付运维工程师-腾讯云TDSQL(PostgreSQL版)认证 适合人群&#xff1a; 适合从事TDSQL(PostgreSQL版)交付、运维、售前咨询以及TDSQL(PostgreSQL版)相关项目的管理人员。 认证考试 单选*40道多选*20道 成绩查询 70分及以上通过认证&#xff0c;官网个人中心->认证考…

attn_mask 为 (1, 1) 时什么意思? 7,7又是什么意思?

在深度学习中&#xff0c;特别是在 Transformer 模型和注意力机制&#xff08;Attention Mechanism&#xff09;中&#xff0c;attn_mask&#xff08;注意力掩码&#xff09;是一个用于控制注意力计算的张量。它决定了在计算注意力分数时&#xff0c;哪些位置应该被关注&#x…

Qt联合Halcon开发二:Halcon窗口绑定Qt控件显示Hobject图像【详细图解流程】

1. 项目准备 在本项目中&#xff0c;我们将使用Qt框架与Halcon库结合&#xff0c;展示图像并进行图像处理。首先&#xff0c;确保你已经配置好Qt和Halcon的开发环境。 环境配置可查看上篇文章 2. 创建Qt界面 在Qt中&#xff0c;创建一个窗口并拖入按钮和Graphics View控件。G…

Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)

在上一章我们深入学习了 Redis 中重要的数据持久化机制 ——RDB&#xff08;Redis Database&#xff09;&#xff0c;了解了其通过周期性快照将数据以二进制文件形式保存到磁盘的原理&#xff0c;包括触发条件、文件结构以及优缺点等核心内容。 Redis 持久化机制详解&#xff…

【GateWay】和权限验证

【GateWay】网关详解和权限验证 一、Gateway 核心概念与架构二、路由断言&#xff08;Route Predicates&#xff09;详解三、过滤器&#xff08;Filters&#xff09;机制四、权限认证的核心理论模型五、Spring Cloud Gateway Security OAuth2 集成方案六、OAuth2.0 集成 一、…

QSqlDatabase: QSQLITE driver not loaded

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言可能的原因解决办法1. 确认 SQLite 驱动插件文件2. 拷贝插件文件到应用程序目录3. 设置插件搜索路径4. 安装 SQLite 依赖库5. 解决 QCoreApplication 实例问题 …

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题【时序】

20250619在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在启动的时候出现白色条纹的问题 2025/6/19 20:39 缘起&#xff1a;荣品的PRO-RK3566开发板的Android13下&#xff0c;点亮海罗光电有限公司HL070T58C-05屏。 在启动的时候会出现花屏/白色条纹…

docker使用Volume对Nginx进行挂载

需求&#xff1a; 需要将Nginx的欢迎页面也就是index.html文件进行修改。 原始方法&#xff1a;由于docker会为每一个容器创建其对应的文件信息&#xff0c;但是创建的信息内容只有其最基础的运行信息&#xff0c;所以想要直接去访问其index.html就无法做到。 使用volume&am…

基于springboot的宠物服务预约系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

idea 2025会在用户目录创建IdeaSnapshots文件夹

推荐一个api管理测试工具 一个简单的API测试和编写文档的工具 idea 2025会在用户目录创建IdeaSnapshots文件夹 解决方案 打开 Profiler 点击 setting 参考 https://youtrack.jetbrains.com/articles/SUPPORT-A-1086/How-to-change-or-turn-off-the-IdeaSnapshots-folder-…