前言

在虚拟化领域,有很多产品可供选择,免费的和商业付费的都有,但是绝大多数都只是专攻某个领域,对于开发者来说如果要在不同系统上部署虚拟机是一件很麻烦的事情。尤其是又有了 Apple Silicon 这样的硬件,导致 VMware Workstation 和 Virtualbox 无法在该类硬件上运行。

而 Multipass 则类似 Vagrant 项目,对底层的虚拟化技术进行了抽象,实现了跨平台的原生虚拟化兼容。

  • Hyper-V on Windows
  • QEMU and HyperKit on macOS
  • LXD on Linux
  • Virtualbox on x86 Arch

可以看到除了支持其他系统平台的虚拟化技术以外,同样支持使用 Virtualbox 作为底层虚拟化的实现,但是因为 Virtualbox 只能运行于 x86 架构的 CPU,所以如果是 Apple Silicon 则无法使用。

安装

我使用的是 M1 的 MacBook,其他平台的安装方式可以参考官方文档

macOS 上的安装方式有两种,一种是下载最新版本的安装包,另一种则是通过 Hombrew 的方式安装:

brew install --cask multipass

默认网段

这里的配置是可选项,因为我要用 Multipass 搭建 Kubernetes 的集群环境,而 macOS 的虚拟机默认网段为 192.168.64.0/24 与 Kubernetes Pod 的 192.168.0.0/16 网段冲突,所以这里需要手动更改一下 macOS 的默认网段。

编辑 /Library/Preferences/SystemConfiguration/com.apple.vmnet.plist 文件中的 Shared_Net_Address 键对应的值,这个值是 Gateway 的地址。我这里将其改为 10.0.8.1,然后 Shared_Net_Mask 的值保持不变,依然是掩 24 位,如果需要更大的网段可以自行使用在线的 IP 范围计算工具生成并替换掉这里的子网掩码。

命令

查看可用的系统镜像

multipass find
Image                       Aliases           Version          Description
18.04                       bionic            20220921         Ubuntu 18.04 LTS
20.04                       focal             20220920         Ubuntu 20.04 LTS
22.04                       jammy,lts         20220923         Ubuntu 22.04 LTS
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        latest           A Docker environment with Portainer and related tools
jellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube                                      latest           minikube is local Kubernetes

创建一个虚拟机

multipass launch lts --name s01 --disk 40G --cpus 2 --mem 4G

参数:

  • name: 设置 VM 的名称
  • disk: 设置 VM 的磁盘大小
  • cpus: 设置 CPU 核心数量
  • mem: 设置内存大小

如果需要多个网络接口,可以参考官方文档

登录VM

multipass shell s01

停止删除和清理

multipass stop s01
multipass delete s01
multipass purge

multipass delete 命令并不是物理删除虚拟机,你会发现删除后,虚拟机依然会在 list 里面,如果想彻底删除,需要执行 multipass purge 命令来清理!

创建 Docker VM

Multipass 的真正魅力也在于此,镜像启动起来就是一个 Docker 的运行环境,无需自己手动进行安装。

multipass launch docker

总结

Multipass 的简洁高效,让开发者节省了大量的时间和精力,让开发者聚焦上层的服务,而不是虚拟机的配置和操作系统的安装。但是也存在一定的问题,比如目前尚不支持快照功能。

I hope this is helpful, Happy hacking…