我要在t2.medium的容器服务中注册一个新任务。 我看到了cpu参数等于0的例子。 我试图找出它是什么以及我需要在这里完成一项任务。
根据这个问题我能找到的一切: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html?shortFooter=true http://docs.aws.amazon.com/AmazonECS/latest/developerguide/example_task_definitions.html
答案 0 :(得分:48)
"要为容器保留的cpu单元数。一个容器 每个CPU核心实例有1,024个cpu单元。这个参数 指定要为容器保留的最小CPU数量,以及 容器与其他容器共享未分配的CPU单元 与分配金额相同的实例。这个参数 映射到Docker的Create a container部分中的CpuShares 远程API和docker运行的--cpu-shares选项。"
t2.medium有2个vCPU,因此它有2,048个可用的CPU单元可以安排出去。如果您只想在主机上运行单个容器,则可以预算所有2,048个CPU单元,但不会在该主机上放置其他容器。
容器始终保证在需要时至少获得预算的CPU 。另外,关于CPU单元的一个巧妙的事情是,如果没有其他容器占用资源,容器可以突破其分配的单元。例如,如果在t2.medium上运行两个任务,每个任务有1,024个预算CPU单元,则每个任务可以单独突发到2,048,因为另一个任务完全空闲。当您以这种方式开始共享主机时,您可以通过使用ECS来节省成本。
此外,如果所有CPU单元都没有预算,ECS将自动将剩余的CPU单元按预算CPU单位的比例分配给每个容器。因此,如果你在t2.medium上运行两个任务,每个任务有0个CPU单元,那么每个容器将有效地获得1,024个CPU单元,因为没有其他容器保留它们。
这里需要注意的一点是,内存的工作方式有点不同;这是一个艰难的限制。如果容器尝试分配的内存多于预算,则任务/容器将退出。您可以低配置CPU单元并且通常可以使用它(因为容器可以超出其规定),但是您需要确保保持在内存限制内。
实施例: 如果将其设置为0,则将占用相应数量的未预留CPU。假设这些场景位于具有2,048个CPU单元的t2.medium上:
任务#1 - 0个CPU单元, 任务#2 - 0个CPU单元: 在这种情况下,任务#1和任务#2都将被赋予1,024个CPU单元,因为有2,048个未预留的单元。由于CPU单元预留的任务是1:1,因此它们将获得可用CPU单元的相等份额。
任务#1 - 0个CPU单元, 任务#2 - 1,024个CPU单元: 任务#2将被授予2,048个CPU单元,任务#1将被赋予0,因为它试图以0:1,024的比例分配1,024个未使用的CPU单元。
任务#1 - 0个CPU单位: 如果机器上只有一个任务,它将被给予所有2,048个CPU单元,因为所有单元都未使用,它们按预定的比例分配到容器中。