週日玩了一下 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
上述腳本包含了三個部分:
-
自動更新並升級套件
apt_update: true
apt_upgrade: true
-
從 LaunchPad 與 GitHub 匯入 doggy8088
帳號的 SSH 公開金鑰
ssh_import_id:
- lp:doggy8088
- gh:doggy8088
-
首次開機用 root
身份執行兩行命令
runcmd:
- snap install microk8s --classic
- usermod -a -G microk8s ubuntu
接著我們就可以直接用以下命令啟動這台 VM:
multipass launch --name 'microk8s-vm' --bridged --disk 50G --cpus 2 --memory 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 --memory 2G --cloud-init=microk8s-vm.init
multipass launch --name 'node2' --bridged --disk 50G --cpus 1 --memory 2G --cloud-init=microk8s-vm.init
當 node1
與 node2
都建立完成後,基本上將會連同 microk8s
套件一起安裝完畢,接著就直接將節點加入叢集即可,相當便利! 👍
相關連結