Multipass:现代DevOps的极速脚本化Ubuntu虚拟机

31 阅读7分钟

Multipass是Canonical的多平台工具,用于快速部署轻量级Ubuntu虚拟机。专为开发者和自动化设计,利用原生虚拟化。相较VirtualBox,它更聚焦Ubuntu开发与云原生工作流。

译自:Multipass: Fast, Scriptable Ubuntu VMs for Modern DevOps

作者:Janakiram MSV

Canonical 的 Multipass 是一款多功能工具,用于在 macOS、Windows 和 Linux 等多个平台上启动和管理轻量级 Ubuntu 虚拟机 (VM)。

Multipass 专为开发人员和运维团队设计,简化了本地 VM 供应,通过命令行或脚本提供近乎即时的 Ubuntu 实例。它专注于易用性、自动化和最小化摩擦,使其成为快速开发、云原生测试和持续集成 (CI) 工作流程的有力候选者。

Multipass 架构概述

Multipass 构建于客户端-服务器架构之上。这种设计将面向用户的命令行界面 (CLI) 与处理 VM 实例生命周期的系统服务分离开来。Multipass 客户端与 Multipass 守护程序(一个负责 VM 编排和资源管理的特权后台服务)进行交互。这种分离不仅增强了安全性,还允许脚本编写和集成到自动化工作流程中,而无需直接的系统干预。

该守护程序利用主机操作系统提供的底层虚拟机管理程序。在 macOS 上,Multipass 使用 Apple 的 Hypervisor Framework,确保原生性能和安全隔离。在 Windows 上,如果可用,它会利用 Hyper-V;如果需要,则回退到 VirtualBox。Linux 主机通常依赖 KVM 进行硬件加速虚拟化。Multipass 自动检测可用的后端并选择最优的后端,但用户也可以使用配置选项覆盖默认选择。

Multipass 中的存储管理采用精简配置的镜像,并针对最小化磁盘占用进行优化。每个实例都获得一个默认的主目录和临时的根文件系统,并可以选择在 VM 内部挂载任意主机目录。网络被抽象化,为实例提供镜像云环境的连接,默认支持 DNS 解析和出站流量。高级用户可以为更复杂的场景配置自定义网桥或附加网卡。

Multipass 默认通过 Canonical 官方精简的 Ubuntu 版本 来处理镜像。这些最小镜像频繁更新,并针对大小和安全性进行优化。Multipass 维护一个本地镜像缓存,以减少后续启动的下载时间。用户还可以启动自定义镜像或 Snap 包,从而扩展架构以适应特殊用例,包括跨发行版开发或轻量级、类似容器的 VM 部署。

Multipass 入门

在所有主流操作系统上安装 Multipass 都非常简单。可以从项目网站和文档获取下载和说明。在 macOS 上,可以通过 Homebrew 或下载签名的 DMG 包来安装 Multipass。对于 Windows,MSI 安装程序支持无缝设置。在 Linux 上,Multipass 作为 Snap 包分发,确保自动更新和沙盒执行。

安装后,启动 Ubuntu VM 只需一个终端命令。运行 multipass launch 会在需要时下载最新的 Ubuntu 镜像并配置一个新实例。默认情况下,该实例有 1GB 内存、一个 CPU 核心和 5GB 磁盘空间,但这些资源在启动时可以轻松自定义。例如,指定 multipass launch --name dev --cpus 2 --memory 4G --disk 20G 会设置一个具有更多资源的开发 VM。

使用 multipass shell 可以访问实例的 shell,这会将用户带入一个功能齐全的 Ubuntu 环境。CLI 使管理生命周期操作变得简单,例如启动、停止、暂停或删除实例。用户可以使用 multipass list 列出所有正在运行和已停止的实例,使用 multipass info 检查详细配置,并使用 multipass transfer 传输文件。

Multipass 支持通过 multipass mount 命令将主机目录挂载到实例中,从而简化了需要在主机和客户机之间共享源代码、构建工件或数据文件的工作流程。文件更改立即可用,没有网络开销,使其成为需要实时同步的本地开发的理想选择。网络是透明的,允许 SSH、HTTP 服务器和其他网络服务像原生运行一样工作。

脚本化 Multipass 是另一个优势。它集成到 CI 管道、自定义开发工具链或系统自动化脚本中。在启动时可以提供基于 YAML 的 cloud-init,用于无人值守的配置、软件包安装和配置。Multipass 实例的设计是短暂的,允许它们在几秒钟内启动、使用和销毁。

Multipass 本身或其使用的 Ubuntu 镜像的更新在支持 Snap 的 Linux 设置上是自动处理的;macOS 和 Windows 用户会收到更新通知。实例镜像在请求时或首次启动时更新。

由于其相似的实例管理语义,Multipass 还可以与公共云互操作。使用 Multipass 在本地构建的开发和测试工作负载可以轻松迁移或改编到基于云的 Ubuntu 服务器上运行,而无需进行重大更改,从而支持混合云和多云工作流程。

Multipass 与 VirtualBox 的比较

对于希望进行本地 VM 管理的用户来说,一个关键的决定是选择 Multipass 还是 VirtualBox。两者都提供 VM 功能,但在理念、功能集和用例优化方面有所不同。

Multipass 主要针对精简的 Ubuntu VM 供应和短暂环境进行优化。它旨在实现最小化摩擦、快速实例启动和类似云的工作流程。凭借其现代 CLI 和对原生操作系统集成的支持,自动化和脚本编写是其首要功能。Multipass 不提供广泛的图形界面,也不支持在其 Ubuntu 基础镜像之外运行任意客户机操作系统,尽管可以进行一些定制。

VirtualBox 提供更传统的虚拟化方法。它支持托管各种操作系统,包括 Windows、Linux 变体、BSD、macOS 等。VirtualBox 提供强大的图形控件,包括用于管理 VM 设置、快照、网络设备和存储的 GUI。它在需要细粒度配置和跨操作系统测试的场景中表现出色。

VirtualBox 的架构是单片的,将整个堆栈集成到其自身的服务和应用层中。VirtualBox 的 VM 性能通常非常出色,尽管有时略低于 Multipass 使用的 Hyper-V 或 macOS Hypervisor Framework 等原生虚拟机管理程序集成。VirtualBox 的高级功能包括桥接或仅主机网络、USB 硬件直通和详细的 VM 设备仿真。

Multipass 在开发人员生产力和自动化方面表现突出。其轻量级镜像、快速供应和 cloud-init 兼容性使其成为 CI/CD 系统、短暂测试平台、微服务原型设计和云原生工作流程的理想选择。这种精简的方法以牺牲灵活性为代价:Multipass 不是一个通用 VM 虚拟机管理程序,而是一个专注于 Ubuntu 优先开发体验的专用工具。

相比之下,VirtualBox 更适合需要图形化 VM 交互、非 Ubuntu 客户机操作系统、持久环境或传统网络和硬件集成的场景。对于需要手动管理和与 VM 内部桌面进行交互的最终用户来说,它也是一个自然的选择,例如用于传统应用程序兼容性、操作系统评估或课堂教学。

结论

Multipass 为 VM 编排提供了“开发者优先”的方法,针对现代桌面上的 Ubuntu 和云原生场景进行了优化。其架构利用操作系统原生虚拟机管理程序来提供高性能、安全性和低开销,同时暴露出一个强大而简单的 CLI,用于即时 VM 管理、脚本编写和自动化。尽管 Multipass 无法取代 VirtualBox 等功能齐全的通用 VM 解决方案,但在专注于 Ubuntu 开发、自动化和短暂工作负载的场景中,它表现出色。Multipass 和 VirtualBox 之间的选择取决于您的工作流程是优先考虑精简的、代码驱动的 Ubuntu VM 管理,还是图形化、多操作系统通用性。