当前位置: 首页 > news >正文

部署KVM 虚拟化平台

一、KVM简述

        KVM(Kernel - based Virtual Machine)即基于内核的虚拟机,是一种开源的虚拟化技术。它依托 Linux 内核运行,能让 Linux 内核转变为一个 hypervisor(虚拟机监控程序),从而实现对多个虚拟机的有效管理。​
        KVM 具有诸多核心特性。在虚拟化类型上,它属于全虚拟化技术,无需对客户机操作系统进行修改,就能让其在虚拟机中顺畅运行,极大降低了使用门槛。其架构优势显著,与 Linux 内核深度融合,可充分借助 Linux 内核的进程管理、内存管理、设备驱动等功能,不仅减少了开发难度,还能随着 Linux 内核的更新不断获得性能优化和新特性支持。​
        在性能方面,KVM 表现出色。它支持硬件辅助虚拟化技术,如 Intel VT 和 AMD-V,能显著提升虚拟机的运行效率,使虚拟机的性能接近物理机。同时,KVM 对多处理器、大内存等硬件配置有良好的支持,可满足各种复杂应用场景的需求。​
        KVM 的应用场景十分广泛。在服务器虚拟化领域,能将一台物理服务器虚拟成多个独立的虚拟机,提高服务器资源的利用率,降低企业的硬件成本和运维成本。在云计算平台中,KVM 常被用作底层虚拟化技术,为云服务提供稳定、高效的虚拟化支持,助力构建弹性、可扩展的云基础设施。此外,在开发测试环境中,开发者可利用 KVM 快速创建多个隔离的虚拟机环境,方便进行不同版本软件的测试和开发工作。

术语说明
Qemu快速仿真器
Libkvmlibkvm 通过 ioctl 系统调用进入内核模式
ioctlioctl 是设备驱动程序中对设备的 I/O 通道进行管理的函数
fd用 fd 通过 ioctl 向设备驱动来发送创建、运行虚拟机命令,设备驱动 /dev/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在软件开发、测试、系统管理、教育和研究等领域有广泛应用

1、KVM的工作模式

模式类型英文具体说明
客户模式Guest Mode可理解为虚拟机在操作系统中运行的模式,又分内核模式和用户模式。内核模式模拟 CPU 及内存,实现客户模式切换、处理退出,KVM 内核模块运行于此;用户模式下运行 QEMU,实现 IO 模拟与虚拟机管理,提供用户空间工具、执行 IO 操作
用户模式User Mode运行 QEMU,实现 IO 模拟与虚拟机管理,为用户提供虚拟机管理的用户空间工具及代表用户执行 I/O 操作
内核模式Kernel ModeKVM 虚拟化核心模式,运行 KVM 内核模块。为虚拟机创建虚拟 CPU 和虚拟内存,执行 VMLAUNCH 指令进入客户模式加载 Guest OS 运行;Guest OS 异常时暂停其运行、保存状态并退出到内核模式处理,还负责处理 I/O 情况,完成后重新进入客户模式

2、部署桌面环境

dnf -y install gnome-session gnome-terminal gnome-shell gdm
systemctl set-default graphical.target
reboot

dnf -y install qemu-kvm virt-install qemu-img bridge-utils libvirt virt-manager

3、改名

hostnamectl set-hostname kvm01
bashhostnamectl set-hostname kvm02
bash

4、修改hosts文件

vim /etc/hosts###编辑内容###
192.168.10.101 kvm01
192.168.10.102 kvm02

5、关闭防火墙及内核

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

cat /proc/cpuinfo | grep vmx

lsmod | grep kvm

6、开启 libvirtd 服务

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

systemctl start libvirtd
systemctl enable libvirtd

二、设置 KVM 网络

1、以 Bridge(桥接)为例这

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens160 ifcfg-br0vim ifcfg-ens160
###编辑内容###
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.101
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=8.8.8.8
DNS2=114.114.114.114
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
#UUID=dd5341a5-f407-4d12-85b6-94461e65b03a
DEVICE=ens160
ONBOOT=yes
BRIDGE=br0vim ifcfg-br0
###编辑内容###
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.101
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=8.8.8.8
DNS2=114.114.114.114
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=br0
#UUID=dd5341a5-f407-4d12-85b6-94461e65b03a
DEVICE=br0
ONBOOT=yes

2、重载网卡

nmcli c reload
nmcli c up ens160
nmcli c up br0

3、KVM 管理

3.1、创建存储池

存储池的名称为:kgc、存储池的目录为:/data_kvm/store

3.2、创建存储卷

kgc的存储池中添加存储卷

存储卷名称为:test01、卷最大容量20G

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

3.4、在kvm01的主机上新建虚拟机,名称为test01

4、修改网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0###编辑内容###
TYPE=Ethernet
PROXYTYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.20
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=692fbdb5-9a6a-4006-bb2-f16dc89d37e5
DEVICE=eth0
ONBOOT=yes###重启网卡###
systemctl restart network

三、使用 KVM 命令集管理虚拟机

1、查看命令帮助

virsh -h

2、查看 KVM 的配置文件存放目录

ls /etc/libvirt/qemu/

3、查看虚拟机状态

virsh list --all

4、关闭与启动虚拟机

virsh shutdown centos7.0
virsh start centos7.0

5、强制关机

virsh destory centos7.0

6、利用虚拟机配置文件加载虚拟机

virsh create /etc/libvirt/qemu/centos7.0.xml

7、挂起虚拟机

virsh suspend centos7.0

8、恢复挂起的虚拟机

virsh resume centos7.0

9、配置虚拟机实例伴随宿主机自动启动

virsh autostart centos7.0

10、导出虚拟机配置

virsh dumpxml centos7.0 > /etc/libvirt/qemu/aaa.xml

11、虚拟机的添加与删除

###关闭虚拟机###
virsh shutdown centos7.0###解除已注册的虚拟机###
virsh undefine centos7.0

12、重新定义虚拟机

# 使用 virsh 命令的 define 子命令,依据指定的 XML 配置文件(aaa.xml)
# 定义一个新的虚拟机(或虚拟机相关资源,比如虚拟机的元数据、硬件配置描述等)。
# 执行这条命令后,虚拟机相关定义会被注册到虚拟化管理程序中,但不会立即启动虚拟机。
virsh define aaa.xml# 使用 virsh 命令的 start 子命令,启动名称为 “centos7.0” 的虚拟机实例。
# 前提是该虚拟机已经通过类似上面 define 操作(或其他合法方式)完成定义,
# 执行后会尝试拉起虚拟机的操作系统等,让虚拟机进入运行状态。 
virsh start centos7.0

四、KVM 文件管理

1、查看当前磁盘格式

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

2、安装依赖工具

dnf -y install libguestfs-tools guestfs-tools

3、查看

##virt - cat :是用于从虚拟机磁盘镜像中读取文件内容的工具,常用于在不启动虚拟机的情况下,查看、提取虚拟机内部文件信息 。
##-a /data_kvm/store/zhangsan.qcow2 :-a 选项用于指定虚拟机的磁盘镜像文件路径,这里就是 ##/data_kvm/store/zhangsan.qcow2 ,告诉 virt - cat 要操作的虚拟机磁盘来源 。
##/etc/sysconfig/grub :这是要查看的虚拟机内部的文件路径,/etc/sysconfig/grub 在 Linux 系统中通常用于配置 GRUB(启动加载程序)相关的系统参数 ,比如内核启动参数等配置信息会在这里定义 。
virt-cat -a /data_kvm/store/zhangsan.qcow2 /etc/sysconfig/grub

4、编辑

# virt-edit 是用于编辑虚拟机磁盘镜像或快照中文件的工具,无需启动虚拟机即可修改内部文件
# -a 选项用于指定要操作的虚拟机磁盘镜像文件路径
virt-edit -a /data_kvm/store/zhangsan.qcow2 /etc/resolv.conf
# /data_kvm/store/zhangsan.qcow2 是 QCOW2 格式的虚拟机磁盘镜像文件所在路径,QCOW2 是常见的 KVM 虚拟机磁盘镜像格式
# /etc/resolv.conf 是要在虚拟机镜像内编辑的目标文件,该文件用于配置 DNS 解析相关参数(如 DNS 服务器地址等 )

5、查看磁盘使用情况

virt-df -h centos7.0

6、克隆

##确定虚拟机的状态是关闭的
virsh list --all##创建克隆
virt-clone -o centos7.0 -n bbb -f /data_kvm/store/bbb.qcow2

7、快照

7.1、创建

virsh snapshot-create bbb

7.2、列出快照

virsh snapshot-list bbb

7.3、恢复快照

virsh snapshot-revert bbb  1751457419

7.4、查看当前快照的信息

virsh snapshot-current bbb

http://www.dtcms.com/a/264769.html

相关文章:

  • AI驱动,治理升级!数造科技亮相中博会,打造一站式数据开发治理新范式
  • OFA-PT:统一多模态预训练模型的Prompt微调
  • 暴力破解漏洞与命令执行漏洞
  • PHP 命令行工具的常用选项详解
  • 图像二值化方法及 Python OpenCV 实现
  • 深度剖析NumPy核心函数reshape()
  • 香港券商交易系统开发与解决方案全景报告:云原生、跨境协同与高性能架构的创新实践
  • qt-- 学习笔记11(mingw编译,windeployqt生成执行文件exe,同一exe文件不同文件夹结果不同)
  • 分布式定时任务:Elastic-Job-Lite
  • P3842 [TJOI2007] 线段(动态规划)
  • RAC (ReactiveCocoa) 的实现机制与消息传递策略
  • XILINX Kintex 7系列FPGA的架构
  • ubentu服务器版本安装Dify
  • 【leetcode算法300】:哈希板块
  • 多项式带余除法——线性代数题目为例
  • 【.NET Framework 窗体应用程序项目结构介绍】
  • WHAT - React Native 中 Light and Dark mode 深色模式(黑暗模式)机制
  • 如何在Excel中每隔几行取一行
  • 【PMP】项目管理入门:从基础到环境的体系化拆解
  • 分布式定时任务:xxl-job
  • 苍穹外卖day12--Apache POI导出Excel报表
  • [MIA 2025]CLIP in medical imaging: A survey
  • 多云密钥统一管理实战:CKMS对接阿里云/华为云密钥服务
  • .npmrc和.yarnrc配置文件介绍:分别用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具
  • oracle集合三嵌套表(Nested Table)学习
  • 【第三章:神经网络原理详解与Pytorch入门】01.神经网络算法理论详解与实践-(1)神经网络预备知识(线性代数、微积分、概率等)
  • 微控制器中的EXTI0(External Interrupt 0)中断是什么?
  • uniapp socket 封装 (可拿去直接用)
  • 可编辑33页PPT | 某材料制造企业工业互联网平台解决方案
  • 云原生环境下部署大语言模型服务:以 DeepSeek 为例的实战教程