
本文原載於 iT 邦幫忙 2021 鐵人賽系列〈突破困境:企業開源虛擬化管理平台〉第 12 天,原文連結。
在 Proxmox VE 管理介面可以方便的建立客體虛擬機、硬體配置,以及開啟主控台安裝系統與客體內的設定,不過有關帳號密碼、網路 IP 及 DNS 等設定就不能在管理介面上方便的配置,有沒有更容易可以讓我在 Proxmox VE 管理介面上一次搞定的方法?
當然是有,而且非常容易使用!
準備 Cloud-Init 客體支援
目前 Cloud-Init 支援大部份的 Linux 作業系統發行版本,較新的發行版本已有內建,可在安裝有 Ubuntu 的客體機內使用以下指令進行檢查:
dpkg -l | grep cloud-init

若沒有內建的亦可很容易的安裝起來,以 Ubuntu Linux 為例:
apt install cloud-init
目前 Cloud-Init 官網上列出有支援的作業系統與發行版本如下:
- Ubuntu
- Alpine Linux
- Arch Linux
- CentOS
- RockyLinux
- RHEL
- CloudLinux
- FreeBSD
- NetBSD
- OpenBSD
- Fedora
- Gentoo
- openSUSE
- Debian
- ...等等
補充:
Windows 作業系統也有公司開發 Cloud-Init 的相關套件,如有興趣可以至文末參考資料下載。
技巧:
也可以直接下載預先配置好的 Linux 發行版 Cloud Image,匯入 Proxmox VE 客體機後直接開機就可以套用 Cloud-Init 進行初始化,連安裝作業系統的工作都省去。由於牽涉到 Proxmox VE 的 CLI 命令列指令,將於日後篇幅提及。
新增 Cloud-Init 虛擬裝置
接下來要為客體機增加一個 Cloud-Init 磁碟機,請選取客體機後,切換至 硬體 頁籤,按下 增加 按鈕,選取 CloudInit 磁碟機。

進入 Cloud-Init 選項視窗後,只需在 儲存 下拉清單中指定 Cloud-Init 磁碟機要存放的儲存集區,再按下 建立 即可。

建立完成以後,硬體清單中即會增加一筆 CloudInit 磁碟機 (ide0) 項目。

除了磁碟機外,還需要增加一個序列埠裝置,以讓 Cloud-Init 可以正確連動。請按下 增加 按鈕,選取 序列埠 項目。

在彈出的序列埠選項視窗中,直接按下 增加 按鈕。

序列埠增加完成後,可以在硬體清單中確認。
最後,我們還要把原本的虛擬光碟機移除,才不會影響到客體機啟動時由 Cloud-Init 磁碟機的讀取設定作業。請選取 CD/DVD 裝置 (ide2),再按下 移除 按鈕,彈出的確認對話框按下 是 即可移除之。

使用 Cloud-Init 設定參數
前置作業完成後,可以準備設定 Cloud-Init 的各項參數。切換至 Cloud-Init 頁籤,點選 帳號 兩下準備進入設定。

彈出帳號對話視窗後,請填入要設定的帳號名稱。

接著再點選 密碼 欄位兩次,進入密碼設定視窗。

提醒:
只有直接使用 Cloud Image 映像檔的客體機可以初始化帳號與密碼。
當帳號與密碼設定完成後,再按下 DNS 網域名稱 兩下,進入設定對話視窗。若保留預設,則會以節點實體機的 DNS 網域名稱跟伺服器自動帶入。

若有預備好的客戶端 SSH 公開金鑰,也可以在此填入,以用做日後使用免密碼方式遠端連入這台客體機。

最後是網路設定,經由 Cloud-Init 功能即可讓我們在 Proxmox VE 介面上方便的為客體虛擬機指定好 IP,免去許多設定的手續。

當全數設定完成後,可以檢視一下 Cloud-Init 清單的內容,確認無誤後請按下 重新產生映像 讓它生效。

啟動客體機及失敗狀況處理
做完前置各項設定後,就可以啟動客體機來驗證設定是否正確生效。

Cloud-Init 失敗狀況處理
如果 Cloud-Init 設定套用仍然無效,請開啟客體機主控台進行以下操作:
# 清除已有的 Cloud-Init 設定
cloud-init clean
# 移除 Cloud-Init 其它設定檔案
rm -rf /etc/cloud
rm -rf /var/lib/cloud/instances
rm /etc/netplan/00-installer-config.yaml
# 重新啟動
reboot
若 Cloud-Init 相關設定正確無誤,應於重新啟動後生效。
參考資料
- Cloud-Init Support - Proxmox VE
https://pve.proxmox.com/wiki/Cloud-Init_Support - The standard for customising cloud instances
https://cloud-init.io/ - canonical/cloud-init: Official upstream for the cloud-init: cloud instance initialization
https://github.com/canonical/cloud-init - Cloudbase-Init - Cloudbase Solutions
https://cloudbase.it/cloudbase-init/

