關於 Amazon ECS 中的 CPU 分配,我需要了解哪些內容?

2 分的閱讀內容
0

我正在尋找與將 CPU 分配給 Amazon Elastic Container Service (Amazon ECS) 中的任務有關的資訊。

簡短描述

在建立任務定義時,可以定義 CPU 資源的限制。這些限制可以定義在任務層級和容器層級。

Amazon ECS 叢集的整體效能會根據這些限制而受到影響。根據 Amazon ECS 的行為和您的使用案例,您必須在任務層級和容器層級調整 CPU 的分配值。請使用以下資訊來確定能夠滿足工作負載和應用程式要求的 CPU 分配。

解決方案

Amazon ECS 會對 CPU 資源使用稱為 CPU 單位的標準測量單位。1024 個 CPU 單位相當於 1 個 vCPU。

例如,2048 個 CPU 單位等於 2 個 vCPU。

**注意:**在定義任務定義時,也可以使用 1 個 vCPU 而不是 1024 個 vCPU。註冊好任務定義後,ECS 會將值轉換為單位。

任務層級的 CPU 分配

Amazon ECS 任務可以在 AWS Fargate 或 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行。

在任務層級設定 cpu 參數時,也會設定任務中的容器允許使用的最大 CPU 資源量。

AWS Fargate

AWS Fargate 需要任務層級的 cpu 參數,才能將請求的資源分配給任務。您可以從預先定義任務大小中選取適用於 AWS Fargate 的記憶體CPU。您可以在 AWS Fargate 開發人員指南任務 CPU 和記憶體一節底下深入了解不同的組合。

Amazon EC2

在 Amazon EC2 上執行任務時,cpu 是選用參數。

如果定義 cpu 參數,請考慮以下事項:

  • 容器會根據所定義的 cpu 量而獲得有限的存取能力。
  • cpu 參數中所定義的數量,會成為保留給要在容器執行個體上排程的任務的 CPU 數量。
    注意:容器層級的定義也是如此。

例如,具有以下組態的 Amazon EC2 上所定義的 cpu 參數會在其集區中留下 1024 個 CPU 單位:

  • m5.large EC2 執行個體已在 ECS 叢集中註冊為總共有 2048 個 CPU 單位的容器執行個體。
  • 一個在任務層級定義了 cpu: 1024 的任務正在該執行個體上執行。
  • 目前的 EC2 執行個體 CPUUtilization 為 68%。

目前的 CPUUtilization 不會影響容器執行個體中可用於排程任務的 CPU 單位數量。即使執行個體超過其利用率的 50%,其集區中還是有一半的單位可供新任務啟動之用。這是因為該參數僅作為 CPU 的保留和限制,並不會直接轉換為 CPU 本身的使用量。

在此範例中,只考慮 CPU 時可能會出現以下幾種結果:

  • 您可以另外排程兩個於任務層級或容器層級定義中定義了 cpu: 512 的任務。
  • 您可以排程一個任務,使其包含兩個容器,並讓這兩個容器分別在任務層級定義了 cpu: 1024 以及在容器層級定義了 cpu: 512
  • 如果未定義 cpu,則所能排程的任務數量就會是 ECS 針對您選取的網路模式所能支援的數量。ECS 容器執行個體中可用於排程的 CPU 單位則不受影響。

容器層級的 CPU 分配

在以下情況時會考慮使用容器層級的 cpu 定義:

排程時:

  • 如果未設定任務層級的 cpu 定義,則容器中定義的 CPU 單位總數會成為 CPU 保留。
  • cpu 容器層級定義中的 CPU 單位總數不能大於任務層級分配中定義的 CPU 單位數。

執行階段,且沒有 CPU 爭用:

  • 如果已設定任務層級的 cpu 定義,則容器所能存取的 cpu 資源,只能達到任務層級的 cpu 所定義的值。
  • 如果未設定任務層級的 cpu 定義,則無論是否在容器層級設定了 cpu 定義,任務中的容器都可以存取執行個體中的所有可用 CPU 資源。
  • 如果您使用 Windows 任務,且任務層級的 cpu 不受支援,則容器始終會以容器層級的 cpu 定義為上限。

多個程序請求 cpu 時間時,就會發生 CPU 爭用。發生 CPU 爭用時,容器會被限制在容器層級定義的 cpu 上所定義的資源量。

**重要提示:**請務必驗證您在 ECS 上執行的應用程式是否可識別容器。某些應用程式 (例如 Java 10) 可識別容器,並且只會使用容器層級的 cpu 定義中所定義的限制,而不受是否有 CPU 爭用情形所影響。

容器層級的 cpu 定義會直接對應到建立容器遠端 Docker API 的 CpuShares 參數。


相關資訊

如何為 Amazon ECS 中的任務分配記憶體?

AWS 官方
AWS 官方已更新 2 年前