實現 instance 定製化,cloud-init(或 cloudbase-init)只是故事的一半,metadata service 則是故事的的另外一半。二者的分工是:metadata service 爲 cloud-init 提供自定義配置數據,cloud-init 完成配置工做。數據庫
前面討論了一些 cloud-init 和 cloudbase-init 相關的經驗,收到了不少反饋,你們對 instance 啓動時是如何完成自定義配置這個過程很是感興趣,但願可以系統講一下。這個主題確實很重要,實際應用場景不少,確實頗有必要系統討論一番,做爲對現有教程的補充。
instance 是經過 image 部署出來的,image 中包含了操做系統(例如 Ubuntu 16.04),最經常使用的軟件(例如 SSH)以及最通用的配置(例如 eth0 dhcp)。然而在建立 instance 的時候,咱們每每但願對 instance 進行一些額外的配置,好比:安裝某些包、開啓一些服務、添加 SSH 祕鑰、配置 hostname 等等。
有幾個方法能夠完成這項工做:
1. 將這些東西通通作到 image 中。
這種方案能夠實現,但不現實。image 應該被看着是一個模板,存放的是通用的內容。在 image 中加入個性化配置的作法要麼使 image 變得很是龐雜,要麼致使數量衆多的 image,不易管理。
2. instance 部署出來以後手工完成個性化配置。
因爲須要手工操做,instance 數量多了以後工做量會激增,並且容易出錯。
3. 推薦方案:由 OpenStack Metadata Service 提供 instance 的配置信息(這些信息被統稱爲 metadata)。instance 啓動時向 Metadata Service 請求並得到本身的 metadata,instance 的 cloud-init(或 cloudbase-init)根據 metadata 完成個性化配置工做。
這個方案的優勢是不須要修改基礎 image,保證了 image 的穩定性,同時實現了 instance 自動化地個性配置。
架構
將 ssh public key 添加到 instance。
首先在 「Project -> Compute -> Access & Security」 中建立 Key Pair。
ssh
OpenStack 會建立一對 ssh pulbic key 和 private key,public key 存放在 OpenStack 數據庫中,private key 會在咱們點擊 「Create Key Pair」 按鈕時自動下載。
如今 "cloudman" 這個 key pair 就是咱們要用的 metadata 了。部署 instance 時,選擇 "cloudman"。
學習
instance 啓動後,能夠看到這個 cloudman 的 public key 已經保存到 .ssh/authorized_keys 中了。
spa
這樣咱們就能夠用 cloudman 的 private key 直接登陸 instance。操作系統
本節咱們瞭解了 Metadata Service 的概念及其做用,並經過一個例子得到了些感性認識。下一節就要深刻學習了,咱們將從 Metadata Service 的架構開始。教程