首页 > 解决方案 > 具有 ec2 计数的 ECS 自动扩展集群

问题描述

为了部署我的 docker-compose,我使用 AWS ECS。

一切正常,除了自动缩放。

创建 ECS 集群时,

在此处输入图像描述

我可以决定实例的数量。

所以我把它定义为1。

接下来,在我的集群上创建服务时,

也可以决定任务的数量。

我知道在实例上运行的任务,所以我将它定义为 1。

在此处输入图像描述

并像这样指定自动缩放策略。

在此处输入图像描述

如您所知,如果 cpu 百分比在 5 分钟内达到 50,它会自动添加一个任务。

所以完成配置它,我运行基准测试。

在服务描述中,期望的任务增加到 2。

但是实例没有自动添加。

在事件日志中,

在此处输入图像描述

也许我在集群中将实例数定义为 1,所以它无法启动新任务。

为什么自动伸缩不会自动在我的集群上添加新实例?

我的配置有问题吗?

谢谢。

标签: amazon-ecsautoscaling

解决方案


您的 ecs 集群没有自动缩放实例数量。它自动缩放在现有集群中运行的任务数量。一个 ec2 实例可以运行多个任务。要自动缩放实例计数,您需要使用 cloudwatch 警报: https ://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch_alarm_autoscaling.html

当 ECS 尝试使用“最接近的匹配容器实例”时,您收到此问题是因为端口冲突,在这种情况下,该实例以 9e5e 结尾。

当尝试在该实例上启动任务时,它会注意到该实例“已在使用您的任务所需的端口”

为了解决此问题,您需要为您的 ECS 集群使用动态移植。

亚马逊在此处提供了有关如何执行此操作的教程: https ://aws.amazon.com/premiumsupport/knowledge-center/dynamic-port-mapping-ecs/

本质上,您需要修改任务定义中的端口映射,该任务定义包含您尝试运行和扩展的 docker 容器。

主机端口的端口映射应该是 0,然后是应用程序用于容器端口的端口号。

零值将使运行的 ECS 集群中的每个 docker 实例为其主机端口使用不同的编号,从而消除您遇到的端口冲突。


推荐阅读