cloud-init 典型應用 - 每天5分鍾玩轉 OpenStack(174)


本節介紹幾個 cloud-init 的典型應用:設置 hostanme,設置用戶初始密碼,安裝軟件。 

設置 hostname

cloud-init 默認會將 instance 的名字設置為 hostname。但這樣不太方便,有時希望能夠將二者分開,可利用 cloud-init 的set_hostname 模塊實現。set_hostname 它會查詢 metadata 中 hostname 信息,默認值就是 instance 的名字。我們可以指定自己的 hostname,方法是將下面的內容傳給 cloud-init:

#cloud-config

hostname: my1.cloudman.cc

manage_etc_hosts: true

 

說明如下:

  1. cloud-init 只會讀取以 #cloud-config 開頭的數據,所以這一行一定要寫對。

  2. hostname: my1.cloudman.cc 告訴 cloud-init 將 hostname 設置為 my1.cloudman.cc。

  3. manage_etc_hosts: true 告訴 cloud-init 更新 /etc/hosts 文件。

接下來的問題是:如何將這些信息傳給 cloud-init?

有三幾種方法:

① 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

 

說明如下:

  1. root 和 ubuntu 用戶密碼設置為 123456。

  2. 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]

 

說明如下:

  1. apt 指定安裝源的位置,這里為 http://1.2.3.4 。如果是 yum 源則用 yum_repos 模塊指定,具體用法可參看官網文檔。

  2. packages 指定需要安裝的軟件包,還可以指定具體版本。

instance 啟動后可看到 /etc/apt/sources.list 中安裝源已經更新為http://1.2.3.4。

由於 http://1.2.3.4 不是一個有效的 apt 源,安裝肯定會失敗,我們可以在 /var/log/cloud-init.log 看到失敗的信息。

雖然失敗了,但我們至少可以確定如下事情:

  1. 傳入的腳本是有效的,cloud-init 確實在嘗試安裝指定的軟件。

  2. /var/log/cloud-init.log 會完整地記錄 cloud-init 運行的所有細節,是 debug 最重要的工具。

cloud-init 的模塊眾多,功能很全,是實現 instance 定制的神器。由於篇幅所限,這里只討論了幾個典型用例。更多用法以及示例可參看 https://cloudinit.readthedocs.io

關於 Metadata 和 cloud-init 的主題就討論到這里,下一次我們將開始新的教程 《每天5分鍾玩轉容器技術》,敬請期待。


免責聲明!

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



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