【问题标题】:AWS ECS Task Memory and CPU AllocationAWS ECS 任务内存和 CPU 分配
【发布时间】:2017-01-08 07:02:16
【问题描述】:

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

大多数时候,我一次只需要 1 个运行 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 个 EC2 实例开始运行具有 3 GB 预留的任务。这是 75% 的集群利用率。

当服务峰值,服务的CPU利用率跃升至75%以上时,会触发服务规模。现在任务计数增加了,新任务再次请求 3 GB,这使其总共 6 GB,但只有 4 个可用,因此集群的利用率为 150%。

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

按比例缩小也会发生同样的情况。

【问题讨论】:

    标签: amazon-ecs


    【解决方案1】:

    要为容器设置内存,我建议使用“memoryReservation”:容器的内存软限制和 “内存”:容器的硬性限制。

    您可以将“memoryReservation”设置为 3GB,这将确保容器的其他实例不会落在同一个 EC2 实例上。 “内存”选项将允许容器在绝对需要时在内存中膨胀。

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

    ECS 目前不支持在同一 ec2 计算实例上禁用两次部署同一任务的灵活性。

    但是您可以通过阻止 cpu/内存或外部化您任务上的已知端口来破解自己的方式。

    【讨论】:

    • 所以您建议保留 3 GB 的内存,然后将内存设置为 4 GB?然后我可以使用 CPU > 75% 自动缩放实例,并将服务编号缩放到 2,并发出类似的警报,将新任务放在新实例上?然后同样缩小规模......这是它的要点吗?谢谢
    • 您说的是 ecs 扩展还是 ec2 计算扩展?您的评论在 ecs 扩展的上下文中看起来不错,您至少有两个 ec2 实例
    • 我认为你的问题的答案是两者兼而有之。他的 ec2 实例和 ecs 服务都需要从 1 扩展到 2。
    • 是的,但是如果您在内存预留上扩展 ec2 实例,为任务设置 3GB 内存将导致您始终拥有两个实例。
    • 明白了。但是可以在 CPU 使用率 > 75% 时使用单独的云监视警报来触发 ec2 规模,对吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2020-06-01
    • 2017-11-29
    • 2021-11-12
    • 1970-01-01
    • 2021-09-04
    • 2019-10-24
    • 2017-07-12
    相关资源
    最近更新 更多