Multipass:輕量級虛擬機管理工具完整指南

🌏 Read the English version


Multipass:輕量級虛擬機管理工具完整指南

在現代軟件開發和系統管理的世界裡,虛擬化技術扮演著不可或缺的角色。從傳統的虛擬機(VM)到現代的容器化技術如 Docker,每種技術都有其獨特的優勢和適用場景。本文將深入探討 Canonical Ltd. 開發的輕量級虛擬機管理工具 — Multipass,包括其運作原理、實際操作、與其他虛擬化技術的比較,以及最佳實踐。

什麼是 Multipass?

Multipass 是由 Ubuntu 母公司 Canonical 開發的開源工具,專門用於在本機快速創建、管理和部署 Ubuntu 虛擬機。它的設計理念是「一個命令,一個虛擬機」,讓開發者能在幾秒鐘內啟動一個全新的 Ubuntu 環境。

Multipass 的核心特性

  • 快速部署:使用雲端映像檔(cloud images),幾秒鐘內啟動虛擬機
  • 跨平台支援:Windows、macOS、Linux 統一命令介面
  • 原生虛擬化:利用系統內建虛擬化技術(Hyper-V、HyperKit、KVM)
  • 雲端整合:支援 cloud-init 配置,模擬雲端環境
  • 資源管理:可自訂 CPU、記憶體、磁碟空間
  • 簡單易用:直觀的命令列介面,學習曲線平緩

Multipass 的運作原理

Multipass 利用底層的原生虛擬化技術來運行完整的 Linux 操作系統環境:

  • Linux:使用 KVM (Kernel-based Virtual Machine)
  • Windows:使用 Hyper-V
  • macOS:使用 HyperKit(基於 Hypervisor.framework)

Multipass 自動化虛擬機的創建、配置和管理過程,並提供簡單的命令行界面來執行創建、啟動、停止和刪除虛擬機等操作。

架構圖

┌─────────────────────────────────────┐
│    Multipass CLI (命令列介面)       │
├─────────────────────────────────────┤
│    Multipass Daemon (背景服務)      │
├─────────────────────────────────────┤
│  Hypervisor (KVM/Hyper-V/HyperKit)  │
├─────────────────────────────────────┤
│      Ubuntu Virtual Machines        │
└─────────────────────────────────────┘

安裝 Multipass

Windows 安裝

# 使用 Chocolatey
choco install multipass

# 或下載安裝程式
# https://multipass.run/download/windows

注意:需啟用 Hyper-V 功能(Windows 10 Pro/Enterprise/Education)

macOS 安裝

# 使用 Homebrew
brew install --cask multipass

# 或下載 .pkg 安裝程式
# https://multipass.run/download/macos

Linux 安裝

# Ubuntu/Debian
sudo snap install multipass

# 驗證安裝
multipass version

基本操作指南

1. 創建虛擬機

# 創建預設虛擬機(1 CPU, 1GB RAM, 5GB disk)
multipass launch --name my-vm

# 創建自訂規格虛擬機
multipass launch --name dev-vm 
  --cpus 2 
  --memory 4G 
  --disk 20G

# 指定 Ubuntu 版本
multipass launch 22.04 --name ubuntu22
multipass launch 20.04 --name ubuntu20

2. 管理虛擬機

# 列出所有虛擬機
multipass list

# 啟動虛擬機
multipass start my-vm

# 停止虛擬機
multipass stop my-vm

# 重啟虛擬機
multipass restart my-vm

# 刪除虛擬機
multipass delete my-vm
multipass purge  # 永久刪除

3. 進入虛擬機

# 透過 shell 進入
multipass shell my-vm

# 執行單一命令
multipass exec my-vm -- ls -la

# 執行多行命令
multipass exec my-vm -- bash << 'EOF'
sudo apt update
sudo apt install -y nginx
sudo systemctl status nginx
EOF

4. 檔案傳輸

# 從本機複製到虛擬機
multipass transfer ./local-file.txt my-vm:/home/ubuntu/

# 從虛擬機複製到本機
multipass transfer my-vm:/home/ubuntu/remote-file.txt ./

# 掛載本機目錄到虛擬機
multipass mount ~/projects my-vm:/home/ubuntu/projects

# 卸載
multipass umount my-vm:/home/ubuntu/projects

5. 查看資訊

# 查看虛擬機詳細資訊
multipass info my-vm

# 查看所有虛擬機狀態
multipass list

# 查看可用映像
multipass find

Multipass vs 傳統虛擬機 vs Docker 深度比較

特性 Multipass 傳統虛擬機 (VirtualBox/VMware) Docker
虛擬化技術 原生虛擬化 (KVM, Hyper-V, HyperKit) 硬體虛擬化,模擬整個硬體系統 容器技術,共享宿主機 OS kernel
啟動速度 快(5-10 秒) 慢(30-60 秒) 非常快(1-2 秒)
資源隔離 高(硬體級別隔離) 高(硬體級別隔離) 中(進程級別隔離)
資源消耗 中(運行完整 OS,但優化過) 高(運行完整 OS + 模擬硬體) 低(共享宿主機資源)
安全性 高(完整 kernel 隔離) 高(完整 kernel 隔離) 中(shared kernel 潛在風險)
使用便捷性 非常高(一行命令啟動) 中(需手動配置) 高(Dockerfile 自動化)
支援 OS Ubuntu only 任何 OS Linux-based images
網路配置 自動配置 NAT 需手動配置 內建 bridge/host 網路
儲存持久化 內建(虛擬磁碟) 內建(虛擬磁碟) 需 volumes 掛載
適用場景 快速 Ubuntu 測試環境、CI/CD、本地開發 需要完整 OS 環境、跨平台測試 微服務部署、應用容器化

實際應用場景

場景 1:快速測試環境

# 建立測試環境
multipass launch --name test-env

# 安裝測試工具
multipass exec test-env -- bash << 'EOF'
sudo apt update
sudo apt install -y python3-pip nodejs npm
pip3 install pytest
EOF

# 執行測試
multipass exec test-env -- pytest /path/to/tests

# 測試完畢後刪除
multipass delete test-env
multipass purge

場景 2:多版本 Ubuntu 測試

# 同時運行多個 Ubuntu 版本
multipass launch 20.04 --name u20
multipass launch 22.04 --name u22
multipass launch 24.04 --name u24

# 在所有版本上執行相同腳本
for vm in u20 u22 u24; do
  multipass exec $vm -- bash -c "lsb_release -a"
done

場景 3:本地 Kubernetes 開發

# 建立 K8s 節點
multipass launch --name k8s-master --cpus 2 --memory 4G
multipass launch --name k8s-worker1 --cpus 2 --memory 4G
multipass launch --name k8s-worker2 --cpus 2 --memory 4G

# 安裝 kubeadm
multipass exec k8s-master -- bash << 'EOF'
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt update
sudo apt install -y kubeadm kubectl kubelet
EOF

進階技巧

使用 cloud-init 自動配置

# cloud-config.yaml
#cloud-config
users:
  - name: developer
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-rsa AAAAB3N...

packages:
  - git
  - docker.io
  - nodejs

runcmd:
  - systemctl enable docker
  - systemctl start docker
  - usermod -aG docker developer
# 使用 cloud-init 啟動
multipass launch --name dev-vm --cloud-init cloud-config.yaml

快照與備份

# 建立快照(需停止 VM)
multipass stop my-vm
multipass snapshot my-vm --name snapshot1

# 列出快照
multipass snapshot list my-vm

# 還原快照
multipass restore my-vm --snapshot snapshot1

# 刪除快照
multipass snapshot delete my-vm --snapshot snapshot1

最佳實踐

1. 資源管理

  • 根據實際需求配置 CPU 和記憶體(避免過度分配)
  • 定期清理不用的虛擬機(multipass delete + purge
  • 使用 multipass stop 而非 delete 保留環境

2. 網路配置

  • 使用 multipass info 查看 VM IP 地址
  • 預設 NAT 網路已足夠大多數開發需求
  • 需要固定 IP 可使用 cloud-init 配置

3. 安全考量

  • 定期更新虛擬機內的軟體(sudo apt update && upgrade
  • 不要在虛擬機中存放敏感資料
  • 使用 SSH key 而非密碼登入

4. 開發工作流

  • 使用 multipass mount 掛載專案目錄(避免重複傳輸)
  • 建立標準化 cloud-init 檔案給不同專案
  • 整合到 CI/CD pipeline 進行自動化測試

常見問題解決

問題 1:無法啟動虛擬機

# 檢查 Multipass 服務狀態
multipass version

# 重啟 Multipass daemon (Linux)
sudo snap restart multipass

# Windows: 重啟 Multipass 服務
Get-Service Multipass | Restart-Service

# macOS: 重新啟動 Multipass
sudo launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist
sudo launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist

問題 2:網路連線問題

# 檢查虛擬機 IP
multipass info my-vm

# 測試連線
ping 

# 檢查虛擬機內部網路
multipass exec my-vm -- ip addr
multipass exec my-vm -- ping 8.8.8.8

問題 3:磁碟空間不足

# 檢查磁碟使用
multipass exec my-vm -- df -h

# 清理 apt 快取
multipass exec my-vm -- sudo apt clean

# 刪除不用的套件
multipass exec my-vm -- sudo apt autoremove

結論

Multipass 作為一款輕量級的虛擬機管理工具,以其快速部署和管理 Ubuntu 虛擬機的能力脫穎而出。它在使用便捷性和資源消耗之間取得了平衡,非常適合需要完整操作系統環境的開發和測試場景。

何時選擇 Multipass:

  • ✅ 需要快速建立 Ubuntu 測試環境
  • ✅ 本地開發需要完整的 Linux 環境
  • ✅ CI/CD pipeline 需要乾淨的測試環境
  • ✅ 多版本 Ubuntu 相容性測試
  • ✅ 學習 Linux 系統管理

何時選擇傳統虛擬機:

  • ✅ 需要運行非 Ubuntu 系統
  • ✅ 需要圖形介面 (GUI)
  • ✅ 複雜的網路配置需求

何時選擇 Docker:

  • ✅ 微服務架構應用
  • ✅ 應用容器化部署
  • ✅ 極致的資源效率需求

選擇哪種虛擬化技術,應基於具體的使用案例、資源限制和安全需求來決定。Multipass 提供了介於傳統虛擬機和容器之間的完美平衡點,是現代開發者工具箱中不可或缺的一員。

相關文章

Leave a Comment