Amazon ECS任务定义 - CPU单元&内存 - 设置容器以使用100%的EC2可用资源

时间:2017-09-12 17:40:06

标签: amazon-web-services amazon-ecs

我希望在ECS群集上运行多个不同的服务,每个服务应该在单个EC2实例上运行。所有服务的EC2实例类型都相同。我希望这些服务能够使用他们所有的主机EC2可用资源。

我假设如果我在任务配置中仅使用软内存参数(不使用硬内存参数),这将允许我的容器实例使用托管它的EC2实例上的所有可用内存,并且我赢了&限制。这是对的吗?

至于EC2类型(例如t2.micro [vCPU = 1,Memory = 1Gib])!!是否可以简单地说:

{  
   ...
   "memory": 1024,
   "cpu": 1024,
   ...
}

由于EC2应该已经设置了一堆容器服务要求。

1 个答案:

答案 0 :(得分:17)

您是否尝试让每个ECS实例仅处理每个实例的单个任务?

对你的问题的简短回答是,不。通常,容器可用的内存量略少于机器本身可用的内存量。这样操作系统就有足够的内存来继续运行。根据我的经验,具有2048 MB内存的T2.Small将最终获得2004 MB容器容量。

当涉及到任务定义时,有两种指定内存的方法。 memory设置是一个硬限制。如果容器内存使用量达到此数量,则容器将被终止。另一方面,如果指定memoryReservation,那么将为该任务保留大量内存,但它可以使用更多内存,最多可达到计算机的总量。查看Task Definition documentation了解更多详情。

这里一个重要的考虑因素是只需要memorymemoryReservation中的一个。如果两者都使用,memoryReservation应小于memory。如果您只是要指定其中一个,我建议memoryReservation,因为它将允许您的任务最多使用机器上的总内存。如果两者都使用,memoryReservation将用于计算任务消耗的内存量。

在实例上放置任务时,它会查看可用内存量,即实例的已注册内存量,减去已放置在其上的任何任务。如果此数字小于任务所需的内存量,则不会在其上放置任务。如果没有任何实例有足够的内存用于该任务,则不会放置该内存,并且该错误将记录在服务Events日志中。

因此,查看实例类型实际注册的内存量非常重要,然后确保memorymemoryReservation低于实例注册的数量。否则,您的任务将永远不会被放置。

对于cpu,此值不是必需的,如果未指定,则允许实例上的所有任务在系统上可用的CPU的相等部分。如果实例上只有一个任务,则默认情况下它可以使用实例的整个CPU。