.. _mobile_cloud_arm_kvm: ================== ARM移动云KVM虚拟化 ================== 采用 :ref:`archlinux_arm_kvm` 技术构建在 :ref:`apple_silicon_m1_pro` MacBook Pro ( :ref:`arm` 架构 ) 架构 ===== - 由于arch linux ARM没有直接提供可用的 qemu 安装包,所以 :ref:`build_qemu_ovmf` 来实现 :ref:`archlinux_arm_kvm` - 由于 :ref:`asahi_linux` 内核版本过新不被 :ref:`zfs` 直接支持,而 :ref:`btrfs` 对kvm的支持有很多限制,所以采用 :ref:`linux_lvm` 构建 :ref:`libvirt_lvm_pool` 挫折和探索 ============ 我没有想到在 :ref:`apple_silicon_m1_pro` MacBook Pro上通过 :ref:`asahi_linux` (底层是 :ref:`arch_linux` ARM) 部署 :ref:`kvm` 虚拟化会遇到这么多挫折: - 从一开始安装软件包就发现 :ref:`pacman` 仓库的 ``aarch64`` 架构的虚拟化系列软件包依赖是broken的,无法直接安装 - 既然没有二进制安装包,那么开源的软件,我们从源代码编译可不可行呢?可行,但是非常麻烦(带来的好处是对 :ref:`ovmf` UEFI 以及 :ref:`qemu` 有了更深的了解): - :ref:`build_qemu_ovmf` 想办法构建 :ref:`ovmf` 实现虚拟机的UEFI启动,但是好不容易编译成功并且配置好 :ref:`libvirt` 使用自制的nvram - 却发现居然还是无法出现安装界面,期间尝试了各种 ``virt-install`` 安装参数组合 - 采用 :ref:`virt-install_location_iso_image` 传递内核参数(想基于iso安装依然能够字符终端模式)依然无法解决instller启动 - 不得已又回转来想办法解决 :ref:`arch_linux` ARM 虚拟化软件的 :ref:`force_install_kvm_and_patch` ,峰回路转,终于能够启动安装 - 再遇拦路虎: 安装程序无法写入磁盘导致安装失败, :ref:`debug_arm_vm_disk_fail` 对比和尝试不同的虚拟磁盘参数组合: - ARM64架构下 ``io=native`` 导致无法写虚拟磁盘,调整为 ``io=threads`` 解决 安装虚拟化软件 ================ 安装 ``qemu-system-aarch64`` ---------------------------------- .. note:: 以下是我在 :ref:`asahi_linux` 上经过探索总结的部署KVM虚拟化的方法步骤,应该是最简便和准确的方法(去除了反复尝试的一些错误方法)。 虽然QEMU可以运行任意硬件架构操作系统,但是对于运行ARM64架构操作系统,只需要安装 ``qemu-system-aarch64`` 即可。需要注意,当前社区仓库没有解决依赖包安装,直接安装 ``qemu-system-aarch64`` 会提示依赖错误,所以解决方法如下: - 将 `edk2-armvirt `_ 依赖安装包下载到本地安装: .. literalinclude:: ../../../kvm/arm_kvm/archlinux_arm_kvm/archlinux_install_edk2_armvirt :language: bash :caption: 在arch linux上安装edk2-armvirt软件依赖包 - 强制安装 ``qemu-system-aarch64`` : .. literalinclude:: ../../../kvm/arm_kvm/archlinux_arm_kvm/archlinux_install_qemu_aarch64 :language: bash :caption: 强制安装qemu-system-aarch64忽略依赖(依赖需要手工修复) - 从 `libbpf release `_ 下载一个低版本 ``libbpf-0.6.1.tar.gz`` 进行编译安装: .. literalinclude:: ../../../kvm/arm_kvm/archlinux_arm_kvm/archlinux_compile_libbpf :language: bash :caption: 编译安装低版本libbpf-0.6.1 这样就能够正常运行 ``qemu-system-aarch64`` 安装libvirt -------------- - arch linux for arm软件仓库提供 :ref:`libvirt` 安装; .. literalinclude:: ../../../kvm/arm_kvm/archlinux_arm_kvm/archlinux_install_libvirt_packages :language: bash :caption: 在arch linux上安装libvirt以及支持网络连接的软件包 - 启动libvirt服务: .. literalinclude:: ../../../kvm/arm_kvm/archlinux_arm_kvm/archlinux_start_libvirtd :language: bash :caption: 在arch linux上启动libvirtd libvirt存储配置 ================== .. note:: 创建3个基于 :ref:`mobile_cloud_libvirt_lvm_pool` 的虚拟机,作为运行 :ref:`install_mobile_cloud_ceph` 的底层虚拟机。这3个底层虚拟机需要配置 :ref:`libvirt_lvm_pool` 磁盘分区规划: 分区9作为 :ref:`linux_lvm` 构建 :ref:`ceph` 的KVM虚拟机集群 .. csv-table:: 移动云计算的磁盘分区 :file: ../../../linux/storage/btrfs/btrfs_mobile_cloud/mobile_cloud_parted.csv :widths: 20,20,30,30 :header-rows: 1 - 磁盘采用 :ref:`btrfs_mobile_cloud` 划分磁盘分区: .. literalinclude:: ../../../linux/storage/btrfs/btrfs_mobile_cloud/parted_nvme_btrfs :language: bash :caption: parted分区: 50G data, 48G docker, 216G libvirt :emphasize-lines: 4,7 - 创建 :ref:`linux_lvm` 的PV和VG: .. literalinclude:: ../../../kvm/libvirt/storage/mobile_cloud_libvirt_lvm_pool/mobile_cloud_libvirt_lvm_create :language: bash :caption: 创建vg-libvirt卷 - 定义 ``images_lvm`` 存储池: 使用逻辑卷组 ``vg-libvirt`` 目标磁盘 ``/dev/nvme0n1p9`` ,并且启动激活: .. literalinclude:: ../../../kvm/libvirt/storage/mobile_cloud_libvirt_lvm_pool/virsh_pool_lvm :language: bash :caption: 定义使用LVM卷组的libvirt存储池 完成上述 :ref:`libvirt_lvm_pool` 配置后,就可以创建基础虚拟机,如下文 创建虚拟机 ============ - 使用Fedora官方下载iso镜像 启动安装: .. literalinclude:: ../../../kvm/arm_kvm/debug_arm_vm_disk_fail/virsh_create_ovmf_vm_iso_io_threads :language: bash :caption: virt-install通过--location参数使用iso镜像安装ARM版本Fedora,必须使用io=threads :emphasize-lines: 14,15 - 完成 :ref:`mobile_cloud_arm_vm` 就可以开始部署 :ref:`install_mobile_cloud_ceph`