Senlin服务为构建自动缩放解决方案提供了丰富的解决方案。
目录
Operations
CLUSTER_SCALE_OUT,CLUSTER_SCALE_IN操作是用于扩展集群的最简单的命令形式。另一方面,CLUSTER_RESIZE操作提供了更多选项来控制详细的集群扩展行为。这些操作都可以在有或没有策略附加到集群的情况下执行。Policies
- senlin.policy.scaling,可用于微调集群扩展操作。
- senlin.policy.deletion,可用于控制如何从集群中删除节点。
- senlin.policy.affinity,可用于控制如何强制执行节点亲和力或反亲和力。
- senlin.policy.region_placement,可用于在多个区域扩展集群。
- senlin.policy.zone_placement,可用于强制实现跨可用区的节点分布。
Receivers
Receiver提供了一个通道,可以从该通道向其发送来自外部监视软件或服务的信号或警报,从而可以自动执行缩放操作。
Autoscaling using Ceilometer/Aodh
创建VM集群
sample_server.yaml:
1 | type: os.nova.server |
创建配置文件。
1 | openstack cluster profile create --spec-file sample_server.yaml my_proflie |
创建集群。
1 | openstack cluster create --profile my_profile --desired-capacity 2 my_cluster |
这将创建一个在开始时创建2个节点的集群。为了方便起见,将集群ID设为环境变量。
1 | export MYCLUSTER_ID=10c80bfe-41af-41f7-b9b1-9c81c9e5d21f |
查看每个节点分配的IP地址。
1 | openstack cluster node show --details |
创建Receiver
下一步是为集群创建Receiver,以触发集群上的操作。通常为特定目的创建一个Receiver,因此出于不同的目的,可能需要创建多个Receiver。
创建一个Receiver,用于在每次触发该集群时将指定集群扩展两个节点。
1 | openstack cluster receiver create --action CLUSTER_SCALE_OUT --params count=2 --cluster my_cluster my_receiver |
对于Action参数,有很多选择:
- CLUSTER_SCALE_OUT
- CLUSTER_SCALE_IN
- CLUSTER_RESIZE
- CLUSTER_CHECK
- CLUSTER_UPDATE
- CLUSTER_DELETE
- CLUSTER_ADD_NODES
- CLUSTER_DEL_NODES
- NODE_CREATE
- NODE_DELETE
- NODE_UPDATE
- NODE_CHECK
- NODE_RECOVER
创建Receiver后,您可以检查其channel属性值以了解如何触发该Receiver。对于类型为webhook的Receiver(目前是默认和唯一受支持的类型),这意味着将检查alarm_url的值。为了方便起见,将该值导出到环境变量。
1 | export ALRM_URL="http://node1:8778/v1/webhooks/ba...5a/trigger?V=1&count=2" |
与上面的示例类似,可以为不同种类的集群操作或具有不同参数值的同一集群操作创建其他接收器。
创建Aodh告警
创建集群并准备好接收外部信号后,便可以继续使用部署的软件/服务来创建告警。以下命令使用aodh警报服务创建阈值警报,以便:
- aodh将评估指定集群中的CPU利用率(即cpu_util)指标;
- aodh将使用给定时间段(即此处的60秒)内的平均值计算CPU利用率;
- aodh将在每个周期结束时进行评估;
- aodh不会重复触发警报操作;
- aodh将基于指定的元数据进行度量标准聚合。
1 | aodh alarm create \ |
为了让aodh知道senlin注入到每个创建的每个VM服务器中的cluster_id元数据,可能需要在/etc/ceilometer/ceilometer.conf文件中添加以下行:
1 | reserved_metadata_keys = cluster_id |
还要注意,为确保每60秒至少评估一次CPU利用率的指标,需要在文件/etc/ceilometer/pipeline.yaml中更改cpu_source的interval值。可以将其从默认值600更改为60:
1 | sources: |
在集群节点上运行工作负载
在高CPU工作量下检查集群扩展的效果。现在,可以登录到每个集群节点并在其中运行一些高CPU的工作,以提高CPU利用率。例如:
1 | ssh cirros@10.0.0.9 |
当集群中的所有节点的CPU压力提高时,可以检查每个节点上的CPU利用率,最后继续下一步。
验证集群扩展
在启动集群节点上的CPU工作负载一段时间后,集群已自动扩展。将创建两个新节点并将其添加到集群。可以通过运行以下命令来验证:
1 | openstack cluster show $MYCLUSTER_ID |
可以使用以下命令来检查是否触发并执行了预期的操作:
1 | openstack cluster action list --filters target=$MYCLUSTER_ID |
Autoscaling with Heat
Heat中有Senlin资源类型,可以轻松实现功能全面的自动缩放解决方案的部署。
示例模板
在senlin目录下的heat-template项目中有一个示例模板,用于通过Heat创建Senlin弹性负载平衡集群。
下面的资源定义了一个security_group,用于连接到创建的负载均衡集群。
1 | security_group: |
以下资源定义了用于创建目标集群的配置文件。
1 | profile: |
下面的资源定义了创建至少有两个节点的Senlin集群。
1 | cluster: |
下面的两个资源定义了附加到已创建集群的scale_in_policy和scale_out_policy。事件的属性用于定义策略起作用的客观动作。将调整属性的类型设置为CHANGE_IN_CAPACITY时,集群在scale_out时将增加节点数,在scale_in时将减少节点数:
1 | scale_in_policy: |
下面的资源定义了要附加到目标集群的lb_policy。将策略附加到集群后,Senlin将通过调用neutron LBaas V2 API来自动创建负载均衡,pool和health_monitor,以实现负载平衡。
1 | lb_policy: |
以下两个资源定义了发生特定警报或事件时要触发的接收器(Receiver)。
1 | receiver_scale_out: |
以下资源定义了在收缩集群时选择要删除的候选节点的策略。
1 | deletion_policy: |
下面的两个资源定义了分别触发以上两个接收器的警报。使用LoadBalancer的平均传入字节速率作为触发缩放操作的指标。
1 | scale_in_alarm: |
部署步骤
在部署之前,请确保已在环境中安装并配置了neutron LBaas v2和ceilometer/Aodh。
第一步是使用以下命令生成密钥对:
1 | openstack keypair create heat_key |
第二步是创建Heat模板,方法是从Heat模板下载模板文件。
第三步是使用以下命令创建Heat Stack。
1 | openstack stack create test -t ./ex_aslb.yaml --parameter "key_name=heat_key" |