操作系统:Ubuntu Kylin 优麒麟 20.04 LTS
架构版本:ARM64(鲲鹏、飞腾)
因涉及到各个版本,所以在此着重提一下。
video负责虚拟机的视频输出(也用VGA标识)。
qemu、kvm、libvirt 这几个名词,免费混淆,简单介绍一下:
KVM(基于内核的虚拟机)是一款为类 Linux 系统提供的开源的全虚拟化解决方案,KVM 使用虚拟化扩展(如 Intel VT 或 AMD-V)提供虚拟化功能。无论何时我们在任何 Linux 机器上安装 KVM,都会通过加载诸如 kvm-intel.ko(基于 Intel 的机器)和 kvm-amd.ko(基于 amd 的机器)的内核模块,使其成为管理程序(hyervisor,一种监控和管理虚拟机运行的核心软件层)。
由于 libvirt 进行了一些封装操作,因此 qemu 支持的类型并不能代表 libvirt 支持的类型,只能有一定的参考意义。
首先介绍 qemu 支持的类型,再介绍 libvirt 支持的类型,最后介绍 openstack 可使用的类型(openstack 默认调用 libvirt)。
注意:由于新版 LibVirtD 存储池的需要,操作系统安装时请将分区格式化为 BTRFS。
使用下面的命令安装 kvm-ok 实用程序,该程序用于确定您的主机是否能够运行硬件加速的 KVM 虚拟机。
sudo apt install cpu-checker
运行 kvm-ok 命令确认输出结果,
sudo kvm-ok
输出结果:
运行下面的 apt 命令安装 KVM 及其依赖项:
sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools
重启计算机。
一般情况下,安装完成后 libvirtd 会自动启动。使用下面的命令确认服务的状态。
sudo systemctl status libvirtd
输出结果如下所示:
● libvirtd.service - Virtualization daemon
Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-30 09:32:27 CST; 5min ago
TriggeredBy: ● libvirtd.socket
……
使用 Ctrl + C 返回命令行。
如果 libvirtd 服务没有开启,则运行以下命令开启。
sudo systemctl enable libvirtd --now
只有通过桥接网络,KVM 虚拟机才能访问外部的 KVM 管理程序或主机。
在“设置”中选择“网络”、“网络设置”。
在弹出的对话框中点击左下角的“+”,在下拉框中选择“桥接”,点击“创建”。
在新的对话框中填写连接名称(Connection name)“br0”,在标签“桥接”中,界面名称(Interface name)填写“br0”。
点击“增加”,在设备(Device)下拉框中选择要桥接的物理网卡,比如“eno1”,保存。
返回后,切换到标签“IPv4设置”修改IP地址和掩码等。
保存所有设置后,重启计算机。
在菜单中点击“虚拟系统管理器”,或者通过执行下面的命令启动:
sudo virt-manager
创建一个新的虚拟机:
点击“下一步”然后选择 ISO 镜像文件,我使用的是 Ubuntu 镜像。
在接下来的几个窗口中,系统会提示要求您为 VM 分配内存,处理器数量和磁盘空间。
并指定虚拟机名字和桥接网络名:
点击“结束”。
默认情况下,ARM64平台的虚拟机并未添加显卡、键盘和鼠标。
因此如果想安装图形化的Linux先添加“图形”。
在“详情”界面,点击左下角的“添加硬件”,选择“图形”,类型:Spice服务器、监听类型:Address,地址:仅本地主机。点击“完成”。
添加键盘。再次点击“添加硬件”,选择“输入”,类型:通用 USB Keyboard。点击“完成”。
添加鼠标。再次点击“添加硬件”,选择“输入”,类型:通用 USB Mouse。点击“完成”。
接下来只需要参照AMD64平台的步骤安装系统就可以了。
AMD64 又被称为 x86_64 或 x64,QEMU 支持该指令集的模拟。可以安装 Windows 7、Windows 10、Windows Server 等操作系统。
安装 QEMU 对 AMD64 的支持软件包。
sudo apt install qemu-system-x86
新建虚拟机时,架构选择“i686”或“x86_64”。
后边的安装步骤不再赘述了。目前,安装 Windows 10 可能会遇到假死,需要对虚拟机手工优化,修改一些配置参数。默认情况下,推荐使用 Windows xp 和 Windows 7。
通过虚拟机的xml文件可以看到video配置项。
找到xml文件(第一种方式):
如果虚拟机处于启动的状态可通过此方式查看。
openstack server show <虚拟机id>
其中 OS-EXT-SRV-ATTR:instance_name 属性值就是虚拟机在kvm中的名称。
找到xml文件(第二种方式):
虚拟机未运行也可查看。
openstack server show <虚拟机id>
其中 OS-EXT-SRV-ATTR:instance_name 属性值就是虚拟机在kvm中的名称。
virsh dumpxml <kvm虚拟机名称>
截至2020年6月11日,ARM64平台支持的video类型如下。
qemu最新版已经支持qxl,std,virtio,none 。
std
qemu2.2之后默认使用的video类型。
无需虚拟机安装额外的驱动,可支持到 2560 x 1600 分辨率。
qxl
2D场景下,一般与spice搭配使用。
注意虚拟机使用此种类型时,虚拟机需要装额外的驱动程序,否则使用体验很糟糕。
默认配置可支持到 2560x1440 分辨率。通过提高内存使用量可以提供更高的分辨率。
virtio
适用于3D场景。
none
一般不用,等于没有视频设备。无法使用vnc等访问虚拟机。
vga, cirrus, vmvga, xen, vbox, qxl(since 0.8.6), virtio(since 1.3.0), gop(since 3.2.0), or none(since 4.6.0)
libvirt兼容多个虚拟机具体实现工具,因此在video设备上对某些类型进行了重命名。这里着重讨论使用qemu驱动。
vga
参考qemu中的 std。
qxl
参考qemu中的 qxl
virtio
参考qemu中的 virtio
none
参考qemu中的 none
vga, qxl
vga
参考qemu中的 std。
qxl
参考qemu中的 qxl。
虚拟机得video类型在镜像中定义。
命令参考:
openstack image set --property hw_video_model='vga'
还支持更多得选项,比如video内存配置。注意某些类型需要虚拟机安装驱动配合使用。详情参考最后得 openstack镜像配置参考
支持,通关xml中的head区分
本文到此为止, 除此之外,KVM 也是 Openstack 默认的管理程序。