再見了 VMware,一款更輕量級的虛擬機 Multipass!

作者:陌溪

陌溪的學習筆記:http://note.moguit.cn

大家好,我是陌溪

最近,打算在 Mac 電腦上安裝一個虛擬機,用來學習 K8S

首先想到的是 VmwareParallels Desktop,然後打開瀏覽器找了找,發現都只提供付費版本,只有 Parallels Desktop 提供了 14 天的免費試用。

然後,開始嘗試使用免費 VirtualBox,但是在安裝 CentOS 的時候,貌似因爲 MacOS 最新版本的原因,總是報錯,花費了好幾天的時間,試過各種方案,最終解決無果,就放棄了。。

就在陌溪要放棄的時候,突然在 Ubuntu 官網進行衝浪的時候,發現了一款叫 Multipass 的東西。

它可以快速在電腦上快速搭建一個輕量級的虛擬機,並且相比於 Vmware 更加輕量,只需一行命令快速創建 Ubuntu 虛擬機。

Multipass 是一個輕量虛擬機管理器,是由 Ubuntu 運營公司 Canonical 所推出的開源項目。運行環境支持 LinuxWindowsmacOS。在不同的操作系統上,使用的是不同的虛擬化技術。在 Linux 上使用的是 KVMWindow 上使用 Hyper-VmacOS 中使用 HyperKit 以最小開銷運行 VM,支持在筆記本模擬小型雲。

同時,Multipass 提供了一個命令行界面來啓動和管理 Linux 實例。下載一個全新的鏡像需要幾秒鐘的時間,並且在幾分鐘內就可以啓動並運行 VM。(直呼好傢伙,大大降低的我們安裝虛擬機的成本了)

Multipass 官網:https://multipass.run/

Multipass 官網

開始使用

在使用 Multipass 之前 ,首先需要安裝 Multipass 工具,可以打開官網進行下載

https://multipass.run/

選擇對應的操作系統,因爲我的是 Mac 電腦,所以選擇 MacOS,點擊 Download 開始下載

選擇對應版本安裝

如果電腦裝了 brew 可以直接命令行下載安裝:

brew cask install multipass

下載安裝成功後, 執行以下命令可以查看當前軟件版本:

multipass --version

安裝成功後,點擊運行,即可打開 Multipass 客戶端,這裏能夠快速的通過 Open Shell 創建和啓動一個虛擬機

Multipass 客戶端

下面,我們來介紹如何通過命令的方式,創建一臺虛擬機

創建 Ubuntu 虛擬機

首先,通過以下指令查看可供下載的 Ubuntu 鏡像

multipass find

運行成功後,可以看到下面的這些鏡像列表,包含各種版本的

Image                       Aliases           Version          Description
core                        core16            20200818         Ubuntu Core 16
core18                                        20200812         Ubuntu Core 18
18.04                       bionic            20211109         Ubuntu 18.04 LTS
20.04                       focal,lts         20211118         Ubuntu 20.04 LTS
21.04                       hirsute           20211119         Ubuntu 21.04
21.10                       impish            20211103         Ubuntu 21.10
appliance:adguard-home                        20200812         Ubuntu AdGuard Home Appliance
appliance:mosquitto                           20200812         Ubuntu Mosquitto Appliance
appliance:nextcloud                           20200812         Ubuntu Nextcloud Appliance
appliance:openhab                             20200812         Ubuntu openHAB Home Appliance
appliance:plexmediaserver                     20200812         Ubuntu Plex Media Server Appliance
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
minikube                                      latest           minikube is local Kubernetes

下載最新版的 Ubuntu 鏡像並運行,初次創建時需要下載 Ubuntu 鏡像,網絡暢通的情況下,稍等片刻即可。

multipass launch -n vm01 -c 1 -m 1G -d 10G

自定義配置創建可以參考如下方式:

-n, --name: 名稱
-c, --cpus: cpu核心數, 默認: 1
-m, --mem: 內存大小, 默認: 1G
-d, --disk: 硬盤大小, 默認: 5G

操作虛擬機

查看虛擬機列表

虛擬機創建完成後,可以使用 multipass list 命令進行查看虛擬機列表

% multipass list
Name                    State             IPv4             Image
vm01                    Running           192.168.64.2     Ubuntu 20.04 LTS

可以看到目前正在運行一臺 Ubuntu 20.04 版本的虛擬機,並且對應的 IP 地址爲 192.168.64.2

外部操作虛擬機

通過 multipass exec 命令在實例內執行給定的命令。第一個參數是運行命令的實例,也就是 vm01

我們通過 exec 命令,就可以在外部操作剛剛創建的虛擬機,例如查看內部所處的目錄,執行 pwd 命令

# multipass exec vm01 pwd
/home/ubuntu

查看虛擬機信息

通過 multipass info 命令,即可查看當前運行的虛擬機信息

# multipass info vm01
Name:           vm01
State:          Running
IPv4:           192.168.64.2
Release:        Ubuntu 20.04.3 LTS
Image hash:     91740d72ffff (Ubuntu 20.04 LTS)
Load:           0.00 0.00 0.00
Disk usage:     1.3G out of 9.5G
Memory usage:   170.9M out of 1.9G
Mounts:         --

進入虛擬機

通過 multipass shell 命令,即可進入到虛擬機內部

multipass shell vm01

運行後的結果如下所示,可以看到目前虛擬機的一些系統配置信息,以及內存和磁盤的使用情況

進入虛擬機內部

同時會運行一個新的 Ubuntu 系統,此時便進入到了 Ubuntu 環境中, 在裏面可以執行相關的 linux 指令

當然如果不想進入系統內部,也可以通過上述提到的 multipass exce 命令,來操作 Ubuntu 系統

首先執行下面命令,給系統設置一個 root 密碼,設置好密碼後,使用 su root 切換到 root 用戶

# 設置密碼
sudo passwd
# 切換 root
su root

ubuntu 是使用 apt-get 來進行包管理的,首先更新一下 apt-get,然後安裝 nginx

# 更新apt
apt-get update
# 安裝 nginx
apt-get install nginx

安裝好 nginx 後,可以到 /etc/nginx 目錄即可看到剛剛的 nginx 配置信息

root@vm01:/lost+found# cd /etc/nginx/
root@vm01:/etc/nginx# ls
conf.d        fastcgi_params  koi-win     modules-available  nginx.conf    scgi_params      sites-enabled  uwsgi_params
fastcgi.conf  koi-utf         mime.types  modules-enabled    proxy_params  sites-available  snippets       win-utf

下面我們可以測試一下,nginx 是否安裝成功,在 mac 上打開瀏覽器,輸入虛擬機的 ip 地址 192.168.64.2

nginx 安裝成功

可以看出,目前 nginx 已經成功運行了,後續的話,可能會考慮在上面部署更多的應用,感興趣的小夥伴歡迎關注~

掛載數據卷

multipass 還提供和 Docker 一樣的掛載數據卷的功能,能夠與外部宿主機的文件保持同步。

# 掛載格式
multipass mount 宿主機目錄  實例名:虛擬機目錄

下面,我在用戶的目錄下,創建一個 hello 目錄

# 創建hello目錄
mkdir hello
# 掛載
multipass mount /Users/moxi/hello  vm01:/hello

掛載完成後,我們回到實例 vm01 中,可以看出多了一個 hello 文件夾,說明已經成功掛載~

掛載成功

因此,以後在 vm01hello 文件夾 中創建的文件,都會在的宿主機的 hello 文件夾同步顯示

卸載數據卷

如果以後不需要用到掛載了,可以使用 unmount 命令卸載

#卸載數據卷
multipass umount 容器名

傳輸文件

除了使用上述的 mount 掛載卷的方式實現文件的交互,同時還可以通過 transfer 命令,將宿主機的文件,發送到虛擬機內部

multipass transfer 主機文件 容器名:容器目錄

例如,將 hello.txt 發送到

multipass transfer hello.txt vm01:/home/ubuntu/

刪除和釋放實例

使用下面的命令,可以開啓、停止、刪除和釋放實例

# 啓動實例
multipass start vm01
# 停止實例
multipass stop vm01
# 刪除實例(刪除後,還會存在)
multipass delete vm01
# 釋放實例(徹底刪除)
multipass purge vm01

容器配置自動化

爲了保持開發環境和線上環境一致性 同時節省部署時間 multipass 給我們提供了 --cloud-init 選項進行容器啓動初始化配置:

multipass launch --name ubuntu --cloud-init config.yaml

上面 config.yaml 則是容器的初始化配置文件,例如,我們想在初始化容器的時候,自動下載安裝 Node.js,內容如下:

#cloud-config
runcmd:
  - curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
  - sudo apt-get install -y nodejs

runcmd 可以指定容器 首次啓動 時運行的命令

凡是用戶自定義的 cloud-init 的配置文件, 必須以 #cloud-config 開頭,這是 cloud-init 識別它的方式。

yaml 配置文件可以參考下面的文章

https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=lock-passwd#including-users-and-groups

更多關於 multipass 的高階的技巧,歡迎訪問 multipass 官方文檔

https://multipass.run/docs/

好了,本期關於 Multipass 的基礎學習就到這裏了,感興趣的小夥伴環境下載自己動手學習呢~

我是陌溪,我們下期再見~

總結

陌溪使用了一陣子後,Multipass 在使用起來很簡潔直觀,在整體操作上和 docker 類似,如果想在自己電腦上快速搭建一個 Linux 系統用於學習的話,選擇使用 Multipass 還是非常方便的。

唯一不足的地方就是,Multipass 是由 Ubuntu 背後的 Canonical 公司開發的,因此 Multipass 所使用的鏡像也都是 Ubuntu 鏡像(這也可以理解,畢竟支持自家的產品),不過對於習慣了使用 CentOS 的用戶來說,還是用些許不太習慣。不過瑕不掩瑜,Multipass 在我看來還是一款非常棒的軟件~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/zMG4R1XrCbI-C71iYd9LMg