"为容器预留的cpu单元数。一个容器
每个 CPU 内核都有 1,024 个 CPU 单元。这个参数
指定为容器保留的最小 CPU 量,以及
容器与其他容器共享未分配的 CPU 单元
实例的比例与其分配的数量相同。这个参数
映射到 Docker 的 Create a container 部分中的 CpuShares
远程 API 和 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.mediums 上:
任务 #1 - 0 个 CPU 单元,
任务 #2 - 0 个 CPU 单元:
在这种情况下,Task#1 和 Task#2 都将获得 1,024 个 CPU 单元,因为有 2,048 个未保留单元。由于任务是 1:1 预留 CPU 单元,因此它们都将获得同等份额的可用 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 单元,因为所有单元都未使用,它们按照预留的比例在容器中分配。