OpenStack Heat服务介绍 (三)

原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://zhenhua2000.blog.51cto.com/3167594/1335468

Heat是OpenStack中的Orchestration services,也就是应用程序的配置管理。

Heat用声明式的方法来管理公有云或者私有云中的应用程序。它和其他OpenStack的服务类似,对外提供ReSTful接口,但除此之外,它定义了一套配置管理的模版。Heat的模版才是Heat的核心所在。


因为OpenStack开发Heat一开始的目的是为了能支持AWS中的CloudFormation模版,所以很多术语和概念都来源于AWS的CloudFormation(http://awsdocs.s3.amazonaws.com/AWSCloudFormation/latest/cfn-ug.pdf


让我们先从CloudFormation格式的getting_started.template 来介绍其中的几个关键概念。

https://github.com/openstack/heat-templates/blob/master/cfn/F17/getting_started.template


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
   "AWSTemplateFormatVersion"  "2010-09-09" ,
   "Parameters"  : {
     "KeyName"  : {
       "Description"  "Name of an existing EC2 KeyPair to enable SSH access to the instance" ,
       "Type"  "String"
     }
   },
   "Resources"  : {
     "MyInstance"  : {
       "Type"  "AWS::EC2::Instance" ,
       "Properties"  : {
         "KeyName"  : {  "Ref"  "KeyName"  },
         "ImageId"  "F17-x86_64-cfntools" ,
         "InstanceType" "m1.small" ,
         "UserData"  : {  "Fn::Base64"  "80"  }
       }
     }
   },
   "Outputs"  : {
     "InstanceIp"  : {
       "Value"  : {  "Fn::Join"  : [ "" , [ "ssh ec2-user@" ,
                                      { "Fn::GetAtt" : [ "MyInstance" ,
                                      "PublicIp" ]}]]},
       "Description"  "My ssh command"
     }
   }
}

AWSTemplateFormatVersion定义了Template的版本信息。

Parameters是用户在创建Stack时可以输入的参数类型。

Resources中,MyInstance是一个EC2的Instance,它的属性包括SSH的Key,Glance中的Image名称,Instance的Flavor类型,还有允许传给虚拟机的用户参数。

Outputs中定义了创建Stack后的输出。Instance的Ip值是从MyInstance中得到PublicIp值。


Heat中的基本术语

1. 栈。栈是CloudFormation中管理一组资源的基本单位。一个栈往往对应与一个应用程序。在Heat自己给出的例子中,WordPress就是一个web应用,用它的配置文件可以创建一个栈实例。

2. 资源。一个栈可以拥有很多资源, 资源是底层服务的抽象。CPU,memory,disk,网络等都可以看作是资源。资源和资源之间会存在依赖关系。Heat在创建栈的时候会自动解析依赖关系,按顺序创建资源。从Havana开始Heat能并行的创建没有依赖关系的资源。


161422593.png


理想情况下,Heat允许你象写代码那样来管理你的应用,你可以把Heattemplate保存在版本管理器中,当你修改了模版的内容,应用的配置也会自动做出调整。当然,这是理想情况。。。


Heat模版

Heat模版和CloudFormation模版的一个很大不同是格式。AWS的CloudFormation采用的是JSON格式,它的一个缺点是没办法插入注释。Heat采用Yaml格式来克服这一缺点。另一个好处是解析不同版本的Yaml文件更为方便。因为Yaml是JSON格式的超集,JSON格式的文件可以无损转成Yaml格式。下面,让我们先来看一个Heat模版的例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Parameters:
   ssh_key_name:
Type: String
     Description:  ssh  keypair name
   image_name:
     Type: String
     Description: The image to boot
Resources:
   my_server:
     Type: OS::Nova::Server
     Properties:
       flavor: m1.small
       key_name: { "Ref" "ssh_key" }
       block_device_mapping:
         device_name: vda
         volume_id: { "Ref" "my_vol" }
   my_vol:
     Type: OS::Cinder::Volume
     Properties:
       size: 20
       image: { "Ref" "image_name" }
Outputs:
   server_ip:
     Description: The server IP
     Value: { "Fn::GetAtt" :
                 [ "my_server" ,
                  "first_address" ]}


模版中有四个关键段:

Parameters(可选):定义用户在创建stack需要输入的参数。

Mappings (可选):定义一组静态 Key/ValuePair。用Fn::FindInMap可以查找对应的值。

Resources (必填):定义你的应用所依赖的Resources,以及Resources之间的关系。比如你的应用依赖于哪些包,该如何配置网络,需要的CPU,Memory多少等等。

Outputs (可选): 描述给用户的返回值。


所有的Resources都用通用的接口。

一些可选或必填的属性:用来配置这些资源。

一些输出属性:通过内置函数,如Fn:GetAtt,来得到的属性。


资源之间可以建立起树状的依赖关系。下面是一个典型的Autoscaling例子,用Heat的模版表示会是这样

161928706.png


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Resources:
   MEMAlarmHigh:
     Type: AWS::CloudWatch::Alarm
     Properties:
       AlarmDescription: Scale-up  if  MEM > 50%  for  1 minute
       MetricName: MemoryUtilization
       Namespace: system /linux
       Statistic: Average
       Period:  '60'
       EvaluationPeriods:  '1'
       Threshold:  '50'
       AlarmActions:
       - {Ref: WebServerScaleUpPolicy}
       Dimensions:
       - Name: AutoScalingGroupName
         Value: {Ref: WebServerGroup}
       ComparisonOperator: GreaterThanThreshold
   WebServerScaleUpPolicy:
     Type: AWS::AutoScaling::ScalingPolicy
     Properties:
       AdjustmentType: ChangeInCapacity
       AutoScalingGroupName: {Ref: WebServerGroup}
       Cooldown:  '60'
       ScalingAdjustment:  '1'
   WebServerGroup:
     Type: AWS::AutoScaling::AutoScalingGroup
     Properties:
       AvailabilityZones: { 'Fn::GetAZs' '' }
       LaunchConfigurationName: {Ref: LaunchConfig}
       MinSize:  '1'
       MaxSize:  '3'
       LoadBalancerNames:
       - {Ref: ElasticLoadBalancer}
   ElasticLoadBalancer:
     Type: AWS::ElasticLoadBalancing::LoadBalancer
     Properties:
       ...
   LaunchConfig:
     Type: AWS::AutoScaling::LaunchConfiguration
     Metadata:
       ...
     Properties:


大家可以看到Resource之间通过{Ref:}关键字相互联系了起来。


Heat通过AWS::AutoScaling::AutoScalingGroup来支持Autoscaling。当新的VM起来的时候,Scaling Group可以同时更新Load balancer的配置来加入新的VM信息。


Providers 和 Environments是Havana release中增加的两个features。Providers用来定义用户自定义的Resources,  Providers的语法和Heat内置支持的Resources语法格式完全一样。Environments用来覆盖template中的部分内容,比如基本环境的设置。理想的情况是用一组providertemplate来部署你的应用(每个provider template定义一个应用),用一个environmenttemplate来定义一个云的基础架构。这样通过选择provider模版和environment模版就能在不同的云环境下使用。


目前Heat还在开发自己的模版格式HOT (HeatOrchestration Template),在Heat的模版仓库中已经包含了HOT模版的例子,更多的例子可以看这里:

https://github.com/openstack/heat-templates/

本文出自 “专注Linux开发” 博客,请务必保留此出处http://zhenhua2000.blog.51cto.com/3167594/1335468

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值