Heat中的Autoscaling
Heat中的Autoscaling
Heat使用两种方式获取vm中的一些资源使用数据,一种是openstack服务ceilometer,另一种是vm中的heat-cfntools工具。本文介绍前一种的使用方法。 目前,ceilometer的监控功能还比较弱,在kvm环境是通过libvirt命令监控vm的相关信息,只能监控有限的几个元素,比如cpu使用率,以及粗略的memory使用率(这里监控的是实际分配给vm的memory,而不是vm真正的memory使用率)。 注意,本例中使用了OS::Heat::AutoScalingGroup类型,这种类型并不支持loadbalancer,如果需要使用loadbalance,请使用AWS::AutoScaling::AutoScalingGroup代替。流程: Create WebServerGroup (Create basic instance, send cpu status to heat) -> Createweb_server_scaleup_policy (+1 instance when cpu_alarm_high) -> Create cpu_alarm_high (Monitor cpu status) -> Create web_server_scaledown_policy (-1 instance when cpu_alarm_low) -> Create cpu_alarm_low (monitor cpu status)
Template: web_server_scaleup_policy:
type: OS::Heat::ScalingPolicy
properties:
adjustment_type: change_in_capacity
auto_scaling_group_id: {get_resource: web_server_group}
cooldown: 60
scaling_adjustment: 1
web_server_scaledown_policy:
type: OS::Heat::ScalingPolicy
properties:
adjustment_type: change_in_capacity
auto_scaling_group_id: {get_resource: web_server_group}
cooldown: 60
scaling_adjustment: -1
cpu_alarm_high:
type: OS::Ceilometer::Alarm
properties:
description: Scale-up if the average CPU > 50% for 1 minute
meter_name: cpu_util
statistic: avg
period: 60
evaluation_periods: 1
threshold: 50
alarm_actions:
- {get_attr: [web_server_scaleup_policy, alarm_url]}
matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}
comparison_operator: gt
cpu_alarm_low:
type: OS::Ceilometer::Alarm
properties:
description: Scale-down if the average CPU < 15% for 10 minutes
meter_name: cpu_util
statistic: avg
period: 600
evaluation_periods: 1
threshold: 15
alarm_actions:
- {get_attr: [web_server_scaledown_policy, alarm_url]}
matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}
comparison_operator: lt
web_server_group:
type: OS::Heat::AutoScalingGroup
properties:
min_size: 1
max_size: 3
resource:
type: OS::Nova::Server
properties:
user_data:
str_replace:
template: |
#!/bin/bash -v
这里创建了一个ServerGroup,instance个数为1~3个,然后根据alarm消息,来执行ScalePolicy,执行+1或者-1 instance的操作。
评论暂时关闭