我希望在ECS群集上运行多个不同的服务,每个服务应该在单个EC2实例上运行。所有服务的EC2实例类型都相同。我希望这些服务能够使用他们所有的主机EC2可用资源。
我假设如果我在任务配置中仅使用软内存参数(不使用硬内存参数),这将允许我的容器实例使用托管它的EC2实例上的所有可用内存,并且我赢了&限制。这是对的吗?
至于EC2类型(例如t2.micro [vCPU = 1,Memory = 1Gib])!!是否可以简单地说:
{
...
"memory": 1024,
"cpu": 1024,
...
}
由于EC2应该已经设置了一堆容器服务要求。
答案 0 :(得分:17)
您是否尝试让每个ECS实例仅处理每个实例的单个任务?
对你的问题的简短回答是,不。通常,容器可用的内存量略少于机器本身可用的内存量。这样操作系统就有足够的内存来继续运行。根据我的经验,具有2048 MB内存的T2.Small将最终获得2004 MB容器容量。
当涉及到任务定义时,有两种指定内存的方法。 memory
设置是一个硬限制。如果容器内存使用量达到此数量,则容器将被终止。另一方面,如果指定memoryReservation
,那么将为该任务保留大量内存,但它可以使用更多内存,最多可达到计算机的总量。查看Task Definition documentation了解更多详情。
这里一个重要的考虑因素是只需要memory
和memoryReservation
中的一个。如果两者都使用,memoryReservation
应小于memory
。如果您只是要指定其中一个,我建议memoryReservation
,因为它将允许您的任务最多使用机器上的总内存。如果两者都使用,memoryReservation
将用于计算任务消耗的内存量。
在实例上放置任务时,它会查看可用内存量,即实例的已注册内存量,减去已放置在其上的任何任务。如果此数字小于任务所需的内存量,则不会在其上放置任务。如果没有任何实例有足够的内存用于该任务,则不会放置该内存,并且该错误将记录在服务Events
日志中。
因此,查看实例类型实际注册的内存量非常重要,然后确保memory
或memoryReservation
低于实例注册的数量。否则,您的任务将永远不会被放置。
对于cpu
,此值不是必需的,如果未指定,则允许实例上的所有任务在系统上可用的CPU的相等部分。如果实例上只有一个任务,则默认情况下它可以使用实例的整个CPU。