原文:http://blog.scottlowe.org/2014/05/01/an-introduction-to-openstack-heat/git
本文將簡要地介紹OpenStack Heat. Heat項目提供協做服務,容許咱們能夠自動地建立多個計算實例,邏輯網絡,以及對其餘的雲服務的操做。請注意,這只是一個簡要介紹—我不是Heat的專家,我只是想要分享一些基本信息以便讀者能夠更快的使用Heat.github
爲了在如下的具體的例子中不至於產生困擾,咱們先從術語開始。數據庫
之後這些介紹應該足以支持咱們下面的介紹。(OpenStack Heat文檔有一個優秀的術語介紹)json
從架構來看,Heat有一些重要的組件:api
Heat-api組件實現OpenStack自然支持的REST API。該組件經過把API請求經由AMQP傳送給Heat engine來處理API請求。安全
Heat-api-cfn組件提供兼容AWS CloudFormation的API,同時也會把API請求經過AMQP轉發給heat engine。服務器
Heat-engine組件提供Heat最主要的協做功能。網絡
全部這些組件一般安裝在OpenStack的控制節點上,該節點同時也是Nova, Glance,Neutron等其餘服務的API服務器。然而,據我所知,並無客觀要求必要安裝這些服務在同一個節點上。與其餘多數的OpenStack服務相似,Heat也使用後臺數據庫來維護狀態信息。架構
既然如今你已經對Heat的架構也有一個大概瞭解,讓咱們來看一個我在本身的OpenStack環境裏建立並測試過的一個Heat template的例子(在Ubuntu 12.04上運行OpenStack Havana版本,使用KVM和VMware NSX)。下面是完整的template。函數
{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "Sample Heat template that spins up multiple instances and a private network (JSON)", "Resources" : { "heat_network_01" : { "Type" : "OS::Neutron::Net", "Properties" : { "name" : "heat-network-01" } },
"heat_subnet_01" : { "Type" : "OS::Neutron::Subnet", "Properties" : { "name" : "heat-subnet-01", "cidr" : "10.10.10.0/24", "dns_nameservers" : ["172.16.1.11", "172.16.1.6"], "enable_dhcp" : "True", "gateway_ip" : "10.10.10.254", "network_id" : { "Ref" : "heat_network_01" } } },
"heat_router_01" : { "Type" : "OS::Neutron::Router", "Properties" : { "admin_state_up" : "True", "name" : "heat-router-01" } },
"heat_router_01_gw" : { "Type" : "OS::Neutron::RouterGateway", "Properties" : { "network_id" : "604146b3-2e0c-4399-826e-a18cbc18362b", "router_id" : { "Ref" : "heat_router_01" } } },
"heat_router_int0" : { "Type" : "OS::Neutron::RouterInterface", "Properties" : { "router_id" : { "Ref" : "heat_router_01" }, "subnet_id" : { "Ref" : "heat_subnet_01" } } },
"instance0_port0" : { "Type" : "OS::Neutron::Port", "Properties" : { "admin_state_up" : "True", "network_id" : { "Ref" : "heat_network_01" }, "security_groups" : ["b0ab35c3-63f0-48d2-8a6b-08364a026b9c"] } },
"instance1_port0" : { "Type" : "OS::Neutron::Port", "Properties" : { "admin_state_up" : "True", "network_id" : { "Ref" : "heat_network_01" }, "security_groups" : ["b0ab35c3-63f0-48d2-8a6b-08364a026b9c"] } },
"instance0" : { "Type" : "OS::Nova::Server", "Properties" : { "name" : "heat-instance-01", "image" : "73669ac0-8677-498d-9d97-76af287bcf32", "flavor": "m1.xsmall", "networks" : [{ "port" : { "Ref" : "instance0_port0" } }] } },
"instance1" : { "Type" : "OS::Nova::Server", "Properties" : { "name" : "heat-instance-02", "image" : "73669ac0-8677-498d-9d97-76af287bcf32", "flavor": "m1.xsmall", "networks" : [{ "port" : { "Ref" : "instance1_port0" } }] } } } } |
view rawheat-json-example.json hosted with ❤ by GitHub
下面咱們一塊兒快速地過一下這個template。
若是你想使用JSON,那麼我推薦你收藏一個JSON檢查的網站,好比jsonlint.com
一旦你定義好Heat template,你可使用這個template經過Heat CLI或者dashboard來建立一個stack. 下面是個人一個stack在dashboard上的截圖。
仍是不錯的吧?你以爲呢?我但願這個Heat介紹對你有所幫助。我確實有計劃想在最近介紹一個OpenStack Heat的其餘方面,因此保持聯繫。若是有任何問題,更正,或者澄清,請不吝賜教。