|
1. heat编排是什么? 我们知道在openstack中比较核心的组件有nova(计算)、neutron(网络)、cinder(存储)、glance(镜像)等,这些组件相互协作,构成了openstack这个云平台的基础。而heat编排技术位于这些基础组件之上,为openstack提供更加智能和高级的功能,这里引用官方对heat的解释:Heat is a service to orchestrate composite cloud applications using a declarative template format through an OpenStack-native REST API。我们从中可以看出,heat是一种利用声明式的模板语言通过调用上述核心组件的REST API完成对复杂云计算应用实现自动部署的技术。 2. heat编排的作用简化重复的云应用部署工作 有过openstack实际操作的朋友可能知道,当我们想要利用openstack中的云主机为开发的应用提供服务器端运行环境的时候,一般的步骤是,首先创建网络、网关及路由,然后在该网络上面创建虚拟机,虚拟机创建成功之后,进入虚拟机中安装一些必须的软件并部署我们的应用。那么从中我们可以看出,当需要的云主机数量较少时,我们可以一个一个重复的手动进行配置,当需要更多的云主机时,那么一个一个手动去配置如此多的云主机环境,显然不现实。而此时我们就可以利用heat提供的编排模板语言将云主机的整个部署过程,甚至云主机创建成功后需要进行的配置工作,编写一个编排模板文件。当需要部署一个这样的环境时,我们仅需要将模板提交给heat,heat后端便会根据我们的编排模板自动实现云主机的创建及相关的部署工作。实现集群规模的自动伸缩功能 heat 目前提供了一种autoscaling的弹性伸缩功能,可实现对openstack云主机集群的弹性伸缩,该功能的实现需要与ceilometer(监控系统)进行协作完成,通过该功能可实现根据集群的各种指标(cpu使用率,磁盘读写速率、出入网流量等)自动完成对集群规模进行调整,帮助减少不必要的运营成本。3. heat 编排原理heat架构从heat的架构图-1中,我们可以看出,heat的实质还是对openstack基础组件的调用,只不过在调用这个基础组件之前进行了一些业务逻辑的封装和判断工作。 2 x/ @+ `7 G M
heat 模板 heat目前提供两种模板格式,一种是兼容亚马逊的CFN 模板格式,一种是heat 开发团队自行开发的一种模板格式,HOT模板,本文中主要讲解HOT模板。 hot模板被定义在YAML格式文档中,基本模板格式如下:
) N& i7 I' `1 g* I) k U
) k0 k& c+ t0 S) R& R5 M2 _
) h) B: o6 p, d7 q* W$ q' y, E: g7 K! N
- heat_template_version: 2015-04-30
- description:
- # a description of the template
- parameter_groups:
- # a declaration of input parameter groups and order
- parameters:
- # declaration of input parameters
- resources:
- # declaration of template resources
- outputs:
- # declaration of output parameters
& x( x" s: n) @
其中:
/ {0 c8 H% X4 M) ^3 Q! o0 xheat_template_version:定义了该模板的版本号,每种模板版本所提供的功能存在一些差异,在使用时需要注意;
4 s0 J. @- p1 J+ L# l8 O; {description :主要是用于说明该模板的作用;
+ [) e1 E1 K2 m( ^* {0 ^: V, v& tparameters :预先定义的一些参数,可在模板中多处使用;
5 L6 _1 F' x2 }9 nparameter_groups 对参数进行分组; " R4 c1 Y1 R- b% Z
resources :编排中需要使用到的资源,在heat中对基础组件(nova、neutron、cinder、glance)提供的各种服务抽象为资源, 1 D7 p0 A, v# }5 w
将相关的资源定义在该处后,heat后端会对这些资源按照一定的业务流程进行创建和管理;2 j* [3 e) ^2 T( L6 y) j; \: T
# J/ T0 [% J) I8 ?, `, [! V; M
heat中各服务 1 I# C! l; y! B1 W$ n1 K" R! @
heat中主要有heat-api、heat-api-cfn、heat-engine、heat-manage,各组件的作用如下: heat-api heat-api 提供了其他组件对heat的访问REST API,对heat的访问首先会被heat-api接收,在经过一些验证后,通过rpc传递给heat-engine进行时间的处理操作; heat-api-cfn heat-api-cfn提供的功能类似于heat-api,该服务是为了兼容亚马逊的CloudFormation而设计的,此外该服务还提供了autoscaling中alarm action请求的接收工作,最终通过rpc传递给heat-engine进行具体的操作; -heat-engine heat-engine是heat中最为核心的服务,其中包括了heat中所提供的所有功能,如编排模板的解析处理及对openstack基础组件的调用功能,均在此服务中完成; heat-manage heat-manage 主要提供了对heat数据库的同步及管理工作; ' a% r1 F7 M2 N9 n% S0 _
4. 简单举例下面我们通过编写一个简单的编排模板来对文章做个简单总结,通过下面的编排模板,我们可以创建三个虚拟机类型均为m1.small的云主机: - heat_template_version: 2013-05-23
- description: >
- Template to create multiple instances.
- parameters:
- image_id:
- type: string
- description: Image used for servers
- key_name:
- type: string
- description: Name of SSH key to connect to the servers
- instance_type:
- type: string
- description: flavor used by the servers
- default: m1.small
- constraints:
- - custom_constraint: nova.flavor
- num_instances:
- type: number
- description: Number of instances to create
- default: 1
- resources:
- server_group:
- type: OS::Heat::InstanceGroup
- properties:
- LaunchConfigurationName: { get_resource: server_config }
- AvailabilityZones: []
- Size: { get_param: num_instances }
- server_config:
- type: AWS::AutoScaling::LaunchConfiguration
- properties:
- ImageId: { get_param: image_id }
- InstanceType: { get_param: instance_type}
- KeyName: { get_param: key_name }
- outputs:
- server_group_addresses:
- value: { get_attr: [server_group, InstanceList }8 a) u0 P$ W# ]. B
; c' s* Q( g5 p, ` J5 P
|