上一節最後問了你們一個問題:若是 subnet 沒有開 DHCP,會是怎樣一個狀況?json
在其餘條件不變的狀況下,cloud-init 依然會完成那 3 個步驟,也就是說網卡仍是會被配置成 dhcp 模式,只是最後網卡沒辦法得到 IP 而已。網絡
不開 DHCP 也是一個常見的場景,爲了讓 instance 的網卡在這種狀況下也可以被正確配置,咱們須要藉助 config drive,下面開始實踐。操作系統
在計算節點 /etc/nova/nova.conf 中須要添加一個配置,而後重啓 nova-compute 服務。3d
[DEFAULT]日誌
flat_injected = Truecode
flat_injected 的做用是讓 config drive 可以在 instance 啓動時將網絡配置信息動態注入到操做系統中。blog
當前網絡的 DHCP 已經關閉。ip
instance 部署時指定使用 config drive。部署
Neutron 爲 instance 分配的 IP 爲 18.18.18.5
。it
instance 啓動後登陸系統,ip a
驗證 IP 已經成功配置,說明 config drive 起做用了。
重要的是弄懂 18.18.18.5
這個 IP 是如何配置上去的。打開 /var/log/cloud-init.log,分析以下:
① 掃描出 instance 中的全部網卡,這一步與不使用 config drive 的狀況徹底同樣。
② 獲取該網卡的配置信息。 日誌顯示配置信息是從 ds
獲取。ds 是 datasource 的縮寫,在這裏指的就是 config drive。在不使用 config drive 的狀況下采用的是 fallback
配置。網卡配置信息記錄在 config drive openstack/latest/network_data.json 文件裏,內容以下:
③ 將配置信息寫入 /etc/network/interfaces.d/50-cloud-init.cfg,內容爲:
能夠看到 IP 以 static
方式配置。
總結一下:
1. 在沒有使用 config drive 的狀況下,cloud-init 只會配置第一塊網卡,且設置爲 dhcp 模式,因此:
① 若是 instance 只有一塊網卡,且啓用了 DHCP,網卡可以被正常拉起。
② 若是 instance 有多塊網卡,第一塊會嘗試以 dhcp 方式拉起,其餘網卡不做處理。
2. 使用 config drive 的狀況下,不管是否啓用 DHCP,全部網卡都能被正確配置且成功拉起(若是 dhcp 網卡 >= 2,CentOS 仍是有問題,可能跟目前所用的 cloud-init 版本較低有關)。
3. 若是可能,儘可能使用 config drive。
討論完網絡配置這個最重要的主題,下一節咱們來看看 cloud-init 的其餘典型應用:設置 hostanme,設置用戶初始密碼,安裝軟件等。