不只是編排引擎,OpenStack Heat之應用部署實踐

周建丁發表於2016-07-20

本文介紹OpenStack Heat的實戰經驗,如何用Heat部署軟體叢集,如何通過Heat來模組化應用部署並管理軟體生命週期。

作為OpenStack中的編排引擎,Heat能夠出色的完成編排任務,井井有條地管理編排出來的資源。但同時,Heat也是一個出色的應用部署引擎,它提供了一套內建的框架去完成一系列複雜的應用部署任務。下面就讓我們來深入瞭解這一框架。

圖片描述

使用Heat來部署應用的優勢

Heat是OpenStack裡面的原生服務,大部分的發行版都會提供這個服務,使用起來更方便。同時通過OS::Heat::SoftwareConfig和OS::Heat::SoftwareDeployment等多個資源型別的組合,可以輕易的實現一套應用部署流程。在虛擬機器中的Agents會定時與Heat通訊,傳送指令碼執行結果,方便Heat進行流程控制。有了這一套機制,Heat便擁有了對軟體生命週期管理的能力。

當然這一套框架也有一些需要克服的不足:

  • 需要在image內安裝一些Heat的Agents與Heat API通訊,有些客戶可能並不太願意在虛擬機器內安裝Agents。
  • 相對於成熟的軟體自動化部署工具,Heat還是很稚嫩,但Heat並不是要成為它們,而是更好地與它們結合工作。

構建包含os-*-config agents的映象

剛才說要使用heat的這套框架,需要先建立出一個包含了os--config agents的映象。通常我們使用diskimage-builder這個工具,下面的例子是建立出一個帶os--config agents的Fedora映象:

$ git clone https://git.openstack.org/openstack/diskimage-builder.git
$ git clone https://git.openstack.org/openstack/tripleo-image-elements.git
$ git clone https://git.openstack.org/openstack/heat-templates.git
$ export ELEMENTS_PATH=tripleo-image-elements/elements:heat-templates/hot/software-config/elements 
$ disk-image-create vm fedora \
$ os-collect-config os-refresh-config os-apply-config \
$ heat-config heat-config-script \
$ -o fedora-software-config.qcow2 

使用SoftwareConfig的HOT模版

圖片描述

http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Heat::SoftwareConfig

要通過Heat來部署應用,至少三個資源會被使用到:

  • OS::Heat::SoftwareConfig 用於儲存應用部署的執行指令碼,每一個指令碼都應該用一個SoftwareConfig來儲存。其中group表示這是一個script指令碼,將會被script模組執行。此外還支援ansible、chef、puppet、salt等指令碼。config屬性存放要執行的指令碼內容,通常我們會通過get_file函式去獲取一個指令碼的內容。
  • OS::Heat::SoftwareDeployment 會把應用部署的指令碼傳輸到vm裡面並執行。
  • OS::Nova::Server裡面需要把user_data_format屬性設定成SOFTWARE_CONFIG,這樣heat才能給虛擬機器下發正確的配置檔案。

軟體部署機制的內部流程

圖片描述
1. Heat stack-create 觸發部署流程,Heat分析並儲存template中的資料,SoftwareConfig中的指令碼會放到Heat資料庫中。
2. Heat Engine去請求Nova建立相應的資源,並且在虛擬機器的metadata中寫入一些Heat的資訊,包括Heat的API和認證資訊。
3. Nova通知compute節點建立虛擬機器。
4. 虛擬機器第一次啟動之後會呼叫Cloud-init,cloudinit與nova metadata service通訊,獲取metadata資訊。
5. 然後通過不同的module去設定這些相應的配置,例如hostname,ssh等等。
6. 然後啟動os-collect-config程式,它會讀取/etc/os-collect-config.conf這個配置檔案,裡面由cloud-init配置了Heat的一些資訊。讀取完配置檔案之後會與Heat API,以獲取軟體部署指令碼。
7. 然後os-collect-config會呼叫os-refresh-config去對比新獲取的指令碼是否與之前的指令碼不同。
8. 如果獲取的指令碼有更新,則呼叫os-apply-config去執行。
9. 執行結束之後通知heat指令碼執行結果。

作者簡介:
林瀟俊,自2013年起做OpenStack雲,為IBM OpenStack開發Service HA方案。2014年起專注於Heat專案,為內外部客戶編寫自動編排模版,在社群持續貢獻程式碼,併成為Core。2015年參與OpenStack Clustering(Senlin)專案的開發,完善並推動了這個專案的發展與成熟。

相關文章