ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RHEL 9上KVM虚拟化安装与配置指南

RHEL 9上KVM虚拟化安装与配置指南

1. 在RHEL 9上安装KVM的完整指南

虚拟化技术已经成为现代IT基础设施的核心组件,而KVM(Kernel-based Virtual Machine)作为Linux内核原生支持的虚拟化解决方案,在性能和管理灵活性方面具有显著优势。对于使用Red Hat Enterprise Linux 9(RHEL 9)的系统管理员来说,掌握KVM的安装和配置是必备技能。

本文将带你完成从系统准备到创建第一个虚拟机的全过程,特别针对RHEL 9环境进行了优化。不同于简单的命令罗列,我会分享在实际企业环境中部署KVM时积累的经验技巧,包括硬件兼容性检查、性能调优参数以及常见问题的解决方案。

1.1 为什么选择KVM?

KVM作为Type-1(裸金属)虚拟化解决方案,直接利用Linux内核作为虚拟机监控程序(Hypervisor),这意味着它继承了Linux内核的稳定性、安全性和性能优势。与Type-2虚拟化(如VirtualBox)相比,KVM提供了接近原生性能的虚拟化体验,特别适合生产环境使用。

在RHEL 9中,KVM与libvirt工具栈深度集成,提供了统一的管理接口。Red Hat官方对KVM的支持也意味着企业可以获得长期稳定的维护更新和安全补丁。

2. 准备工作与系统要求

2.1 硬件兼容性检查

在开始安装前,必须确认你的硬件支持虚拟化扩展。运行以下命令检查CPU是否支持虚拟化:

grep -E '(vmx|svm)' /proc/cpuinfo

如果有输出,表示CPU支持虚拟化技术(Intel为vmx,AMD为svm)。如果没有输出,你需要在BIOS中启用虚拟化支持,通常位于"Advanced"或"CPU Configuration"设置中。

注意:某些云服务商的虚拟机可能不支持嵌套虚拟化。如果你在云环境中操作,请先确认提供商是否支持。

2.2 系统更新与依赖检查

确保你的RHEL 9系统是最新的:

sudo dnf update -y

检查当前安装的内核是否支持KVM:

lsmod | grep kvm

如果没有任何输出,可能需要安装kernel-modules-extra包:

sudo dnf install kernel-modules-extra -y

3. 安装KVM及相关组件

3.1 安装虚拟化软件包

RHEL 9提供了专门的虚拟化模块,我们可以通过以下命令安装完整的KVM套件:

sudo dnf module install virt -y sudo dnf install virt-install virt-viewer libguestfs-tools -y

这个命令会安装:

  • qemu-kvm:核心虚拟化引擎
  • libvirt:虚拟化管理API和工具
  • virt-install:用于创建新虚拟机的命令行工具
  • virt-viewer:虚拟机图形控制台
  • libguestfs-tools:虚拟机镜像管理工具

3.2 启动并启用libvirtd服务

安装完成后,启动并启用libvirtd服务:

sudo systemctl enable --now libvirtd

验证服务状态:

sudo systemctl status libvirtd

你应该看到"active (running)"的状态。如果遇到问题,可以尝试查看日志:

journalctl -u libvirtd -b

3.3 验证KVM安装

运行以下命令验证KVM是否正确安装:

virt-host-validate

理想情况下,所有检查都应显示"PASS"。如果有任何"FAIL"项,需要根据提示解决问题后才能继续。

4. 网络配置

4.1 默认网络设置

libvirt安装后会创建一个名为"default"的NAT网络,可以使用以下命令查看:

sudo virsh net-list --all

如果default网络未激活,使用以下命令启动并设置为自动启动:

sudo virsh net-start default sudo virsh net-autostart default

4.2 高级网络配置(可选)

对于生产环境,你可能需要更复杂的网络配置。以下是创建桥接网络的步骤:

  1. 安装桥接工具:
sudo dnf install bridge-utils -y
  1. 创建桥接接口配置文件(例如/etc/sysconfig/network-scripts/ifcfg-br0):
DEVICE=br0 TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes DELAY=0
  1. 将物理接口添加到桥接(修改对应的物理接口配置文件):
BRIDGE=br0
  1. 重启网络服务:
sudo systemctl restart NetworkManager
  1. 在libvirt中定义桥接网络:
sudo virsh net-define /dev/stdin <<EOF <network> <name>br0</name> <forward mode="bridge"/> <bridge name="br0"/> </network> EOF sudo virsh net-start br0 sudo virsh net-autostart br0

5. 存储配置

5.1 默认存储池

libvirt使用存储池管理虚拟机磁盘。检查默认存储池:

sudo virsh pool-list --all

如果default池未激活,使用以下命令:

sudo virsh pool-start default sudo virsh pool-autostart default

5.2 创建新的存储池

对于生产环境,建议使用专用存储。以下是创建目录类型存储池的示例:

sudo mkdir -p /var/lib/libvirt/vm-disks sudo virsh pool-define-as vm-disks dir - - - - "/var/lib/libvirt/vm-disks" sudo virsh pool-build vm-disks sudo virsh pool-start vm-disks sudo virsh pool-autostart vm-disks

6. 创建第一个虚拟机

6.1 使用virt-install创建VM

以下命令创建一个CentOS Stream 9虚拟机:

sudo virt-install \ --name centos9-vm \ --ram 2048 \ --vcpus 2 \ --disk size=10 \ --os-variant centos-stream9 \ --location http://mirror.centos.org/centos-stream/9-stream/BaseOS/x86_64/os/ \ --graphics spice \ --console pty,target_type=serial \ --network network=default

参数说明:

  • --name:虚拟机名称
  • --ram:内存大小(MB)
  • --vcpus:虚拟CPU数量
  • --disk size:磁盘大小(GB)
  • --os-variant:优化虚拟机配置的操作系统类型
  • --location:安装源位置
  • --graphics:图形显示协议
  • --network:连接的网络

6.2 使用virt-manager图形界面(可选)

如果你有图形环境,可以安装virt-manager:

sudo dnf install virt-manager -y

然后运行:

virt-manager

这将打开一个图形界面,可以直观地创建和管理虚拟机。

7. 管理虚拟机

7.1 常用virsh命令

  • 列出所有虚拟机:
sudo virsh list --all
  • 启动虚拟机:
sudo virsh start vm-name
  • 关闭虚拟机:
sudo virsh shutdown vm-name
  • 强制停止虚拟机:
sudo virsh destroy vm-name
  • 删除虚拟机:
sudo virsh undefine vm-name
  • 编辑虚拟机配置:
sudo virsh edit vm-name

7.2 虚拟机性能调优

对于生产环境中的虚拟机,可以考虑以下优化参数:

  1. CPU调优:
<cpu mode='host-passthrough' check='none'/>
  1. 内存大页支持:
sudo virsh edit vm-name

添加:

<memoryBacking> <hugepages/> </memoryBacking>
  1. 磁盘缓存策略:
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none' io='native'/> </disk>

8. 常见问题与解决方案

8.1 安装过程中SPICE连接失败

如果使用virt-install时SPICE连接失败,可以尝试以下替代方案:

  1. 使用VNC代替SPICE:
--graphics vnc
  1. 或者完全禁用图形,使用控制台安装:
--graphics none --console pty,target_type=serial

8.2 虚拟机启动缓慢

如果虚拟机启动异常缓慢,可能是由于默认的QEMU模拟设备导致的。可以尝试:

  1. 使用virtio设备:
--disk bus=virtio --network network=default,model=virtio
  1. 禁用不必要的设备:
--video qxl --channel spicevmc

8.3 权限问题

如果遇到权限拒绝错误,尝试:

  1. 将用户加入libvirt组:
sudo usermod -aG libvirt $(whoami)
  1. 重新登录使组变更生效

  2. 如果使用桥接网络,确保用户有权限访问桥接接口

8.4 其他故障排查

  • 查看虚拟机控制台日志:
sudo virsh console vm-name
  • 检查虚拟机XML配置:
sudo virsh dumpxml vm-name
  • 查看QEMU日志:
sudo cat /var/log/libvirt/qemu/vm-name.log

9. 高级功能与扩展

9.1 虚拟机快照管理

创建快照:

sudo virsh snapshot-create-as vm-name snapshot1 "First snapshot"

列出快照:

sudo virsh snapshot-list vm-name

恢复快照:

sudo virsh snapshot-revert vm-name snapshot1

删除快照:

sudo virsh snapshot-delete vm-name snapshot1

9.2 虚拟机迁移

将虚拟机迁移到另一台主机:

  1. 在两台主机之间设置共享存储
  2. 在目标主机上安装相同版本的KVM和libvirt
  3. 导出虚拟机配置:
sudo virsh dumpxml vm-name > vm-name.xml
  1. 将配置文件和磁盘镜像传输到目标主机
  2. 在目标主机上定义虚拟机:
sudo virsh define vm-name.xml

9.3 性能监控

使用virt-top监控虚拟机资源使用情况:

sudo dnf install virt-top -y sudo virt-top

10. 安全最佳实践

10.1 限制libvirt访问

编辑/etc/libvirt/libvirtd.conf:

unix_sock_group = "libvirt" unix_sock_rw_perms = "0770"

然后重启libvirtd服务:

sudo systemctl restart libvirtd

10.2 启用SELinux保护

确保SELinux处于enforcing模式:

sudo setenforce 1 sudo sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

10.3 定期更新

定期检查并应用更新:

sudo dnf update --refresh

特别关注虚拟化相关包的更新:

sudo dnf update qemu-kvm libvirt virt-*

在实际生产环境中部署KVM时,我发现合理规划存储和网络配置对后期维护至关重要。建议在初期就考虑好虚拟机的命名规范、存储布局和网络拓扑,这将大大简化后续的管理工作。对于性能敏感型应用,务必测试不同的CPU和内存配置,找到最适合工作负载的参数组合。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进