1. 程式人生 > >十 OpenStack自定義例項(Cloud-Init)

十 OpenStack自定義例項(Cloud-Init)

(本文所有提及OSP=OpenStack Platform)

1 建立自定義例項

1)Cloud-Init :

  • cloud-init是對例項執行初始化的軟體。它包含系統RPM中,是一個提供的基礎映象
  • 管理員可使用cloud-init 來執行的任務包括包括:
  • 設定預設的區域一更新例項主機名
  • 生成或注入SSH私鑰以允許免密碼登入
  • 設定臨時掛載點。共享儲存是水平擴充套件應用的通用要求
  • cloud-init可以通過user-data 呼叫,後者是例項啟動時使用者提供的資料。提供的指令由cloud-init 讀取並解析,從而自定義例項
  • OpenStack也通過cloud-init 實施例項管理。使用者可以在Horizon 控制面板中啟動例項, 然後使用Configuration 選項卡指定要應用的自定義設定

2) cloud-init資料格式:

  • cloud-init包含對多種資料格式的支援,靈活性更強支援使用gzip 來壓縮資料。當資料大小超過16384 位元組大小限制時,壓縮可以發揮作用
  • 管理員可以使用MIME存檔來包含多種型別的資料。例如, 可以同時包含user-data指令碼和cloud-config 型別
  • 支援開頭為#!或Content-Type: text/x-shellscript的 user-data指令碼。該指令碼於例項第一次引導期間在rc.local 級別執行。此指令碼的執行與系統上的任何其他指令碼類似
  • cloud-init支援包含其他檔案。資料宣告的開頭必須為#include 或Content-Type: text/x-include-url。此宣告指定要包含的檔案。檔案中包含URL列表,每行一個。每一個URL都將被讀取,其內容通過同一組規則進行傳遞;即,從URL讀取的內容可以是gzip 壓縮資料、MIME多部件或純文字
  • 支援cloud-config格式的資料。資料宣告的開頭必須為#cloud-config 或Content-Type: text/cloud-config
  • Upstart作業也有效。資料宣告的開頭必須為#upstart-job 或Content-Type:text/upstart-job。其內容放入/etc/init 下的檔案,供upstart 使用
  • 支援Cloud Boothook格式的資料。資料宣告的開頭必須為#cloud-boothook或Content-Type:text/cloud-boothook。boot hook是最早的執行時間段

3)user-data指令碼:

  • user-data 指令碼提供了一種便捷的方式,供管理員供在例項建立時向例項傳送指令集合
  • 該指令碼在rc.local級別呼叫,這是引導流程中的最後一個級別

4)cloud-config :

  • 除了使用shell 指令碼外,管理員還可在cloud-config 語法中指定自定義,以使用者友好的格式提供指令,檔案必須是有效的YAML, 以便它能夠被cloud-init 解析並執行
  • 這些指令包括:
  • 在第一次引導時使用yum更新系統,這可以防止開放或許沒有安裝最新安全更新的例項
  • 新增新的yum儲存庫,以允許根據例項的角色來訪問不同的軟體包
  • 匯入SSH金鑰,這可免除基於密碼登入的要求,並且防止暴力攻擊實施成功
  • 建立使用者,這可能是備份或監控的第三方代理的需求

5)建立自定義例項(Horizon控制面板) :

  • 在Web瀏覽器中開啟Horizon 控制面板URL,再導航到Project>Compute > Instances單擊Launch Instance
  • 填充Details、 Source、 Flavor 和Networks 選項卡中的欄位。(可選)在SecurityGroups和Key Pair選項卡中進行更改
  • 在Configuration選項卡中,直接在Configuration Script欄位中提供您的自定義命令,或者上傳指令碼檔案單擊Launch Instance
  • 例項標記為Active 後,將浮動IP地址與它連線
  • 開啟終端,再使用ssh 命令登入例項。使用相應的私鑰,連線浮動IP地址查詢cloud-init 服務的狀態,確保它已啟用並正在執行
  • 建立自定義例項(命令列) :
    1. 開啟終端,再提供keystone憑據檔案。
    2. 建立包含cloud-init 指令的檔案。指令可以使用cloud-init 支援的任何格式,如簡單的shell 指令碼。
    3. 啟動例項,並將–user-data /path_ to/your_ file作為引數傳遞。
    4. 例項狀態為Active 時,連線一個浮動IP地址。
    5. 開啟終端,通過ssh 並使用浮動IP地址及相應的私鑰登入例項。
    6. 查詢cloud-init 服務的狀態,確保它已啟用並正在執行