使用virt-manager图形化创建和管理KVM虚拟机

虚拟机是日常开发中比较常见的工具之一,无论是搭建本地集群,还是测试部分系统等,虚拟机都非常实用。在Windows上我们常用VMware虚拟机,但是在Linux上VMware兼容性仍然存在问题,且常常不支持较新的内核。此外,Virtual Box也是一个开源跨平台的虚拟机软件,使用更加简单,不过在性能上仍然存在瓶颈。

当然,在Linux上我们也常常听说KVM(Kernel-based Virtual Machine)虚拟化方案,这是几乎所有云厂商都在使用的虚拟化方案,绝大多数版本的Linux内核都已经集成了KVM模块支持,且作为内核态的虚拟化工具,KVM比起其它虚拟机有着更好的性能。

今天我们就主要讨论一下如何在Linux上安装KVM虚拟化所需的相关软件,以及如何创建管理KVM虚拟机。

1,安装相关软件

首先我们需确保:

  • 已开启Intel VT或AMD SVM虚拟化功能,可在主板BIOS中设置
  • 系统已加载KVM模块

可使用下列命令检查:

bash 复制代码
lsmod | grep kvm

如图:

只要出现了kvmkvm_amd这两者即可,对于Intel处理器则应当是kvmkvm_intel两个。

若未显示,可使用modprobe手动载入模块或配置开机自动加载这两个模块。如果无这两个模块,可自行编译内核,配置其中启用这两个模块。具体方法不再赘述,默认情况下KVM模块都会包含且自动加载。

然后,使用下列命令安装所需的软件:

bash 复制代码
# Debian/Ubuntu/Linux Mint

# 安装
sudo apt install --no-install-recommends --no-install-suggests qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients bridge-utils virt-manager ovmf
# 配置用户组(重启系统或重新连接服务器后才会生效)
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

我们安装的软件主要如下:

  • qemu-system-x86qemu-utils:主要是QEMU(Quick Emulator)软件及其实用工具,这是一个开源的通用机器模拟器和虚拟化器
  • libvirt-daemon-systemlibvirt-clientslibvirt虚拟机管理框架,提供了统一的虚拟机操作接口包括创建、启动、停止、配置虚拟机
  • bridge-utils:网络桥接工具集
  • virt-manager:一个libvirt的图形操作界面
  • ovmf:KVM虚拟机的UEFI固件支持

在这里我们就可以来详细了解一下KVM虚拟化方案的组成,可见我们平时常说的KVM虚拟机并非是像VMware那样一个完整的软件,而是有多个组件构成:

  • KVM:只是一个Linux内核模块 ,提供硬件辅助虚拟化能力,但是KVM不能单独工作,也不具备创建虚拟机等功能,它只处理CPU和内存的虚拟化
  • QEMU:一个开源的机器模拟器和虚拟机监视器(VMM),能够模拟完整的计算机硬件,并在KVM支持下实现硬件加速的虚拟化。既然KVM模块不能创建和运行单独的虚拟机,因此就需要使用QEMU这种客户端来进行,该客户端能够模拟完整的硬件(包括网络、磁盘、网卡等),且具备最基本的虚拟机管理功能,此外QEMU可以将虚拟机的虚拟化交给KVM完成,这样使用QEMU + KVM,就能够创建并运行一个最基本但完整的虚拟机了
  • libvirt:一个虚拟化管理工具集和API ,它作为一个守护进程 运行,提供了更加高级、统一的接口来管理虚拟机。上面提到了QEMU + KVM虽然可以创建一个完整的虚拟机,但是缺乏很多高级功能(例如虚拟机配置持久化、生命周期管理等),此外QEMU原生的接口比较复杂繁琐,因此就可以使用libvirt这样的高级工具,实现更加便捷的虚拟机管理功能,且支持更多高级功能,libvirt工具提供了简单的命令行用法可一键创建虚拟机,而上述安装的virt-manager就是一个图形化客户端,让我们使用可视化方式调用libvirt工具创建管理虚拟机

所以,大家平时常说的KVM虚拟化,绝大多数指的是KVM内核模块 + QEMU工具 + libvirt上层客户端所构成的完整虚拟化工具链。

2,libvirt的配置

创建虚拟机之前,可以认识一下libvirt的配置,该配置可理解为虚拟机工具的全局配置,包含了网络和存储位置等。

打开virt-manager,中文环境下显示的是"虚拟系统管理器"如下:

界面如下:

默认情况下,会自动连接我们本地的libvirt进程,上述在安装了libvirt-daemon-systemlibvirt-clients软件包后,libvirt守护进程就会自动启动且后续会开机自启动。

如果显示连接失败,则尝试手动检查和启动libvirt守护进程:

bash 复制代码
# 检查状态
sudo service libvirtd status

# 启动进程
sudo service libvirtd start

virt-manager连接上libvirt守护进程后,就可以操作和管理我们本地的虚拟机了!此外,该客户端还支持连接远程服务器上的libvirt进程(例如采用qemu+ssh连接),这里就不再赘述了,大家可自行查阅和尝试。

首先,右键我们的本地连接-详情可以查看和配置本地的libvirt守护进程配置:

界面如下:

主要是网络和存储两大方面配置。

(1) 网络配置

在网络一栏我们可以创建虚拟网卡,创建的虚拟网卡支持多种模式,平时我们使用NAT模式即可。虚拟网络默认就会包含一个名为default的NAT虚拟网卡,我们一般直接使用该网卡即可,无需再手动创建。大家在系统终端使用ip addr命令,也可以看到一个虚拟的网络就是这里的虚拟网卡。

若要创建网卡,则可点击这里的+按钮:

如下:

(2) 存储池配置

存储池通常是KVM虚拟机存放数据的地方,主要存放的是下列内容:

  • 系统的安装ISO镜像
  • 虚拟机的虚拟硬盘文件

默认的存储池对应的目录是/var/lib/libvirt/images如下:

我们也可以自定义一个目录作为存储池,点击+新建:

需要注意的是,目标路径需选择一个不位于任何一个用户目录中的一个路径,且需要确保该路径有读取权限,否则可能导致创建虚拟机时无法读取安装ISO文件。

3,创建虚拟机

现在,就可以创建虚拟机了。

(1) 复制ISO安装文件到存储池

我们使用默认的存储池位置/var/lib/libvirt/images即可,这里我们复制了个Debian 13安装镜像进去,然后在libvirt的配置中存储池刷新即可看到:

(2) 创建虚拟机

virt-manager主界面选择我们本地的libvirt连接后点击左上角按钮可新建虚拟机:

新建页面选择本地ISO文件:

选择我们存储池里的ISO文件:

然后记得在下面搜索选择你安装的操作系统名称,建议取消"自动从安装介质/源检测"的勾选:

然后指定虚拟机内存与处理器核心数:

创建虚拟硬盘:

最后一步勾选在安装前自定义配置选项:

此时,我们就可以修改虚拟机详细硬件配置,这里先配置启动模式为UEFI即可:

然后就进入了虚拟机界面,完成后续安装程序的步骤即可:

建议安装系统时勾选"安装SSH工具",因为KVM虚拟机不能像VMware那样拖拽文件,因此许多数据交互都是通过本机连接SSH虚拟机进行。

创建虚拟机后,我们也可以发现我们的存储池中多了个qcow2格式文件,这正是我们虚拟机的虚拟硬盘文件:

4,固定虚拟机IP地址

在使用KVM虚拟机时,数据交换基本使用SSH进行,但是默认情况下NAT虚拟网络使用DHCP动态IP,因此难以确保IP地址是不变的,这会对我们造成不便。此外,在搭建一些本地集群时,若IP地址变化,也会造成许多配置上的麻烦。

(1) 启用XML编辑功能

我们首先需要启用"XML编辑功能",在virt-manager主界面编辑-Preferences进入首选项:

在常规选项卡中,勾选启用XML编辑即可:

(2) 查看虚拟机MAC地址

自定义固定IP地址之前,我们需要知道虚拟机的MAC物理地址,该地址创建后就不会变化,也就是说这个MAC地址就可以代表我们这个虚拟机。

首先要将虚拟机关机,然后在主界面双击打开我们的虚拟机:

点击左上角配置按钮,切换至虚拟机配置页面:

选择网卡配置就可以看到虚拟机所使用的虚拟网卡是哪个,以及其MAC地址:

我们先将其复制下来备用。

(3) 编辑libvirt网络配置

回到主界面右键编辑我们的本地libvirt连接配置:

进入虚拟网络配置,选择虚拟机所使用的那个网卡(这里只有default这个网卡,我们虚拟机就是使用的该网卡),切换到XML配置,首先停止网络,然后加入一行配置设定我们虚拟机为一个固定IP,然后重启虚拟网络即可,如下图:

可见我们在dhcp块下加入了下列内容:

xml 复制代码
<host mac="52:54:00:06:c1:a4" ip="192.168.122.100"/>

该配置就表示:将MAC地址为52:54:00:06:c1:a4的虚拟机的IP地址配置为192.168.122.100,可见这个MAC地址就是上述虚拟机的MAC地址。

通过这个虚拟网络的XML配置,我们还可以得到下列信息:

  • 网络的网关IP地址:192.168.122.1,由ip标签中address属性定义
  • 网络的子网掩码:255.255.255.0,由ip标签中netmask属性定义
  • 网络中设备的IP地址范围:192.168.122.2 - 192.168.122.254,由dhcp块中range定义

大家也可以在这里修改这些关于虚拟网络的高级配置。

到此,我们就将我们的虚拟机IP固定为我们自定义的了!重启虚拟机就生效了,我们也无需修改虚拟机内部系统的网络配置,其系统内部网络配置保持自动DHCP即可,只不过后续自动分配到的IP都是我们设定的固定IP地址:

需要注意的是大家设定自定义IP时一定要在该虚拟网络的IP范围内!例如我这里的范围:

后续,我们就可以在本机使用ssh连接这个虚拟机:

bash 复制代码
ssh root@192.168.122.100

此外,还可以克隆该虚拟机,然后使用上述同样方法配置克隆的虚拟机的IP地址,实现搭建虚拟机集群。

相关推荐
期待着20133 小时前
StarRocks 集群安装部署文档
linux·服务器
凤凰战士芭比Q3 小时前
部署PHP8.4(KylinV10SP3、Ubuntu2204、Rocky9.3)
linux
haimin03714 小时前
ubuntu 20.04 安装xrdp远程桌面访问
linux·运维·ubuntu
liu****4 小时前
4.基础开发工具(一)
linux·开发语言·1024程序员节
乌托邦的逃亡者4 小时前
Linux系统中配置history命令显示时间、IP、账号和操作命令
linux·运维·安全
趙小贞5 小时前
字符设备驱动开发流程与实战:以 LED 驱动为例
linux·c语言·驱动开发
Wang's Blog6 小时前
Linux小课堂: Vim与Emacs之Linux文本编辑器的双雄格局及Vim安装启动详解
linux·vim·emacs
观山岳五楼6 小时前
unbuntu系统配置IPV6的三种模式
linux·服务器·ip·1024程序员节
运维行者_6 小时前
AWS云服务故障复盘——从故障中汲取的 IT 运维经验
大数据·linux·运维·服务器·人工智能·云计算·aws