OpenStack Heat AutoScaling详解及实例代码
作者:lqh 发布时间:2023-07-28 21:15:58
OpenStack Heat AutoScaling
一、背景
Openstack的Heat是在H版之后加入的组件,旨在创建一套业务流程,更轻松的管理一个集群。集群内的虚拟机可以作为一个整体,统一的为客户提供服务。Heat中把功能定义成资源,在Heat中会用到Nova,Neutron,Ceilometer等组件,这些都可以看成是资源,通过模板文件来描述,模板文件可以是yaml格式,也可以是json格式,一般是yaml格式。
AutoScaling的概念最早出现在AWS,AutoScaling是一项Web服务,目的是根据用户定义的策略,时间表的运行状态检查启动或终止虚拟机,达到自动伸缩。
Openstack里的Auto Scale是由Heat和Ceilometer模块一起配合完成的。Ceilometer负责收集处理性能数据,一旦达到Heat模版里定义的阀值,就发告警信息给heat-engine,由heat-engine调动Heat模版里定义的其它的OpenStack资源实现auto scale。
二、Heat AutoScaling Resources
实现AutoScaling功能涉及到的资源如下:
1.AWS::AutoScaling::AutoScalingGroup
伸缩组是具有相同应用场景的实例的集合,定义了组内实例数的最大值和最小值,冷却时间等等。
注:冷却时间是指一个伸缩活动后的一段锁定时间,在这个时间内不能进行其他的伸缩活动。
语法如下:
{
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : [ String, ... ],
"Cooldown" : String,
"DesiredCapacity" : String,
"HealthCheckGracePeriod" : Integer,
"HealthCheckType" : String,
"InstanceId" : String,
"LaunchConfigurationName" : String,
"LoadBalancerNames" : [ String, ... ],
"MaxSize" : String,
"MetricsCollection" : [ MetricsCollection, ... ]
"MinSize" : String,
"NotificationConfigurations" : [ NotificationConfigurations, ... ],
"PlacementGroup" : String,
"Tags" : [ Auto Scaling Tag, ..., ],
"TargetGroupARNs" : [ String, ... ],
"TerminationPolicies" : [ String, ..., ],
"VPCZoneIdentifier" : [ String, ... ]
}
}
2.AWS::AutoScaling::LaunchConfiguration
伸缩配置定义了用于弹性伸缩的实例的配置。由AutoScalingGroup用于配置组内的实例。
语法如下:
{
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"AssociatePublicIpAddress" : Boolean,
"BlockDeviceMappings" : [ BlockDeviceMapping, ... ],
"ClassicLinkVPCId" : String,
"ClassicLinkVPCSecurityGroups" : [ String, ... ],
"EbsOptimized" : Boolean,
"IamInstanceProfile" : String,
"ImageId" : String,
"InstanceId" : String,
"InstanceMonitoring" : Boolean,
"InstanceType" : String,
"KernelId" : String,
"KeyName" : String,
"PlacementTenancy" : String,
"RamDiskId" : String,
"SecurityGroups" : [ SecurityGroup, ... ],
"SpotPrice" : String,
"UserData" : String
}
}
3.AWS::AutoScaling::ScalingPolicy
为auto scale group添加伸缩的策略,定义了具体的扩展或者收缩的操作,以及伸缩的数量。
语法如下:
{
"Type" : "AWS::AutoScaling::ScalingPolicy",
"Properties" : {
"AdjustmentType" : String,
"AutoScalingGroupName" : String,
"Cooldown" : String,
"EstimatedInstanceWarmup" : Integer,
"MetricAggregationType" : String,
"MinAdjustmentMagnitude" : Integer,
"PolicyType" : String,
"ScalingAdjustment" : Integer,
"StepAdjustments" : [ StepAdjustments, ... ]
}
}
此外,Heat中AutoScaling还需配合OS::Ceilometer::Alarm使用,由Alarm监控实例的运行状况,一旦超过阈值,则会产生告警。
三、 Heat AutoScaling Template
下面是一个简单的例子:
heat_template_version: 2013-05-23
description: Heat template for autoscaling
parameters:#定义一些变量
flavor:
type: string
default: m1.small
image:
type: string
default: 1a2b3c4f-1a2b-3c4f-5d6e-4130ff5203de
availability_zone:
type: string
default: nova
alarm_scaleout_threshold:#阈值
type: number
default: 80
alarm_scalein_threshold:#阈值
type: number
default: 20
resources:
neutron_network:
type: OS::Neutron::Net
properties:
name: {get_param: "OS::stack_name"}
neutron_subnet:
type: OS::Neutron::Subnet
properties:
name: {get_param: "OS::stack_name"}
network_id: { get_resource: neutron_network }
cidr: '192.168.111.0/24'
gateway_ip: '192.168.111.1'
allocation_pools:
- start: '192.168.111.2'
end: '192.168.111.254'
neutron_router:
type: OS::Neutron::Router
properties:
name: {get_param: "OS::stack_name"}
add_router_interface:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: neutron_router }
subnet_id: { get_resource: neutron_subnet }
nova_server_security_group:
type: OS::Neutron::SecurityGroup
properties:
description: 'security group for VM'
name: {get_param: "OS::stack_name"}
rules: [
{direction: 'ingress',
remote_ip_prefix: '0.0.0.0/0',
port_range_min: 0,
port_range_max: 30000,
ethertype: IPv4,
protocol: 'tcp'},
{direction: 'egress',
remote_ip_prefix: '0.0.0.0/0',
port_range_min: 0,
port_range_max: 65535,
ethertype: 'IPv4',
protocol: 'tcp'},
{direction: 'egress',
remote_ip_prefix: '0.0.0.0/0',
port_range_min: 0,
port_range_max: 65535,
ethertype: 'IPv4',
protocol: 'udp'},
{direction: 'ingress',
remote_ip_prefix: '0.0.0.0/0',
port_range_min: null,
port_range_max: null,
ethertype: 'IPv4',
protocol: 'icmp'},
{direction: egress,
remote_ip_prefix: '0.0.0.0/0',
port_range_min: null,
port_range_max: null,
ethertype: 'IPv4',
protocol: 'icmp'}
]
launch_config:#Scale group中的实例的配置
type: AWS::AutoScaling::LaunchConfiguration
properties:
ImageId: { get_param: image }#实例使用的image
InstanceType: { get_param: flavor }#实例使用的flavor
SecurityGroups: [ get_resource: nova_server_security_group ]
UserData: |#实例启动时运行的脚本
#!/bin/bash
passwd root << EOD
123456
123456
EOD
server_group:#伸缩组
type: AWS::AutoScaling::AutoScalingGroup
properties:
AvailabilityZones: []
Cooldown: '60'#冷却时间
LaunchConfigurationName: { get_resource: launch_config }#组中实例的配置
MinSize: '1'#最小实例数
MaxSize: '4'#最大实例数
VPCZoneIdentifier: [ get_resource: neutron_subnet ]
scaleout_policy:#向上扩展的策略
type: AWS::AutoScaling::ScalingPolicy
properties:
AdjustmentType: ChangeInCapacity
#heat 支持三种调整方式:change_in_capacity (new = current + adjustment), #exact_capacity (new = adjustment), percent_change_in_capacity (在current 的基#础上上按照 adjustment 的 百分比调整)
AutoScalingGroupName: { get_resource: server_group }
ScalingAdjustment: '1'#每次的调整量,即增加一个实例
scalein_policy:#向下收缩的策略
type: AWS::AutoScaling::ScalingPolicy
properties:
AdjustmentType: ChangeInCapacity
AutoScalingGroupName: { get_resource: server_group }
ScalingAdjustment: '-1'#每次的调整量,即减少一个实例
neutron_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: neutron_network }
fixed_ips:
- subnet_id: { get_resource: neutron_subnet }
security_groups: [ { get_resource: nova_server_security_group } ]
alarm_scaleout: #定义一个 ceilometer alarm
type: OS::Ceilometer::Alarm
properties:
description: Scale-up if the average CPU > 80% for 10 minute
meter_name: cpu_util #监控虚拟机的 cpu_util
statistic: avg #statistic 的计算方法为 avg 即平均值法
period: 600 #统计周期
evaluation_periods: 1 #连续几个周期才算有效
repeat_actions: true
threshold: { get_param: alarm_scaleout_threshold }# cpu_util 的阈值
alarm_actions: #该告警在alarm 状态时的 action。
- {get_attr: [scaleout_policy, AlarmUrl]}
matching_metadata: {'metadata.user_metadata.groupname': {get_resource: 'server_group'}}
comparison_operator: gt #检测值和阈值的比较方式为 gt 即大于
alarm_scalein:
type: OS::Ceilometer::Alarm
properties:
description: Scale-down if the average CPU < 20% for 10 minutes
meter_name: cpu_util
statistic: avg
period: 600
evaluation_periods: 1
repeat_actions: true
threshold: { get_param: alarm_scalein_threshold }
alarm_actions:
- {get_attr: [scalein_policy, AlarmUrl]}
matching_metadata: {'metadata.user_metadata.groupname': {get_resource: 'server_group'}}
comparison_operator: lt#检测值和阈值的比较方式为 lt 即小于
outputs:
scale_in_url:
value: { get_attr: [ scalein_policy, AlarmUrl ] }
scale_out_url:
value: { get_attr: [ scaleout_policy, AlarmUrl ] }
这个stack的功能是监控实例的CPU使用率,当CPU使用率大于80%时,将会启动一个新的实例,当CPU使用率小于20%,将会减少一个实例。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/heaven619/article/details/53420220
猜你喜欢
- 输入字母验证码,俺觉得特烦,特别还要输入大写字母。于是找到文件并修改成数字验证码。修改文件 验证码文件位置include\validatei
- Windows2000 域名解析是基于动态DNS,动态DNS的实现是基于RFC 2136基础上的。在Windows 2000下,动态DNS是
- 使用vsftpd(linux)架设的ftp服务器,如何解决向其中拷贝多层文件夹的文件时出现的550错误?因为要为我的本本重装系统,并且要重新
- 什么是友情链接,友情链接的作用和好处: 友情链接是一种网站之间的简单合作形式,即分别在自己的网站上以文字、图片或其他形式的载体链接到对方的网
- 一、下载树莓派系统镜像文件下载链接:https://www.raspberrypi.com/software/raspberry-pi-de
- 务必记得备份自己的数据,数据无价!!!电脑型号:Thinkpad E550固态装了win10,机械硬盘打算装Ubuntu16.04固态硬盘格
- 当您忘记了您的密码时需要及时找回来,下面我们给出了找回账户密码的教程Godaddy找回账户密码教程1.进入GODADDY主页www.goda
- 我是一个菜鸟站长。做站时间不长。满打满算,刚刚8个月,也想一些前辈说的一样,每天晚上12点以后睡觉。早上起来的第一件事情就是 去百度site
- 最近在学习k8s,需要用三台centOS 虚拟机来搭建环境,因此我使用VMware安装了三台centOS 7 的镜像,这个过程踩了很多坑,比
- 10月22日消息,金山软件今天宣布,旗下3D武侠网游《剑侠情缘网络版叁》(简称《剑网3》)将于今日掀起公测后最大规模的内容更新,届时50级到
- 每一个人的建站经验与任何一个人都是不同的,这取决于网站的定位与性质。但是,很多关键的步骤都大同小异,只是所花的时间长短不一而已。
- 对于提高自己站点的访问量,最有效的办法是,在做好站点的同时,不放过每一次的宣传机会,永远记住,即使是滴水也能装满瓶子,而当我们容易看到某些经
- 常常在些站长论坛看到这样的求助帖子“为什么我的站是原创文章搜索收录才几页啊?这是什么原因呀?哪位高手帮我分析分析啊!”其实造成网站收录少的原
- Google Adsense最新的动作挺频繁的。继取消地区的Adsense推介费用、广告换成大字体、产品名称改成中文名。现在推出了一个可能会
- 一、作业执行容错Flink 的错误恢复机制分为多个级别,即 Execution 级别的 Failover 策略和 ExecutionGrap
- 内容摘要:作为一款经典的FTP服务器软件,SERV-U一直被大部分管理员所使用,它简单的安装和配置以及强大的管理功能的人性化也一直被管理员们
- 本文为大家分享了Ubuntu虚拟机多网卡配置,供大家参考,具体内容如下1、场景说明 系统平台:Ubuntu16.04 服务器:V
- 1、禁用网络管理器# chkconfig NetworkManager off # service NetworkManager stop2
- SupeSite 7.0是康盛创想(Comsenz)公司于2009年3月推出的一款社区CMS产品,作为Comsenz旗下的社区产品SupeS
- Web Game,顾名思义就是基于Web网络的在线多人游戏。我们接触最多的也就是这种基于Web浏览器的虚拟社区的游戏,说起sns的web g