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的操作。

相关内容