AWS ECS任务内存和CPU分配

时间:2016-08-31 15:41:44

标签: amazon-ecs

我正在寻找为ECS任务分配内存的指导。我正在为希望在服务器成本上尽可能便宜的客户运行Rails应用程序。我正在查看具有2个CPU和4 GB内存的中型服务器大小。

大多数情况下,我一次只需要一个运行rails服务器的容器。但是,偶尔会出现峰值,我想扩展另一台服务器并将容器部署到它。当流量减慢时,我想缩减回单个服务器/任务。

这是我需要帮助的地方:

我应该将我的任务记忆设置为什么? 4GB?这将是盒子上的总数,但不考虑系统进程。我可以做3 GB,但后来我会浪费一些无情的自由记忆。对于CPU来说同样的问题......我应该100%做到吗?

我不想支付更大的服务器费用,即坐在那里16 GB,大部分时间只需要1个容器......这样的浪费。

我想要的东西看起来很简单。每个实例1个任务。当实例达到75%的使用率时,缩放新实例并将任务部署到第二个实例。我不明白为什么我必须设置任务内存和CPU设置,当它是一对一的比率时。

任何人都可以就如何做我所描述的事情给我指导吗?或者当它与实例一对一时,正确的任务定义设置应该是什么?

感谢您的帮助。

- 编辑 -

根据反馈,这是一个潜在的解决方案:

任务定义=内存预留为3 GB,内存为4 GB。

Ec2中等节点,有4 GB

配置ECS服务自动扩展: - 当服务CPU利用率大于75%时,向上扩展(将任务数增加1) - 当服务CPU利用率低于25%时缩小(减少任务计数1)。

配置ECS群集扩展: - 当群集内存利用率大于80%时,向上扩展(将ec2实例数增加1)。 - 当集群内存利用率低于40%时,按比例缩小(将ec2实例数减少1)。

实施例: 从1个运行3 GB预留任务的EC2实例开始。这是75%的集群利用率。

当服务激增并且服务的CPU利用率跃升至75%以上时,它将触发服务规模。现在,任务计数增加,新任务再次要求3 GB,这使得总共6 GB,但只有4 GB可用,因此群集的利用率为150%。

这会触发群集规模(超过80%),从而为群集添加新的ec2节点以用于新服务。当它在那里时,我们回到6GB需求/ 8GB可用,这是75%并且稳定。

缩小规模会发生同样的情况。

1 个答案:

答案 0 :(得分:5)

For setting memory for containers, I would recommend using "memoryReservation": The soft limit of memory to your container and "memory": the hard limit on your container.

You can set "memoryReservation" to 3GB, which will ensure the other instance of the container does not land up on the same EC2 instance. The "memory" option will allow the container to swell up on memory when absolutely needed.

Ref:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

ECS right now does not support the flexibility to disable the deployment of same task twice on the same ec2 compute instance.

But you can hack your way by either blocking cpu/memory or externalizing a known port on you task.