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