Cloud-Init

如何確保 Cloud-Init 只執行一次且只執行一次?

  • January 15, 2022

據我所知,cloud-init每次配置更改時都會執行。不僅在系統第一次啟動時,而且在每次提供的配置更改時。這有點道理,因為我想很難定義“第一次”(複製的 VM 在被凍結並用作模板之前已經執行,所以它從來都不是第一次)。但是,我不時地——很少,但仍然——發現cloud-init它們在重新啟動時在已配置的系統上重新執行。

cloud-init但是,當在完全配置的系統上執行時,某些步驟似乎會搞砸設置。例如,如果它在初始設置後再次執行一次cloud-init並將某些配置設置為 value X,但之後您手動將其覆蓋為Y,現在cloud-init重新執行以將其設置回X. 或者,讓系統重新創建您的 SSH 主機密鑰。

因此,我發現手動執行非常有用:

sudo touch /etc/cloud/cloud-init.disabled

…在初始設置之後,以防止它cloud-init再次執行。(在某些情況下,cloud-init真的只用於初始的“複製和設置 IP/主機名”類型的配置。)

但是有什麼方法可以自動化嗎?/etc/cloud/cloud.cfg就像在下次執行後向禁用自身添加一些參數一樣?

不同cloud-init的模組有不同的頻率:once-per-instancealways您可以在Modules 文件Module frequency中檢查每個模組的屬性。例如,在每次啟動時執行,但僅在第一次啟動時執行。可以在 cloud-config 文件模組列表中覆蓋頻率-和. 範例覆蓋:bootcmd``runcmd``cloud_init_modules``cloud_config_modules``cloud_final_modules

cloud_final_modules:
- [scripts-user, always]

引用自:https://serverfault.com/questions/1090101