The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

使用 Multipass 與 cloud-init 快速建立 MicroK8s 叢集所需的虛擬機器 (VMs)

週日玩了一下 cloud-init 工具,我發現文件看官方文件不是那麼好上手,但是官網首頁的影片卻一看就知道怎麼設定。簡單來說,cloud-init 專門用來幫你初始化 Linux 的出廠設定,不但支援大多數 Linux 散佈版本 (distributions),也支援大多數雲端平台業者,也可以讓你在地端的 Bare-Metal 主機進行初始化,可謂是業界標準的初始化 VM 方法。我發現 Multipass 也有支援 cloud-init 設定,所以這篇文章我來大致說明一下設定的過程與套用的方式。

建立 microk8s-vm 虛擬機

我是用 Multipass 來建立 MicroK8s 虛擬機,因此在建立好 VM 之後,還需要手動執行三行命令。除此之外,我還希望把我個人常用的 SSH 公鑰加入到 VM 中,讓我可以從我常用的 WSL 2 環境快速登入主機。再者,無論安裝哪個版本的 Linux,我都想在首次建立 VM 的同時,自動更新並升級所有套件。

我們先撰寫 microk8s-vm.init 腳本

apt_update: true
apt_upgrade: true
ssh_import_id:
- lp:doggy8088
- gh:doggy8088
runcmd:
- snap install microk8s --classic
- usermod -a -G microk8s ubuntu

上述腳本包含了三個部分:

  1. 自動更新並升級套件

    apt_update: true
    apt_upgrade: true
    
  2. LaunchPadGitHub 匯入 doggy8088 帳號的 SSH 公開金鑰

    ssh_import_id:
    - lp:doggy8088
    - gh:doggy8088
    
  3. 首次開機用 root 身份執行兩行命令

    runcmd:
    - snap install microk8s --classic
    - usermod -a -G microk8s ubuntu
    

接著我們就可以直接用以下命令啟動這台 VM:

multipass launch --name 'microk8s-vm' --bridged --disk 50G --cpus 2 --mem 2G --cloud-init=microk8s-vm.init

接著你可能會想要設定固定 IP 地址,請參見 利用 Multipass 在區域網路架設一套 MicroK8s 叢集環境 文章說明。

然後在 microk8s-vm 虛擬機中啟動 MicroK8s 服務:

multipass exec 'microk8s-vm' -- microk8s start

建立 MicroK8s 的 Worker Nodes 虛擬機

要加入 MicroK8s 的 Worker Nodes 虛擬機到叢集中的話,叫只需要先安裝好 microk8s 與設定好群組即可,因此可以沿用同一份 cloud-init 腳本。

multipass launch --name 'node1' --bridged --disk 50G --cpus 1 --mem 2G --cloud-init=microk8s-vm.init
multipass launch --name 'node2' --bridged --disk 50G --cpus 1 --mem 2G --cloud-init=microk8s-vm.init

node1node2 都建立完成後,基本上將會連同 microk8s 套件一起安裝完畢,接著就直接將節點加入叢集即可,相當便利! 👍

相關連結