'cpu'参数在aws容器服务中的含义是什么?

nig*_*are 29 amazon-ec2 amazon-web-services aws-sdk

我将在t2.medium的容器服务中注册一个新任务.我看到了cpu参数等于0的示例.我试图找出它是什么以及我需要在这里为一个任务放多少.

我能够根据这个问题找到的所有内容:http ://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html? shortFooter = true http://docs.aws.amazon.com/AmazonECS/最新/ developerguide/example_task_definitions.html

lou*_*ola 54

"为容器保留的cpu单元数.容器实例每个CPU核心有1,024个cpu单元.此参数指定为容器保留的最小CPU数量,容器与实例上的其他容器共享未分配的CPU单元与分配量相同的比例.此参数映射到Docker Remote API的Create a container部分中的CpuShares和docker run的--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个未使用的CPU单元: 1024.

任务#1 - 0 CPU单元:如果机器上只有一个任务,它将被给予所有2,048个CPU单元,因为所有单元都未使用,它们按预定的比例分配到容器中.