我创建了一个 ECS 集群,并使用服务部署了一个 2 容器任务(在服务创建期间,我将应用程序负载均衡器 - 使用 IP 类型的目标组 - 关联到它), 这工作正常(我可以访问我的 DNS URL 并且它按预期加载)。
我现在尝试使用 AutoScalingGroup 根据 CPU 利用率自动缩放实例(集群自动缩放)。
我已经创建了 ASG(所需实例计数=1,最大值=4),但现在需要根据 CPU 利用率创建动态扩展策略。
如果平均实例 CPU 使用率超过 50%,我希望 ASG 使用简单扩展来添加更多实例。 (如果平均使用量低于 40,则再次缩小到所需的最小计数)。
我已添加(到我的 ASG)> 动态扩展策略(类型=简单,如果触发警报则扩展 1 个实例) Cloudwatch Alarm=使用 ClusterName、ServiceName、CPU 利用率 > 50%,基于 上一篇文章。
警报进入“警报”状态,并且 ASG 正在添加实例(所需容量=1,最大=4):
但是,集群上没有启动任何新任务(它仍然为 1,并且我的应用程序仍然没有响应):
我的集群实例也保持为1(就好像ASG新创建的实例没有注册到集群中一样):
如何让集群识别(并使用)新创建的实例?
这是错误的,不会起作用:
如果平均实例 CPU 使用率超过 50%,我希望 ASG 使用简单扩展来添加更多实例。 (如果使用量低于 40,则再次缩小到所需的最小计数)。
EC2 自动伸缩组根据 ECS 集群需要运行的任务数量向您的 ECS 集群提供 EC2 实例。就是这样。 EC2 自动扩展组不应由任何 CPU 利用率指标直接触发。 EC2 自动扩展组应该“仅”由 ECS 集群的容量提供程序触发。您必须让 ECS 集群管理 EC2 自动伸缩组,根据需要创建或删除 EC2 实例,以便部署 ECS 任务。 通过直接向 ECS 集群添加更多 EC2 实例,您只是创建空的 EC2 实例,而无需在其上部署任何新任务,因为您没有执行任何操作来触发 ECS 服务中的任务计数增加。
您应该使用
AWS Application Auto-Scaling根据 ECS 任务的 CPU 利用率指标触发创建更多 ECS 任务。当创建的任务数量超过 EC2 实例上的空间时,ECS 集群将自动向集群添加更多 EC2 服务器,然后部署更多 ECS 任务。