使用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

如图:

只要出现了kvm和kvm_amd这两者即可,对于Intel处理器则应当是kvm和kvm_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-x86和qemu-utils:主要是QEMU(Quick Emulator)软件及其实用工具,这是一个开源的通用机器模拟器和虚拟化器
  • libvirt-daemon-system和libvirt-clients:libvirt虚拟机管理框架,提供了统一的虚拟机操作接口包括创建、启动、停止、配置虚拟机
  • 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-system和libvirt-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地址,实现搭建虚拟机集群。

相关推荐
女神下凡10 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼9 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng9 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
Linux-lucky21 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu