cloud-init工作原理


cloud-init是linux的一個工具,當系統啟動時,cloud-init可從nova metadata服務或者config drive中獲取元數據,完成包括但不限於下面的定制化工作:

  1. 設置默認語言環境

  2. 設置主機名

  3. 添加ssh鍵到.ssh / authorized_keys

  4. 設置用戶密碼

  5. 配置網絡

  6. 安裝軟件包

為了實現instance定制工作,cloud-init會按4個階段執行任務:

  1. 本地

  2. 在里面

  3. 配置

  4. 最后

cloud-init安裝時會將這4個階段執行的任務以服務的形式注冊到系統中,比如在systemd的環境下,我們能夠看到這4個階段分別對應的服務:

  1. local - cloud-init-local.service

  2. init - cloud-init.service

  3. config - cloud-config.service

  4. final - cloud-final.service

39.5.png

當地階段


作為cloud-init執行的第一個階段,此時實例還不知道該如何配置網卡,cloud-init的任務就是從配置驅動中獲取配置信息,然后寫入/ etc / network / interfaces文件(如果是centos則寫入/ etc / sysconfig / network-scripts / ifcfg-xxx)。

如果沒有配置驅動,則將所有網卡配置成dhcp模式。這是非常關鍵的一步,只有當網卡正確配置后,才能獲取到元數據。

關於local階段下一節會通過實驗詳細分析。

init,config和final階段


正常情況下,在這三個階段執行之前實例網絡已經配置好了,並且已經成功獲取到metadata.cloud-init的配置文件/etc/cloud/cloud.cfg定義了三個階段分別要執行的任務,任務以模形式指定。

39.6.png

instance真正的定制工作就是由這些模塊完成的.module決定做哪些定制化工作,而元則則決定最終定制化的結果。

舉個例子,如果cloud.cfg中指定了  set_hostname 這個模塊,則意味着cloud-int會設置instance的主機名,而具體設置成哪個主機名則由元數據中  hostname 參數決定。

有些模塊是有默認行為的,比如  growpart,如果元數據中沒有特別指定,它會自動擴展  / 分區。

由於篇幅限制,這里就不一一討論每個模塊了,具體可參閱文檔  https://cloudinit.readthedocs.io/en/latest/topics/modules.html

后面我們會討論cloud-init典型的使用場景,其中也會涉及常用模塊的示例

 

 

摘自“每天

5分鍾玩轉OpenStack


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM