ARM环境KVM快速起步

ARM对虚拟化支持最初是从ARMv7-A处理器开始对额,包括Cortex-A15(ARM A系列第一款支持硬件虚拟化), Cortex-A7 和 Cortex-A17。而ARMv8-A 处理器也支持虚拟化。 ARM对KVM支持概述

我的ARM测试环境是 Raspberry Pi Atlas树莓派Raspberry Pi 4 ,根据硬件规格,采用的是 4核心Cortex-A72(ARM v8) 64位处理。

安装

Ubuntu for ARM

  • 安装libvirt:

    sudo apt install qemu-system-arm libvirt-daemon-system virtinst bridge-utils
    

备注

虽然不安装libvirt也能够直接通过 qemu 来直接运行虚拟机,但是 Libvirt虚拟机管理器 提供了通用且丰富的管理功能,方便我们维护qemu虚拟化。

对于 x86 平台,安装 qemu-kvm 代替 qemu-system-arm

备注

virtinst 软件包提供了 virt-install 命令行维护工具

bridge-utils 软件包提供了 brctl 维护bridge的工具

  • 安装完成后 libvirtd 已经自动启动,通过以下命令检查状态:

    sudo systemctl status libvirtd
    
  • 执行 sudo virsh list 可以检查是否可以正常访问 libvirt 服务

  • 将需要管理虚拟化的用户账号,例如当前账号 huatai 添加到 libvirt 组,这样就不需要 sudo 就可以管理:

    sudo adduser $USER libvirt
    

Fedora for ARM

备注

我暂时没有Fedora环境验证,本段落摘自 How to Enable KVM Virtualization on Raspberry Pi 4

  • 首先更新DNF软件包仓库缓存:

    sudo dnf makecache
    
  • 安装KVM以及所有相关工具,在Fedora上只需要以group方式安装 Virtualizaiont

    sudo dnf group install "Virtualization"
    
  • 将本登陆用户添加到 libvirt 组:

    sudo usermod -aG libvirt $(whoami)
    
  • 重启系统:

    sudo reboot
    

CentOS/RHEL for ARM

备注

暂未实践,本段落摘自 「Red Hat Enterprise Linux 7 Virtualization Deployment and Administration Guide > B.3 Using KVM Virtualization on ARM」

  • 使用以下命令安装ARM虚拟化软件堆栈(注意:需要激活 Optional 通道):

    yum install qemu-kvm-ma libvirt libvirt-client virt-install AAVMF
    

NAT网络

树莓派Raspberry Pi 4 上运行 Kali Linux 版本libvirt,有可能默认没有激活任何虚拟网络(即 default 网络,也就是NAT网络)。可以参考 libvirt NAT型网络 检查和激活:

  • 检查libvirt网络:

    virsh net-list
    

输出显示是空白:

 Name   State   Autostart   Persistent
----------------------------------------
  • 检查所有libvirt网络(包括没有激活的网络):

    virsh net-list --all
    

显示有一个 default 网络没有激活:

 Name      State      Autostart   Persistent
----------------------------------------------
 default   inactive   no          yes
  • 激活 default 网络并设为默认启动:

    virsh net-start default
    virsh net-autostart default
    
  • 然后检查验证:

    virsh net-list
    

显示状态:

 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes

安装虚拟机

Ubuntu提供了官方Ubuntu Server ARM版本,可以作为KVM虚拟机运行在 树莓派Raspberry Pi 4 上。从 Ubuntu downloads 下载 Ubuntu Server for ARM iso镜像 ,我这里下载的是 Ubuntu 20.04.2 LTS 版本。

下载的iso镜像移动到 /var/lib/libvirt/images/ 目录下

如果你运行的是Linux 桌面版本 for ARM,可以运行一个 Virtual Machine Manager (VMM) 图形化程序来安装运行虚拟机。不过,我比较喜欢命令行操作,所以和 创建KVM虚拟机 采用相同方法创建虚拟机:

virt-install \
  --network bridge:virbr0 \
  --name ubuntu20.04 \
  --ram=2048 \
  --vcpus=2 \
  --os-type=ubuntu20.04 \
  --disk path=/var/lib/libvirt/images/ubuntu20.04.qcow2,format=qcow2,bus=virtio,cache=none,size=16 \
  --graphics none \
  --cdrom=/var/lib/libvirt/images/ubuntu-20.04.2-live-server-arm64.iso

其他可以安装的ARM虚拟机发行版:

请下载ARM aarch64架构服务器版本,例如 Fedora Server netinstall iso 或者 Fedora Minimal (raw镜像)。此外,Fedora还发布了 Fedora CoreOS 版本(2020年5月26日起替代了原先基于Gentoo Linux开发的Container Linux),如果希望专注运行容器或Kubernetes容器编排集群,则建议采用 Fedora CoreOS for ARM

  • CentOS.org 提供的 CentOS Linux 或 CentOS Stream (滚动发布) 发行版,都提供了 aarch64 的ARM版本

备注

Ubuntu Server版本默认启用了snapd提供snap安装支持,如果不需要(例如我主要使用docker容器化),我建议 在Ubuntu 20.04中禁用Snaps

参考