部署KVM 虚拟化平台
一、KVM简述
KVM(Kernel - based Virtual Machine)即基于内核的虚拟机,是一种开源的虚拟化技术。它依托 Linux 内核运行,能让 Linux 内核转变为一个 hypervisor(虚拟机监控程序),从而实现对多个虚拟机的有效管理。
KVM 具有诸多核心特性。在虚拟化类型上,它属于全虚拟化技术,无需对客户机操作系统进行修改,就能让其在虚拟机中顺畅运行,极大降低了使用门槛。其架构优势显著,与 Linux 内核深度融合,可充分借助 Linux 内核的进程管理、内存管理、设备驱动等功能,不仅减少了开发难度,还能随着 Linux 内核的更新不断获得性能优化和新特性支持。
在性能方面,KVM 表现出色。它支持硬件辅助虚拟化技术,如 Intel VT 和 AMD-V,能显著提升虚拟机的运行效率,使虚拟机的性能接近物理机。同时,KVM 对多处理器、大内存等硬件配置有良好的支持,可满足各种复杂应用场景的需求。
KVM 的应用场景十分广泛。在服务器虚拟化领域,能将一台物理服务器虚拟成多个独立的虚拟机,提高服务器资源的利用率,降低企业的硬件成本和运维成本。在云计算平台中,KVM 常被用作底层虚拟化技术,为云服务提供稳定、高效的虚拟化支持,助力构建弹性、可扩展的云基础设施。此外,在开发测试环境中,开发者可利用 KVM 快速创建多个隔离的虚拟机环境,方便进行不同版本软件的测试和开发工作。
术语 | 说明 |
---|---|
Qemu | 快速仿真器 |
Libkvm | libkvm 通过 ioctl 系统调用进入内核模式 |
ioctl | ioctl 是设备驱动程序中对设备的 I/O 通道进行管理的函数 |
fd | 用 fd 通过 ioctl 向设备驱动来发送创建、运行虚拟机命令,设备驱动 /dev/kvm 就会来解析命令 |
QEMU(Quick EMUlator)是一个开源的通用模拟器和虚拟化软件,由Fabrice Bellard创建。 它允许在一个平台上运行一个或多个操作系统,这些操作系统与宿主机(运行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 Mode | KVM 虚拟化核心模式,运行 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