共用方式為


Azure 中虛擬機器的 cloud-init 支援

適用於:✔️ Linux VM ✔️ 彈性擴展集

本文說明 cloud-init 在 Azure 中佈建時設定虛擬機器 (VM) 或虛擬機器擴展集的支援。 一旦 Azure 佈建資源,這些 cloud-init 設定就會在第一次開機時執行。

VM 佈建是 Azure 傳遞 VM 建立參數值 (例如主機名稱、使用者名稱和密碼) 的程式,並在 VM 開機時提供這些參數值。 「佈建代理程式」會取用這些值、設定虛擬機器,並在完成後回報。

Azure 支援兩個布建代理程式 cloud-initAzure Linux 代理程式 (WALA)。

cloud-init 概觀

cloud-init 是一種廣泛使用的方法,可在 Linux VM 首次開機時自訂它。 您可以使用 cloud-init 來安裝封裝和寫入檔案,或者設定使用者和安全性。 因為在初次開機程序期間時會呼叫 Cloud-init,因此不需要使用任何額外的步驟或必要的代理程式,就可以套用您的設定。 如需如何正確格式化 #cloud-config 檔案或其他輸入的詳細資訊,請參閱 cloud-init 文件網站#cloud-config 檔案是以 base64 編碼的文字檔案。

cloud-init 也可以跨發行版運作。 例如,您不使用 apt-get installyum install 來安裝套件。 相反地,您可以定義要安裝的套件清單。 cloud-init 會自動針對您選取的發行版使用原生套件管理工具。

我們正積極與認可的 Linux 發行版合作夥伴合作,以便在 Azure Marketplace 中提供已啟用雲端初始化的映像。 這些映像可讓您的 cloud-init 部署和設定與 VM 和虛擬機器擴展集順暢地運作。 一開始,我們會與背書的 Linux 發行版合作夥伴和上游合作,以確保 Azure 上的 OS 的 cloud-init 功能,然後更新套件並在發行版套件存放庫中公開提供。

有兩個階段可讓 cloud-init 可供 Azure 上支援的 Linux 發行版本使用、套件支援,然後是映像支援:

  • 'cloud-init package support on Azure' 檔,支援或預覽 cloud-init 套件,因此您可以在自訂映像中搭配 OS 使用這些套件。
  • 'image cloud-init ready' 檔,如果映像已設定為使用 cloud-init。

Canonical

發行商/版本 Offer SKU 版本 映像 cloud-init 就緒 Azure 上的 cloud-init 套件支援
規範 24.04 Ubuntu服務器 24.04-LTS 最新 yes yes
規範 22.04 Ubuntu服務器 22.04-LTS 最新 yes yes
規範 20.04 Ubuntu服務器 20.04-LTS 最新 yes yes

RHEL

發行商/版本 Offer SKU 版本 映像 cloud-init 就緒 Azure 上的 cloud-init 套件支援
紅帽 7 RHEL 7.7, 7.8, 7_9 最新 yes yes
紅帽 8 RHEL 8.1, 8.2, 8_3, 8_4 最新 yes yes
紅帽 9 RHEL 9_0, 9_1 最新 yes yes
  • 從 RHEL 7 (7.7 版) 和 RHEL 8 (8.1 版) 開始的所有其他 RedHat SKU (包括 Gen1 和 Gen2 映像) 都是使用 cloud-init 佈建。 RHEL 6 不支援 Cloud-init。

Oracle

發行商/版本 Offer SKU 版本 映像 cloud-init 就緒 Azure 上的 cloud-init 套件支援
甲骨文7 Oracle Linux 77、78、ol79 最新 yes yes
甲骨文8 Oracle Linux 81、OL82、OL83-LVM、OL84-LVM 最新 yes yes
  • 從 Oracle 7 (7.7 版) 和 Oracle 8 (8.1 版) 開始的所有其他 Oracle SKU (包括 Gen1 和 Gen2 映像檔) 都是使用 cloud-init 佈建。

SUSE SLES

發行商/版本 Offer SKU 版本 映像 cloud-init 就緒 Azure 上的 cloud-init 套件支援
蘇斯15 SLES (SUSE Linux 企業伺服器) 所有 SP 最新 yes yes
蘇斯12 SLES (SUSE Linux 企業伺服器) sp5 最新 yes yes
  • SUSE Linux Enterprise Server 12 自 2024 年 10 月 31 日起停產,SP5 是最新的 SP

Debian

發行商/版本 Offer SKU 版本 映像 cloud-init 就緒 Azure 上的 cloud-init 套件支援
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.1015 yes yes
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.991 yes yes
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.999 yes yes

目前,Azure Stack 支援布建已啟用 cloud-init 的映像。

cloud-init 和 Linux 代理程式 (WALA) 有什麼區別?

WALA 是 Azure 平臺特定的代理程式,用來佈建和設定 VM,以及處理 Azure 延伸模組

我們正在增強將 VM 設定為使用 cloud-init 而不是 Linux 代理程式的工作,以允許現有的 cloud-init 客戶使用其目前的 cloud-init 腳本,或新客戶利用豐富的 cloud-init 設定功能。 如果您已投資用於設定 Linux 系統的 cloud-init 指令碼,則 不需要其他設定 即可啟用 cloud-init 處理它們。

cloud-init 無法處理 Azure 延伸模組,因此映像中仍需要 WALA 來處理延伸模組,但必須停用其布建程式碼。 對於由 cloud-init 轉換成佈建的認可 Linux 發行版映像,它們已安裝 WALA 並正確設定。

建立 VM 時,如果您在佈建時未包含 Azure CLI --custom-data 參數,cloud-init 或 WALA 會採用佈建 VM 所需的最小 VM 佈建參數,並使用預設值完成部署。 如果您使用交換器參考 --custom-data cloud-init 組態,則自訂資料中包含的任何內容都會在 VM 開機時可供 cloud-init 使用。

套用至 VM 的 cloud-init 設定沒有時間限制,而且不會因逾時而導致部署失敗。對於 WALA,情況並非如此,如果您將 WALA 預設值變更為處理自訂資料,則不能超過 40 分鐘的 VM 佈建時間總額,如果是這樣,VM 建立將會失敗。

沒有 UDF 驅動程式的 cloud-init VM 佈建

從 cloud-init 21.2 開始,您可以使用 cloud-init 在 Azure 中佈建 VM,而不需要 UDF 驅動程式。 如果映像中沒有可用的 UDF 驅動程式,cloud-init 會使用 Azure 執行個體中繼資料服務中可用的中繼資料來佈建 VM。 此選項僅適用於 SSH 金鑰和 使用者資料。 若要在佈建期間將密碼或自訂資料傳遞至 VM,您必須使用 UDF 驅動程式。

部署已啟用 cloud-init 的虛擬機器

部署已啟用 cloud-init 的虛擬機器就像在部署期間參考已啟用 cloud-init 的發行版一樣簡單。 Linux 發行版維護者必須選擇啟用 cloud-init,並將其整合到其基底 Azure 已發佈映像中。 確認您要部署的映像已啟用 cloud-init 之後,您可以使用 Azure CLI 來部署映像。

部署此映像的第一個步驟是使用 az group create 命令建立資源群組。 Azure 資源群組是在其中部署與管理 Azure 資源的邏輯容器。

下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。

az group create --name myResourceGroup --location eastus

下一步是在目前的 shell 中建立一個名為 cloud-init.txt 的檔案,並貼上以下配置。 在此範例中,請在本機電腦上,在 Cloud Shell 中建立檔案。 您可以使用您選擇的任何編輯器。 輸入 sensible-editor cloud-init.txt 以建立檔案並查看可用編輯器的清單。 使用您選擇的編輯器。 一些典型的選擇是 nanovimed。 請確定整個 cloud-init 檔案已正確複製,尤其是第一行:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

備註

cloud-init 有多種 輸入類型,cloud-init 會使用 customData/userData 的第一行來指出它應該如何處理輸入,例如 #cloud-config 指出內容應該作為 cloud-init 設定來處理。

退出檔案,並依照編輯器儲存檔案。 退出時驗證檔案名稱。

最後一個步驟是使用 az vm create 命令建立 VM。

下列範例會建立名為 SSH 金鑰的 ubuntu2204 VM,並建立 SSH 金鑰 (如果預設金鑰位置中尚不存在)。 若要使用一組特定的按鍵,請使用選項 --ssh-key-value 。 使用參數 --custom-data 傳入您的 cloud-init 組態檔。 如果您將檔案儲存在目前工作目錄之外,請提供 cloud-init.txt 設定的完整路徑。

az vm create \
  --resource-group myResourceGroup \
  --name ubuntu2204 \
  --image Canonical:UbuntuServer:22_04-lts:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

建立 VM 時,Azure CLI 會顯示部署的特定資訊。 請注意 publicIpAddress. 此位址可用來存取 VM。 建立 VM、安裝套件和啟動應用程式需要一些時間。 在 Azure CLI 將您傳回提示之後,有一些背景工作會繼續執行。 您可以透過 SSH 連線到 VM,並使用 疑難排解 一節中概述的步驟來檢視 cloud-init 記錄。

您也可以在 ARM 範本中傳遞參數,以部署已啟用雲端初始化的 VM。

疑難排解 cloud-init

配置VM後,cloud-init會運行定義的所有模組和指令碼 --custom-data ,以配置VM。 如果您需要針對組態中的任何錯誤或遺漏進行疑難排解,則需要在 cloud-init 記錄檔中搜尋模組名稱 (disk_setupruncmd 例如) ,位於 /var/log/cloud-init.log 中。

備註

並非每個模組故障都會導致嚴重的 cloud-init 整體組態失敗。 例如,使用 runcmd 模組時,如果指令碼失敗,cloud-init 仍會報告佈建成功,因為執行了 runcmd 模組。

如需 cloud-init 記錄的詳細資訊,請參閱 cloud-init 文件

遙測

cloud-init 會收集使用量資料,並將其傳送給 Microsoft,以協助改善我們的產品和服務。 只有在佈建程式 (VM 的第一次開機) 期間收集遙測。 收集的資料可協助我們調查佈建失敗,並監控效能和可靠性。 收集的資料不包含任何識別碼 (個人識別碼)。 閱讀我們的 隱私權聲明 以了解更多資訊。 所收集遙測的一些範例包括 (這不是詳盡的清單):OS 相關資訊 (cloud-init 版本、散發版本、核心版本)、基本 VM 佈建動作的效能計量 (取得 DHCP 租用的時間、擷取設定 VM 所需的中繼資料的時間等)、cloud-init 記錄和 dmesg 記錄。

遙測收集目前已針對大部分使用 cloud-init 的市集映像啟用。 這是透過指定 cloud-init 的 KVP 遙測報告器來啟用。 在大部分的 Azure Marketplace 映像中,您可以在檔案 /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg 中找到此設定。 在映像準備期間移除此檔案會停用從此映像建立的任何虛擬機器的遙測收集。

10-azure-kvp.cfg 的範例內容

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

後續步驟

針對 cloud-init 的問題進行疑難排解

如需組態變更的 cloud-init 範例,請參閱下列文件: