如何根据ECS集群资源可用性来扩缩EC2实例?

Nit*_*esh 5 containers amazon-ec2 amazon-web-services amazon-ecs

我的 ECS 集群中运行着多个服务。每个服务包含一个或多个基于 CPU 利用率或用户数量的任务。我已经使用 EC2 启动类型部署了这些容器。现在,我想根据集群中的可用资源增加/减少 EC2 实例的数量。假设有四个 ECS 任务在两个 m5.large 实例中运行。

现在,如果 ECS 服务增加了任务数量,并且集群中没有足够的可用资源,我如何启动实例并将其添加到集群中?

反之亦然。如果有实例正在运行,但其中没有ecs任务,如何自动销毁它?

PS - 我正在使用 Fargate。由于成本非常高,我转向了 EC2 实例。

小智 1

您需要按照 @Nitesh 的说法在 ASG 中设置 ecs 集群实例,其次您需要根据关键指标设置一个 cloudwatch 警报,而 ecs 很复杂,因为您需要设置两个自动缩放策略,一个通过服务另一个来实现扩展您的实例,对于 ec2,您可以使用的指标是集群 CPU 预留和/或集群内存预留。

该方案的工作方式如下:您的服务通过使用服务的关键指标(可能是 CPU 使用率或负载均衡器中的请求数量)的自动缩放规则来增加所需容器的数量,因此集群 CPU 预留会增加此触发器cloudwatch 警报和您的 ASG 会增加实例数量。

有些提示放大速度快,缩小速度慢,这可以通过设置警报时间来处理

对于容器,请使用 Service Auto Scaling 和 Target 跟踪策略以了解更多信息,请参阅

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html#cluster_reservation

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-auto-scaling.html

https://aws.amazon.com/blogs/compute/automatic-scaling-with-amazon-ecs/

我希望这有帮助

问候