国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

OpenStack Heat AutoScaling詳解及實例代碼

2024-09-01 13:49:29
字體:
供稿:網(wǎng)友

OpenStack Heat AutoScaling

一、背景

Openstack的Heat是在H版之后加入的組件,旨在創(chuàng)建一套業(yè)務(wù)流程,更輕松的管理一個集群。集群內(nèi)的虛擬機可以作為一個整體,統(tǒng)一的為客戶提供服務(wù)。Heat中把功能定義成資源,在Heat中會用到Nova,Neutron,Ceilometer等組件,這些都可以看成是資源,通過模板文件來描述,模板文件可以是yaml格式,也可以是json格式,一般是yaml格式。
AutoScaling的概念最早出現(xiàn)在AWS,AutoScaling是一項Web服務(wù),目的是根據(jù)用戶定義的策略,時間表的運行狀態(tài)檢查啟動或終止虛擬機,達(dá)到自動伸縮。

Openstack里的Auto Scale是由Heat和Ceilometer模塊一起配合完成的。Ceilometer負(fù)責(zé)收集處理性能數(shù)據(jù),一旦達(dá)到Heat模版里定義的閥值,就發(fā)告警信息給heat-engine,由heat-engine調(diào)動Heat模版里定義的其它的OpenStack資源實現(xiàn)auto scale。

二、Heat AutoScaling Resources

實現(xiàn)AutoScaling功能涉及到的資源如下:

1.AWS::AutoScaling::AutoScalingGroup

伸縮組是具有相同應(yīng)用場景的實例的集合,定義了組內(nèi)實例數(shù)的最大值和最小值,冷卻時間等等。
注:冷卻時間是指一個伸縮活動后的一段鎖定時間,在這個時間內(nèi)不能進(jìn)行其他的伸縮活動。

語法如下:

{ "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用于配置組內(nèi)的實例。

語法如下:

{  "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添加伸縮的策略,定義了具體的擴展或者收縮的操作,以及伸縮的數(shù)量。

語法如下:

{  "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監(jiān)控實例的運行狀況,一旦超過閾值,則會產(chǎn)生告警。

三、 Heat AutoScaling Template

下面是一個簡單的例子:

heat_template_version: 2013-05-23description: Heat template for autoscalingparameters:#定義一些變量 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: 20resources: 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'#最小實例數(shù)   MaxSize: '4'#最大實例數(shù)   VPCZoneIdentifier: [ get_resource: neutron_subnet ] scaleout_policy:#向上擴展的策略  type: AWS::AutoScaling::ScalingPolicy  properties:   AdjustmentType: ChangeInCapacity#heat 支持三種調(diào)整方式:change_in_capacity (new = current + adjustment), #exact_capacity (new = adjustment), percent_change_in_capacity (在current 的基#礎(chǔ)上上按照 adjustment 的 百分比調(diào)整)   AutoScalingGroupName: { get_resource: server_group }   ScalingAdjustment: '1'#每次的調(diào)整量,即增加一個實例 scalein_policy:#向下收縮的策略  type: AWS::AutoScaling::ScalingPolicy  properties:   AdjustmentType: ChangeInCapacity   AutoScalingGroupName: { get_resource: server_group }   ScalingAdjustment: '-1'#每次的調(diào)整量,即減少一個實例 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 #監(jiān)控虛擬機的 cpu_util   statistic: avg #statistic 的計算方法為 avg 即平均值法   period: 600 #統(tǒng)計周期   evaluation_periods: 1 #連續(xù)幾個周期才算有效   repeat_actions: true   threshold: { get_param: alarm_scaleout_threshold }# cpu_util 的閾值   alarm_actions: #該告警在alarm 狀態(tài)時的 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的功能是監(jiān)控實例的CPU使用率,當(dāng)CPU使用率大于80%時,將會啟動一個新的實例,當(dāng)CPU使用率小于20%,將會減少一個實例。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 苍南县| 兴隆县| 阳朔县| 常德市| 大悟县| 全州县| 河东区| 辰溪县| 中卫市| 图片| 兴和县| 兴化市| 西峡县| 中牟县| 扬州市| 苍山县| 颍上县| 沈阳市| 商水县| 贺兰县| 益阳市| 镇原县| 郸城县| 马尔康县| 博爱县| 渝北区| 秦皇岛市| 咸宁市| 贵港市| 阳春市| 张家川| 怀化市| 石泉县| 金塔县| 伊宁县| 津市市| 中宁县| 阿鲁科尔沁旗| 岐山县| 江永县| 仁布县|