2016-11-17 78 views
7

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

的一切,我可以根据这个问题找到: 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

回答

20

“的CPU单元的数量保留在容器的容器 实例对每个CPU核1024个CPU单元。此参数 指定为容器预留的CPU的最小数量,并且 容器与 实例上的其他容器共享未分配的CPU单元,其分配量与其他容器具有相同的比例此参数 映射到Create中的CpuShares Docker 远程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上运行,每个CPU有0个CPU单元,则每个容器将有效地获得1,024个CPU单元,因为没有其他容器保留它们。

这里需要注意的一点是内存的工作原理有所不同;这是一个艰难的限制。如果容器试图分配比预算更多的内存,那么任务/容器将退出。你可以低估CPU单位,并且通常会放弃它(因为容器可以突破它们的供应),但是你需要确保你保持在你的内存限制内。


示例: 如果将其设置为0,将采取未保留CPU的成比例量。假定这些情况是与2048个CPU单位t2.mediums:

任务#1 - 0 CPU单位, 任务#2 - 0 CPU单位: 在这种情况下,两个任务#1和任务#2将被给予由于有2,048个未保留单元,所以有1,024个CPU单元。由于CPU单元保留的任务为1:1,因此它们将获得可用CPU单元的相同份额。

任务#1 - 0 CPU单位, 任务#2 - 1024 CPU单位: 任务#2将被给予2048个CPU单元和任务#1将因为它试图瓜分1024个未使用的CPU单位给出0比例为0:1,024。

任务#1 - 0 CPU单元: 如果只有一个任务在机器上,它将被赋予全部2,048个CPU单元,因为所有单元都没有被使用,它们按照它们的预留比率在容器中分开。

+0

谢谢你帮助我,但我还有一个问题。 如果我将cpu设置为零,并且我们有默认值,会发生什么情况? 在此先感谢。 – nightmare

+0

我加了几个例子。 – louahola

+0

非常感谢你! 现在很明显。 – nightmare

相关问题