本節介紹幾個 cloud-init 的典型應用:設置 hostanme,設置用戶初始密碼,安裝軟件。 python
cloud-init 默認會將 instance 的名字設置爲 hostname。但這樣不太方便,有時但願可以將兩者分開,可利用 cloud-init 的set_hostname
模塊實現。set_hostname
它會查詢 metadata 中 hostname 信息,默認值就是 instance 的名字。咱們能夠指定本身的 hostname,方法是將下面的內容傳給 cloud-init:ubuntu
#cloud-configpython2.7
hostname: my1.cloudman.ccssh
manage_etc_hosts: true工具
說明以下:
pwa
cloud-init 只會讀取以 #cloud-config
開頭的數據,因此這一行必定要寫對。命令行
hostname: my1.cloudman.cc
告訴 cloud-init 將 hostname 設置爲 my1.cloudman.cc。debug
manage_etc_hosts: true
告訴 cloud-init 更新 /etc/hosts 文件。code
接下來的問題是:如何將這些信息傳給 cloud-init?server
有三幾種方法:
① instance 部署時,直接將其粘貼到 Customization Script
輸入框中。
② 將其保存爲文件,instance 部署時上傳(上圖 ② 所示)。
③ 將其保存爲文件,命令行 nova boot
或者 openstack server create
部署 instance 時,使用參數 --user-data
傳入。
部署成功後,hostname 正確設置,/etc/hosts 也相應更新。
官方的 cloud image 默認只能經過 ssh key 登陸。咱們能夠利用set-passwords
模塊爲用戶設置密碼並啓用密碼登陸。須要傳入的腳本以下:
#cloud-config
chpasswd:
list: |
root:123456
ubuntu:123456
expire: false
ssh_pwauth: true
說明以下:
root 和 ubuntu 用戶密碼設置爲 123456。
ssh_pwauth
啓用密碼登陸。
instance 啓動後 ssh 驗證:
ubuntu 用戶 ssh 密碼登陸成功,而且可經過密碼切換到 root。
標準鏡像中不可能包含咱們須要的全部軟件,定製安裝是不可避免的。一個辦法是部署完後手動安裝,另外一個辦法是經過 package-update-upgrade-install
模塊讓 cloud-init 自動爲咱們安裝。
須要傳入的腳本以下:
#cloud-config
apt:
primary:
- arches: [default]
search:
- http://1.2.3.4
packages:
- pwgen
- pastebinit
- [libpython2.7, 2.7.3-0ubuntu3.1]
因爲 http://1.2.3.4 不是一個有效的 apt 源,安裝確定會失敗,咱們能夠在 /var/log/cloud-init.log 看到失敗的信息。
雖然失敗了,但咱們至少能夠肯定以下事情:
傳入的腳本是有效的,cloud-init 確實在嘗試安裝指定的軟件。
/var/log/cloud-init.log 會完整地記錄 cloud-init 運行的全部細節,是 debug 最重要的工具。
cloud-init 的模塊衆多,功能很全,是實現 instance 定製的神器。因爲篇幅所限,這裏只討論了幾個典型用例。更多用法以及示例可參看 https://cloudinit.readthedocs.io
關於 Metadata 和 cloud-init 的主題就討論到這裏,下一次咱們將開始新的教程 《天天5分鐘玩轉容器技術》,敬請期待。