用 config drive 配置網絡

上一節最後問了你們一個問題:若是 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.5it

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,設置用戶初始密碼,安裝軟件等。