KVM虚拟技术介绍
Linux的KVM(Kernel-based Virtual Machine)虚拟技术是一种基于Linux内核的虚拟化解决方案。它允许在单个物理服务器上创建和运行多个隔离的虚拟机,每个虚拟机都有自己的操作系统和应用程序,就像运行在独立的物理服务器上一样。
KVM虚拟技术的核心特点包括:
- 硬件虚拟化支持:KVM利用CPU的虚拟化扩展技术,如Intel VT-x或AMD SVM,将物理主机的处理能力划分给虚拟机,提供高效的硬件资源管理。
- 完全虚拟化:KVM支持完全虚拟化,这意味着它可以在虚拟机中运行未经修改的操作系统,实现对多种操作系统和应用程序的支持。
- 性能优化:KVM的硬件虚拟化技术允许虚拟机直接访问物理硬件资源,降低了虚拟化的性能消耗,提供了接近原生性能的运行效果。
- 弹性和可伸缩性:KVM支持动态添加、删除、调整虚拟机的资源,可以根据需求灵活配置虚拟机的CPU、内存和存储等资源。
- 安全性:KVM采用严格的隔离机制,保护不同虚拟机之间的安全,防止一台虚拟机的故障对其他虚拟机造成影响。
- 社区支持:KVM是一个开源项目,拥有庞大的社区支持,提供了丰富的文档和资源,可以帮助用户更好地理解和使用该技术。
KVM的实现基于宿主机模型(Host-based),它集成在Linux内核中,因此可以自然地使用Linux内核提供的内存管理、多处理器支持等功能。这使得KVM易于实现,并且能够随着Linux内核的发展而不断进步。此外,KVM的I/O虚拟化工作通常借助Qemu等工具完成,进一步降低了实现的工作量。
libvirt库
libvirt库是一个实现Linux虚拟化功能的Linux API,它支持各种虚拟机监控程序,包括Xen、KVM以及QEMU等,同时还支持其他操作系统的一些虚拟产品。libvirt库为虚拟机管理提供了一个通用稳定的抽象层,能够安全地操作物理机上的虚拟机。它的主要功能包括虚拟机管理、虚拟设备管理和远程控制。
在虚拟机管理方面,libvirt库提供了定义、删除、启动、关闭、暂停、恢复、保存、回滚和迁移等各种功能。在虚拟设备管理方面,它能够管理各种虚拟外设,如虚拟磁盘、虚拟网卡、内存和虚拟CPU,并且支持多种设备类型的热插拔操作。此外,libvirt库还提供了远程连接功能,通过virsh程序或API,可以远程连接其他物理机的Hypervisor。
libvirt库主要由Libvirt API、Libvirtd进程和virsh工具集三个部分组成。Libvirt API提供了一套与多种操作系统虚拟化能力进行交互的接口,可以在hypervisor支持的范围内创建、修改、监控、迁移和停止虚拟机。Libvirtd进程是libvirt守护进程,负责处理虚拟机的各种请求。virsh工具集则是一组命令行工具,用于管理虚拟机和其他虚拟化资源。
libvirt库是一个强大的虚拟化管理工具,广泛应用于各种IaaS方案中,如OpenStack、OpenNebula和Nimbus等。通过使用libvirt库,用户可以方便地对虚拟机进行管理和操作,提高虚拟化环境的稳定性和灵活性。
查看RHEL9学员练习机上的libvirtd命令所在位置
whereis libvirtd
查看RHEL9学员练习机上libvirtd配置文件
vim /etc/libvirt/libvirtd.conf
查看服务状态
# libvirtd是libvirt守护进程,负责处理与虚拟化相关的请求,并提供对虚拟机的管理功能
systemctl status libvirtd
安装KVM软件组
标识 | Server |
---|---|
主机 | root@Server |
IP地址 | 192.168.110.1/24 |
软件组 | Virtualization Host |
列出所有软件组
dnf grouplist
查看已经安装的软件组
dnf grouplist --installed
安装KVM软件组
dnf groups install Virtualization* # 此处需要安装114个软件包
启动服务
systemctl enable --now libvirtd.service
可以通过virt-manager打开控制台
virt-manager
或者通过菜单栏打开控制台
新建连接
- 选择连接类型:
在“Add Connection”对话框中,你会看到几种不同类型的连接可供选择,比如QEMU/KVM、Xen、LXC等。根据你的环境和需求,选择适当的连接类型。对于大多数基于QEMU/KVM的虚拟化环境,你应该选择“QEMU/KVM”连接类型。 - 填写连接详情:
对于选定的连接类型,你需要填写相关的连接详情。对于QEMU/KVM连接,你通常只需要保留默认设置,除非你有特殊的需求,比如使用非默认的URI或需要配置SSH隧道。- Name:为你的连接起一个名字,这样你就可以在virt-manager中轻松识别它。
- Host:如果你的虚拟化环境运行在本机上,通常可以留空。如果是远程主机,则输入远程主机的地址。
- Port:通常使用默认的端口号,除非你的虚拟化环境使用了不同的端口。
- Connect via:对于本地连接,选择“Local (TCP/IP)”。对于SSH隧道,选择“SSH”并填写SSH的详情。
- Authentication:如果需要的话,填写用于身份验证的用户名和密码。
以下保持默认即可
新建KVM虚拟机–图形界面
选择安装操作系统的方式
- Localinstall media (lSO image or CDROM)【本地安装介质(ISO映像或CDROM)】
- NetworkInstall (HTTP, HTTPS, Or FTP)【网络安装(HTTP/HTTPS/FTP)】
- Import existing disk image【导入现有磁盘映像】
- Manual install【手动安装】
以下选择本地安装介质
选择安装介质的位置,我们提前将ISO文件移动到默认目录下
选择CPU和内存,这里默认即可
选择硬盘空间,同样是默认
输入虚拟机名称和选择网络连接
解除热键为Ctrl+Alt
关闭虚拟机
为虚拟机连接映像
查看开机启动选项/启动菜单,可以改为网卡启动,可以实现kickstart自动安装
新建KVM虚拟机–命令行
新建一个具有2GB内存、2个虚拟CPU和20G磁盘空间的虚拟机 并选择ISO镜像文件
virt-install --name rhel9.2-2 --ram 2048 --vcpus 2 --location /var/lib/libvirt/images/rhel-9.2-x86_64-linuxprobe.com.iso --os-variant=rhl9 --disk /var/lib/libvirt/images/rhel9.2-2.qcow2,size=20,sparse=false -w network=default --graphics vnc,listen="0.0.0.0",port=5949
--name
、-n
:设置虚拟机的名称--ram
、-r
:为虚拟机分配的内存(MB)--vcpus
:为虚拟机分配的虚拟CPU核心--location
、-l
:指定安装源的位置--os-variant
:指定操作系统的变种为rhel9,利于优化虚拟机的配置- 可以通过
virt-install --osinfo list
查看详细
- 可以通过
--disk
:虚拟机的磁盘设置- 磁盘文件路径为:/var/lib/libvirt/images/rhel9.2-2.qcow2
- 磁盘格式为qcow2
- 磁盘大小为20GB
sparse=false
:不使用稀疏格式,预先分配整个磁盘空间
-w network=default
:虚拟机连接的网络为default--graphics vnc,listen="0.0.0.0",port=5949
:设置虚拟机的图形界面- 使用协议为VNC
- 监听所有网络接口
- VNC服务的端口号为5949
连接的VNC界面
通过VNC远程控制KVM虚拟机安装
方法1-新添加插件
添加Overview插件
选择Graphics
删除掉原有的VNC
方法2-直接编辑原有插件
编辑原有插件
保证VNC客户端可以ping通宿主机
开机
VNC连接
管理虚拟机
启动虚拟机
virsh start virname
关闭虚拟机
virsh shutdown virname
重启虚拟机
virsh reboot virname
查看虚拟机列表
virsh list --all
快照管理
创建快照
virsh snapshot-create-as --domain virname --name new --description "Original environment"
snapshot-create-as
:创建快照--domain
:虚拟机的名称或者ID--name
:快照的名称--description
:对快照的描述
恢复快照
virsh snapshot-revert --domian virname --snapshotname new
snapshot-revert
:恢复快照--domain
:虚拟机的名称或ID--snapshotname
:快照的名称
删除快照
virsh snapshot-delete --domain virname --snapshotname snapshot1
snapshot-delete
:删除快照--domain
:虚拟机的名称或ID--snapshotname
:快照的名称
报错信息汇总
新建虚拟机出现 Error:No active connection to install on
这通常意味着virt-manager找不到一个激活的虚拟机连接(通常是libvirtd管理的一个连接),或者没有配置好虚拟机存储和网络连接
- 检查libvirtd服务
systemctl status libvirtd
# 如果没有运行,需要运行该服务
systemctl enable --now libvirtd # 启动服务并加入开机自启
- 检查是否有可用的连接
通常默认会存在一个QEMU/KVM连接,如果没有需要手动添加连接
- 检查权限
# 如果不是以root用户运行virt-manager,需要确保当前用户被添加到libvirt组中
usermod -aG libvirt user
连接映像时“Permission denied”意味着文件访问权限被拒绝
错误发生在QEMU尝试访问指定的ISO镜像文件时,因为它没有足够的权限来打开这个文件。错误信息中提到的“Permission denied”意味着文件访问权限被拒绝。
- 更改ISO文件的位置
# 将ISO文件移动到一个libvirt进程可以访问的目录
sudo mv /root/rhel-9.2-x86_64-linuxprobe.com.iso /var/lib/libvirt/images/
- 更改ISO文件的权限
# 更改文件的权限,让libvirt用户(qemuva )能够读取它
chown libvirt-qemu:libvirt-qemu /root/rhel-9.2-x86_64-linuxprobe.com.iso
chmod 440 /root/rhel-9.2-x86_64-linuxprobe.com.iso