OpenStack-Heat中的Autoscaling
OpenStack-Heat中的Autoscaling
在Heat中完全使用aws的语法创建一套autoscaling的template。流程: Create LaunchConfig (Create basic instance, send mem status to ALARM) -> Create ASGroup (Define instance num range) -> Create ScaleUpPolicy (+1 instance when mem_alarm_high) -> Create MEMAlarmHigh (Monitor mem status) -> Create ScaleDownPolicy (-1 instance when mem_alarm_low) -> Create MEMAlarmLow (monitor mem status)
Template模板: "ASGroup" : { "Type" : "AWS::AutoScaling::AutoScalingGroup", "Properties" : { "AvailabilityZones" : ["nova"], "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, "MinSize" : "1", "MaxSize" : "10" } }, "ScaleUpPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "ASGroup" }, "Cooldown" : "60", "ScalingAdjustment" : "1" } }, "MEMAlarmHigh": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Scale-up if MEM > 70% for 1 minute", "MetricName": "MemoryUtilization", "Namespace": "system/linux", "Statistic": "Average", "Period": "60", "EvaluationPeriods": "1", "Threshold": "70", "AlarmActions": [ { "Ref": "ScaleUpPolicy" } ], "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": { "Ref": "ASGroup" } } ], "ComparisonOperator": "GreaterThanThreshold" } }, "ScaleDownPolicy" : { "Type" : "AWS::AutoScaling::ScalingPolicy", "Properties" : { "AdjustmentType" : "ChangeInCapacity", "AutoScalingGroupName" : { "Ref" : "ASGroup" }, "Cooldown" : "60", "ScalingAdjustment" : "-1" } }, "MEMAlarmLow": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Scale-down if MEM < 30% for 1 minute", "MetricName": "MemoryUtilization", "Namespace": "system/linux", "Statistic": "Average", "Period": "60", "EvaluationPeriods": "1", "Threshold": "30", "AlarmActions": [ { "Ref": "ScaleDownPolicy" } ], "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": { "Ref": "ASGroup" } } ], "ComparisonOperator": "LessThanThreshold" } }, "LaunchConfig" : { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "files" : { "/etc/cfn/cfn-credentials" : { "content" : { "Fn::Join" : ["", [ "AWSAccessKeyId=", { "Ref" : "LSFKeys" }, "\n", "AWSSecretKey=", {"Fn::GetAtt": ["LSFKeys", "SecretAccessKey"]}, "\n" ]]}, "mode" : "000400", "owner" : "root", "group" : "root" }, "/tmp/stats-crontab.txt" : { "content" : { "Fn::Join" : ["", [ "MAIL=\"\"\n", "\n", "* * * * * /opt/aws/bin/cfn-push-stats --watch ", { "Ref" : "MEMAlarmHigh" }, " --mem-util\n", "* * * * * /opt/aws/bin/cfn-push-stats --watch ", { "Ref" : "MEMAlarmLow" }, " --mem-util\n" ]]}, "mode" : "000600", "owner" : "root", "group" : "root" } } } } }, "Properties": { "ImageId": "rhel6u4", "InstanceType": "m1.small", "KeyName": "poc", "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -v\n", "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r VMWARELaunchConfig ", " --region ", { "Ref" : "AWS::Region" }, "\n", "crontab /tmp/stats-crontab.txt\n", ]]}} } } },
评论暂时关闭