余程莉 高琪琪 梁棟茂 劉 佳 劉 飄
(無錫職業技術學院,江蘇 無錫214100)
介紹:Heat 編排服務是在openstack 的Havana 版本中首次發行的,heat 最初是對openstack 的計算,鏡像,網絡,快存儲進行編排而開發的,在后期又加入ceilometer 的警報、Sahara 的集群和trove 的實例等高級資源。Heat 是通過簡單的模板引擎文本文件(HOT 模板),為用戶創建所需資源的并運行的應用程序。在最新的openstack 版本中,heat 是一個成熟度較高的openstack 組件,其社區中支持的資源目錄也在增加,因此heat是一個具有很大吸引力的openstack 項目?;趆eat 項目,我們可以更好地指定和描述openstack 之間的資源關系,使api 之間可以有序的進行通訊,同時我們還可以通過heat 模板來實現自動收縮、負載均衡等特性。
1 Heat 服務是由一下組件組成的
1.1 heat-api:這是一個openstack 原生的API,其主要作用是將API 請求通過高級消息隊列協議發送給Heat engine 組件。
1.2 heat-api-cfn: 這 是 一 個 兼 容 亞 馬 遜 AWS CloudFormation 的API 接口,也是通過高級消息隊列進行信息傳遞到Heat engine 組件的。

圖1 Heat 服務組件工作流程圖
1.3 heat-engine 主要是一個核心組件,命令行或Horizon 中提交的面板參數等輸入請求在heat-api 和heat-api-cfn 中轉換為REST 格式的API,在分別進行校驗模板的正確性,然后通過AMQP 異步傳遞至傳值heat-engine 來進行請求的處理。在heat-engine 拿到請求時,會把請求拆分成相應的資源類型創建stack,然后再通過stack 到相應的資源中新型獲取和解析,然后然后進行服務創建。
1.4 heat CLI 工具:用于heat-api 進行數據通信的命令行接口。
2 Heat 服務組件工作流程圖(見圖1)
3 Heat 模板棧的介紹
Openstack 是可以通過云管理員和用戶獨立的創建各種云資源,其中包括各種資源組,如實例、存儲卷、網絡、虛擬路由、負載均衡等。在多種資源的調度情況下,通過命令行或Horizon 的方式進行調度是不便于管理的,因此heat 模板棧應運而生。
在openstack 的編排中,物理服務器變為虛擬的vm 或者容器,管理這些vm 或容器也是編排的一部分,及編排的重點。在vm 或容器的配置也是iaas 編排的一部分,除此之外提供paas、saas 編排的框架也是iaas 編排的一部分。

圖2 Heat 模板棧
heat 模板棧采用了當今界內流行的模板方式進行模板的定義和設計,有兩種方式,分別是基于json 格式的Cfn 模板、基于yaml 格式的hot 模板。Hot 模板是heat 自帶的基礎模板,cfn 則是為了保證對aws 的兼容性而設置的模板。在這里我們具體講下hot 模板。在一個典型的hot 模板中常常包含以下元素,模板版本、參數列表、資源列表和輸出列表。他們的作用分別如下,通過模板版本來進行校驗,通過參數輸入列表來確認學需要的資源類型,資源列表來指定生成stack 所包含的各種資源,輸出列表可以讓用戶使用也可以作為輸入所提供給其他的stack 資源。
4 Heat 模板的編寫圖(圖3)
5 Heat 模板編寫介紹
如圖3 所示,其便是一個完整的編排模板,這段代碼分析如下。
heat_template_version: 2016-04-08
在這里指定了hot 文件所使用的模板語法版本,它是由2016-04-08map_merge 支持的完整yaml 文檔的hot 模板。
descripton
在這里進行模板的詳細介紹,便于其他工作者快速入手。
parameter
此處聲明了輸入列表,每個參數都了給定名稱及描述,認值都是可選的。例如鏡像或網絡都可通過鏡像名稱、像id、子網名稱、子網id 進行設置。
resources
這里我們可以看成heat 所需要創建或修改的資料,在heat組件的hot 文件中的resources 代碼段就是定義組件的地方。
outputs
在將棧部署到heat engine 中后可以將其全部屬性導出。

圖3 Heat 模板的編寫圖
6 Heat 研究實施
6.1 準備階段
在安裝和配置heat 編排服務組件之前,首先創建數據庫、服務證書和API endpoint,Heat 編排服務組件需要在keystone身份認證服務中添加信息。
6.1.1 創建數據庫
在myasql 中創建heat 數據庫。
修改heat 數據庫的訪問權限。
6.1.2 使用命令行加admin user 的環境變量
6.1.3 創建Orchestration 服務憑據
創建Heat 用戶
將admin role 角色賦予Heat user 用戶和service project 租戶
創建heat 服務和heat-cfn service entity 的服務憑證
6.1.4 創建Heat 編排服務組件的API endpoint
6.1.5 Orchestration 服務添加Identity 信息,用以操作stack
創建Heat 域
創建heat_domain_admin 用戶,管理Heat 域中的project 和user
將admin role 賦予heat_domain_admin 用戶
創建heat_stack_owner role 角色
將heat_stack_owner role 角色賦予demo project 租戶 和user 用戶,使demo user 用戶可以管理Stack
創建heat_stack_user role 角色
6.2 安裝和配置Heat 編排服務組件
6.2.1 安裝heat 軟件包
6.2.2 編輯/etc/heat/heat.conf 文件
keystone_authtoken]
auth_host = 128.6.3.103
auth_port = 35357
auth_protocol = http
auth_uri = http://128.6.3.103:5000/v2.0
admin_tenant_name = service
admin_user = heat
admin_password = tsj
[ec2_authtoken]
auth_uri = http://128.6.3.103:5000/v2.0
keystone_ec2_uri = http://128.6.3.103:5000/v2.0/ec2tokens
6.2.3 編輯/etc/heat/api-paste.ini 文件
[filter:authtoken]
paste.filter_factory = heat.common.auth_token:filter_factory
auth_host = 128.6.3.103
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = heat
admin_password = tsj
6.2.4 同步信息到Prchestration 數據庫7 結論
Heat 是一個基于openstack 的編排服務,它是一個提高openstack 運行效率的服務,它可以簡化運維的操作難度,加強openstack 平臺的效率,同時它可以快速的在openstack 平臺上對其組件進行擴容負載均衡等操作。Heat 還是一個用清楚的權限劃分。它可以對penstack 的鏡像,計算,網絡,快存儲進行編排而開發的,在后期又加入Sahara 的集群、eilometer 的警報和trove的實例等高級資源。Heat 是一個高效的運維工具。