編排
編排,顧名思義,就是按照一定的目的依次排列。在 IT 的世界里頭,一個完整的編排一般包括設置服務器上機器、安裝 CPU、內存、硬盤、通電、插入網絡接口、安裝操作系統、配置操作系統、安裝中間件、配置中間件、安裝應用程序、配置應用發布程序。對於復雜的需要部署在多台服務器上的應用,需要重復這個過程,而且需要協調各個應用模塊的配置,比如配置前面的應用服務器連上后面的數據庫服務器。下圖顯示了一個典型應用需要編排的項目。
Heat 是一個基於模板來編排復合雲應用的服務。 它目前支持亞馬遜的 CloudFormation 模板格式,也支持 Heat 自有的 Hot 模板格式。模板的使用簡化了復雜基礎設施,服務和應用的定義和部署。模板支持豐富的資源類型,不僅覆蓋了常用的基礎架構,包括計算、網絡、存儲、鏡像,還覆蓋了像 Ceilometer 的警報、Sahara 的集群、Trove 的實例等高級資源。
圖 1. Heat 和其它模塊的關系
Heat Architecture
Heat 服務包含以下重要的組件:
- Heat-api 組件實現 OpenStack 天然支持的 REST API。該組件通過把 API 請求經由 AMQP 傳送給 Heat engine 來處理 API 請求。
- Heat-api-cfn 組件提供兼容 AWS CloudFormation 的 API,同時也會把 API 請求通過 AMQP 轉發給 heat engine。
- Heat-engine 組件提供 Heat 最主要的協作功能。
用戶在 Horizon 中或者命令行中提交包含模板和參數輸入的請求,Horizon 或者命令行工具會把請求轉化為 REST 格式的 API 調用,然后調用 Heat-api 或者是 Heat-api-cfn。Heat-api 和 Heat-api-cfn 會驗證模板的正確性,然后通過 AMQP 異步傳遞給 Heat Engine 來處理請求。
圖 2. Heat 架構
當 Heat Engine 拿到請求后,會把請求解析為各種類型的資源,每種資源都對應 OpenStack 其它的服務客戶端,然后通過發送 REST 的請求給其它服務。通過如此的解析和協作,最終完成請求的處理。
Heat Engine 在這里的作用分為三層: 第一層處理 Heat 層面的請求,就是根據模板和輸入參數來創建 Stack,這里的 Stack 是由各種資源組合而成。 第二層解析 Stack 里各種資源的依賴關系,Stack 和嵌套 Stack 的關系。第三層就是根據解析出來的關系,依次調用各種服務客戶段來創建各種資源。
圖 3. Heat Engine 結構
圖 4. 編排
在雲計算的世界里,機器這層就變為了虛擬的 VM 或者是容器。管理 VM 所需要的各個資源要素和操作系統本身就成了 IaaS 這層編排的重點。操作系統本身安裝完后的配置也是 IaaS 編排所覆蓋的范圍。除此之外,提供能夠接入 PaaS 和 SaaS 編排的框架也是 IaaS 編排的范圍。
OpenStack 從最開始就提供了命令行和 Horizon 來供用戶管理資源。然而靠敲一行行的命令和在瀏覽器中的點擊相當費時費力。即使把命令行保存為腳本,在輸入輸出,相互依賴之間要寫額外的腳本來進行維護,而且不易於擴展。用戶或者直接通過 REST API 編寫程序,這里會引入額外的復雜性,同樣不易於維護和擴展。 這都不利於用戶使用 Openstack 來進行大批量的管理,更不利於使用 OpenStack 來編排各種資源以支撐 IT 應用。
Heat 在這種情況下應運而生。Heat 采用了業界流行使用的模板方式來設計或者定義編排。用戶只需要打開文本編輯器,編寫一段基於 Key-Value 的模板,就能夠方便地得到想要的編排。為了方便用戶的使用,Heat 提供了大量的模板例子,大多數時候用戶只需要選擇想要的編排,通過拷貝-粘貼的方式來完成模板的編寫。
Heat 從四個方面來支持編排。首先是 OpenStack 自己提供的基礎架構資源,包括計算,網絡和存儲等資源。通過編排這些資源,用戶就可以得到最基本的 VM。值得提及的是,在編排 VM 的過程中,用戶可以提供一些簡單的腳本,以便對 VM 做一些簡單的配置。然后用戶可以通過 Heat 提供的 Software Configuration 和 Software Deployment 等對 VM 進行復雜的配置,比如安裝軟件、配置軟件。接着如果用戶有一些高級的功能需求,比如需要一組能夠根據負荷自動伸縮的 VM 組,或者需要一組負載均衡的 VM,Heat 提供了 AutoScaling 和 Load Balance 等進行支持。如果要用戶自己單獨編程來完成這些功能,所花費的時間和編寫的代碼都是不菲的。現在通過 Heat,只需要一段長度的 Template,就可以實現這些復雜的應用。Heat 對諸如 AutoScaling 和 Load Blance 等復雜應用的支持已經非常成熟,有各種各樣的模板供參考。最后如果用戶的應用足夠復雜,或者說用戶的應用已經有了一些基於流行配置管理工具的部署,比如說已經基於 Chef 有了 Cookbook,那么可以通過集成 Chef 來復用這些 Cookbook,這樣就能夠節省大量的開發時間或者是遷移時間。
圖 5. Heat 編排