9

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

 2 years ago
source link: https://blog.miniasp.com/post/2022/01/17/Multipass-with-cloud-init-for-MicroK8s-VMs
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

週日玩了一下 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 套件一起安裝完畢,接著就直接將節點加入叢集即可,相當便利! 👍


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK