1. 程式人生 > >OpenStack的Heat元件詳解

OpenStack的Heat元件詳解

一:簡介

    一、什麼Heat

       1. Heat 是一套業務流程平臺,旨在幫助使用者更輕鬆地配置以 OpenStack 為基礎的雲體系。利用Heat應用程式,開發人員能夠在程式中使用模板以實現資源的自動化部署。Heat能夠啟動應用、建立虛擬機器並自動處理整個流程。它還擁有出色的跨平臺相容性,能夠與 Amazon Web Services 業務流程平臺 CloudFormation 相對接——這意味著使用者完全可以將 AWS 模板引入 OpenStack 環境當中。

       2. Heat 是 OpenStack 提供的自動編排功能的元件,基於描述性的模板,來編排複合雲應用程式。

 

    二、為什麼需要Heat

       1. 更快更有效的管理 OpenStack 的資源:雲平臺系統在相對比較穩定的情況下,管理成本逐漸變成首要的解決問題。雲上自動化能力是一個雲平臺的剛需,可以有效降低維護難度。Heat 採用了模板方式來設計或者定義編排,為方便使用者使用,Heat 還提供了大量的模板例子,使使用者能夠方便地得到想要的編排。

       2. 更小的研發成本:引入 Heat,對於不瞭解 OpenStack 的研發者來說,可以更快的接入現有的業務系統。開發者更關心的是授權認證和對虛擬資源的增刪改,而對於底層的狀態並不用太多瞭解。

 

    三、概念

       1. 堆疊(stack):管理資源的集合。單個模板中定義的例項化資源的集合,是 Heat 管理應用程式的邏輯單元,往往對應一個應用程式。

       2. 模板(template):如何使用程式碼定義和描述堆疊。描述了所有元件資源以及元件資源之間的關係,是 Heat 的核心。

       3. 資源(resource):將在編排期間建立或修改的物件。資源可以是網路、路由器、子網、例項、卷、浮動IP、安全組等。

       4. 引數(parameters):heat模板中的頂級key,定義在建立或更新 stack 時可以傳遞哪些資料來定製模板。

       5. 引數組(parameter_groups):用於指定如何對輸入引數進行分組,以及提供引數的順序。

       6. 輸出(outputs):heat模板中的頂級key,定義例項化後 stack 將返回的資料。

 

二:架構

    一、核心架構

       

       1. heat command-line client:CLI通過與 heat-api 通訊,來呼叫 API 實現相關功能。終端開發者可以直接使用編排 REST API。

       2. heat-api:實現 OpenStack 原生支援的 REST API。該元件通過把 API 請求經由 AMQP 傳送給 Heat engine 來處理 API 請求。

       3. heat-api-cfn:提供與 AWS CloudFormation 相容的、AWS 風格的查詢 API,處理請求並通過 AMQP 將它們傳送到 heat-engine。

       4. heat-engine:執行模板內容,最終完成應用系統的建立和部署,並把執行結果返回給 API 呼叫者。

       5. heat-cfntools:完成虛擬機器例項內部的操作配置任務,需要單獨下載。

 

    二、工作流程

       1. 使用者在 Horizon 中或者命令列中提交包含模板和引數輸入的請求

       2. Horizon 或者命令列工具會將接收到的請求轉化為 REST 格式的 API 呼叫 Heat-api 或者是 Heat-api-cfn。

       3. Heat-api 和 Heat-api-cfn 會驗證模板的正確性,然後通過 AMQP 非同步傳遞給 Heat Engine 來處理請求。

       4. Heat Engine 接收到請求後,會把請求解析為各種型別的資源,每種資源都對應 OpenStack 其它的服務客戶端,然後通過傳送 REST 的請求給其它服務。

       5. Heat Engine 在這裡的作用分為三層: 第一層處理 Heat 層面的請求,就是根據模板和輸入引數來建立 Stack,這裡的 Stack 是由各種資源組合而成。 第二層解析 Stack 裡各種資源的依賴關係,Stack 和巢狀 Stack 的關係。第三層就是根據解析出來的關係,依次呼叫各種服務客戶段來建立各種資源。

            

 

     三、模板詳解

        1. 概念:Heat 模板全稱為heat orchestration template,簡稱為HOT。

        2. 典型 Heat 模板結構

 1 heat_template_version: 2015-04-30             ### HOT版本
 2 description:                                  ### 說明
 3   # a description of the template
 4 
 5 parameter_groups:                             ### 指定引數順序
 6 - label: <human-readable label of parameter group>
 7   description: <description of the parameter group>
 8   parameters:
 9   - <param name>
10   - <param name>
11 
12 parameters:                                   ### 傳遞的引數
13   <param name>:                               ### 引數名
14     type: <string | number | json | comma_delimited_list | boolean>  ### 引數型別
15     label: <human-readable name of the parameter>  ### 標籤
16     description: <description of the parameter>
17     default: <default value for parameter>
18     hidden: <true | false>                    ### 是否隱藏
19     constraints:                              ### 已有的內建引數:OS::stack_name、OS::stack_id、OS::project_id
20       <parameter constraints>
21     immutable: <true | false>
22 
23 resources:                                  ### 資源物件
24   <resource ID>:                            ### 資源的ID
25     type: <resource type>                   ### 資源的型別
26     properties:                             ### 資源的屬性
27       <property name>: <property value>
28     metadata:                               ### 資源的元資料
29       <resource specific metadata>
30     depends_on: <resource ID or list of ID>
31     update_policy: <update policy>
32     deletion_policy: <deletion policy>
33 
34 outputs:                                    ### 返回值
35   <parameter name>:                         ### 引數名
36     description: <description>              ### 說明
37     value: <parameter value>                ### 輸出值

 

        3. 例子

 1 heat_temp_version:2016-04-30
 2 Description: AWS::CloudWatch::Alarm using Ceilometer.
 3 parameters:
 4   user_name:
 5     type: string
 6     label: User Name
 7     description: User name to be configured for the application
 8   port_number:
 9     type: number
10     label: Port Number
11     description: Port number to be configured for the web server
12 
13 resources:
14   my_instance:
15     type: OS::Nova::Server
16     properties:
17       flavor: m1.small
18       image: F18-x86_64-cfntools
19 
20 outputs:
21   instance_ip:
22     description: IP address of the deployed compute instance
23     value: { get_attr: [my_instance, first_address] } 

 

三:常用操作

    一、棧、資源、模板管理

          

 

    二、軟體、快照管理

         

&n