zl程序教程

您现在的位置是:首页 >  其它

当前栏目

使用 Container 进行 Auto Scaling Group 最终曲

进行 group Auto container 最终 使用
2023-09-14 09:12:59 时间

使用 Container 进行 Auto Scaling Group 最终曲

透过 ECS Cluster 可以顺利建立一个丛集,里面有两台 EC2 实例,并执行 4 个 Containers的任务,接下来要执行的就是自动扩缩管理,请特别注意,自动扩缩管理的对象可以是任务(对应到的就是 container ),也可以是主机 (对应到的是 EC2 实例),先前介绍的都是以 EC2 实例为主,而 ECS 这边介绍的则是会探讨如何以 task 为管理对象。复习一下 AWS 自动扩缩架构,主要是由三个主要服务所组成,然而最主要的驱动服务是 CloudWatch 警示 (Alarm),先建立 CloudWatch 警示,而 CloudWatch 所监督目标就是 ELB (Elastic Load Balancing),再来设定扩缩政策,然而扩缩政策分成目标追踪 (target tracking)、步进 (Step) 与简单 (Simple) 三种不同类型,最能够弹性设定的扩缩政策是步进扩缩政策,可以依照不同的指标来进行调整,最后在新增实例的时候会依照启动组态 (Launch Configuration)的设定,放在目标群 (Target Group)中。

AWS 自动扩展或缩减架构
图 1. AWS 自动扩展或缩减架构

我们希望扩缩政策为:

  • 每个任务的联机请求数(RequestCountPerTarget) > 100 时增加 1 个新任务
  • 100 > 联机请求数 > 200 时增加 3 个新任务
  • 联机请求数 < 50 时减少 50% 个任务
  • 联机请求数 < 20 时减少 90% 个任务

设定 CloudWatch 警示

在 CloudWatch 控制台,按下右方功能选单警示,按下建立警示后,我们建立两个警示一个是新增实例 (Scale out),阈值是 RequestCountPerTarget > 100,一个是减少实例 (Scale In),阈值是 RequestCountPerTarget < 50。建立指标有四个步骤,分别如下:

步骤 1. 指定指标和条件

指标值设定为 Singapore > 全部 > ApplicationELB > 每个 AppELB、每个 TG 指标 > RequestCountPerTarget ,要注意要确定看到上面的图型有数据才能确定已经正确找到指标值,因为有时候会有很多个 AppELB 实体,所以需要去找一下 ALB ARN 确认一下

设定 RequestCountPerTarget 指标值
图 2. 设定 RequestCountPerTarget 指标值

因为需要知道 1 分钟内有多少个请求,所以需要把_统计数据_从平均数改成总和,期间 5 分钟改成 1 分钟。

设定 RequestCountPerTarget 图形化指针
图 3. 设定 RequestCountPerTarget 图形化指针

CloudWatch Alarm 指定指标
图 4. CloudWatch Alarm 指定指标

条件
阈值类型 : 静态
每当 RequestCountPerTarget 为 : 大于 > 阈值
定义阈值 : 100
要发出警示的数据点 : 1 出于 1 # 这个意思是第一个 1 是得到的数据数,第二个 1 是采样数据的次数,举例来说,如果设定 1 出于 2,表示采样 2 次,只要有一次的 RequestCountPerTarget > 100,就会发出警示

CloudWatch Alarm 指定条件
图 5. CloudWatch Alarm 指定条件

步骤 2. 设定动作
记得移除预设的通知动作,不移除的话也可以,要指定 email 以及到 指定的 email 去订阅 SNS (Simple Notification Service) 主题。

移除 CloudWatch Alarm 预设通知动作
图 6. 移除 CloudWatch Alarm 预设通知动作

步骤 3. 新增名称和描述

警示名称: ithomeRequestPerTargetOutAlarmforECS
警示描述 - 选用: ithome Step ScalingOut policy Alarm for ECS tasks

步骤 4. 预览并建立
再次确认资料是否正确

相同方法在建立另一个警示

阈值是每当 RequestCountPerTarget < 50
警示名称: ithomeRequestPerTargetInAlarmforECS
警示描述 - 选用: ithome Step ScalingIn policy Alarm for ECS tasks

在 ECS 建立 Auto Scaling Group 扩展政策

按下上方的服务按钮,选择 ECS ,进入 Amazon ECS 控制台后,按下右方功能选单Clusters,按下刚刚建立的ithomeCluster,在下方页签的Services中选刚刚建立的ithomeService,进入服务后点选Update

进入修改丛集服务的 Auto Scaling
图 7. 进入修改丛集服务的 Auto Scaling

修改丛集的服务需要四个步骤,但因为我们只需要修改自动扩缩政策,所以只要针对步骤 3 来进行修改即可

步骤 3. Set Auto Scaling (optional)
将 Service Auto Scaling 选项改为 Configure Service Auto Scaling to adjust your service’s desired count

Service Auto Scaling: Configure Service Auto Scaling to adjust your service’s desired count
Minimum number of tasks: 2 # 最少任务的数量,指的是当都没有任何任务时,最少维持的任务数量。
Desired number of tasks: 4 # 需要任务的数量,指的是当一启动自动扩缩政策时,初始启动的任务数量。
Maximum number of tasks: 30 # 最多的任务数量,当系统压力增加时,随着自动扩展政策增加任务,最多可以增加的任务数量
IAM role for Service Auto Scaling: ecsAutoScaleRole

设定丛集服务的Auto Scaling的基本设定
图 8. 设定丛集服务的 Auto Scaling 的基本设定

按下 Add scaling policy 来新增我们需要的扩缩政策

扩展策略
Scaling policy type: Step scaling
Policy name: ithomeRequestStepOutPolicy
Execute policy when: Use an existing Alarm
ithomeRequestPerTargetOutAlarmforECS
Scaling action:
Add 1 tasks when 100 < RequestCountPerTarget < 200
Add 3 tasks when 200 <= RequestCountPerTarget < +infinity
Cooldown period: 120 seconds between scaling actions

丛集服务的步进扩展策略
图 9. 丛集服务的步进扩展策略

缩减策略
Scaling policy type: Step scaling
Policy name: ithomeRequestStepInPolicy
Execute policy when: Use an existing Alarm
ithomeRequestPerTargetInAlarmforECS
Scaling action:
Remove 50 percent when 50 > RequestCountPerTarget < 20
Remove 90 percent when 20 >= RequestCountPerTarget > -infinity
Remove tasks in increments of at least 1 task(s)
Cooldown period: 120 seconds between scaling actions

丛集服务的步进缩减策略
图 10. 丛集服务的步进缩减策略

更新具有Auto Scaling 的丛集服务
图 11. 更新具有Auto Scaling 的丛集服务

观察 ECS 步进扩展政策的运作

透过 Jmeter 设定对 ALB 发出 1000/每分的请求,详细设定可参阅如何透过 JMeter 产生流量并透过 CloudWatch 监控流量

Jmeter设定
图 12. Jmeter设定

进入 CloudWatch 控制台,观察 CloudWatch > 警示 > ithomeRequestPerTargetOutAlarmforECS,因为一开始只有 2 个任务,当送 1000 个左右个请求,每个 task 会收到约 500 请求。所以会触发警示(警示 > 100),但是因为它是 500 左右的请求数量,所以会进入第二个步进政策 (警示 > 200),启动 3 个任务;这时候就有 5 个任务,这样平均就会到约 200 个请求,于是继续增加启动 3 个任务;这时候就有 8 个任务,这样平均就会到约 120 个请求。

CloudWatch 扩展警示
图 13. CloudWatch CloudWatch 扩展警示

透过在指标中检视可以更清楚的看到流量的变动

CloudWatch 在指标中检视
图 14. CloudWatch 在指标中检视

进入 Amazon ECS 控制台,观察 Clusters > ithomeCluster > Service: ithomeService,点选Events页签,可以看到自动扩缩的触发状况,先修改所需任务数量 (Successfully set desired count to 5.),接着启动任务 (started 3 tasks) ,再将这些启动完成的任务注册到目标组 (registered 3 targets in target-group) 中。

Auto Scaling 事件活动-扩展
图 15. Auto Scaling 事件活动-扩展

关闭 Jmeter 的请求后,约 3 分钟,就会触动缩减警示,并根据缩减政策来进行缩减,直接从 11 -> 2 个任务。

Auto Scaling 事件活动-缩减
图 16. Auto Scaling 事件活动-缩减