關於 Amazon ECS 中的 CPU 配置,我需要了解哪些資訊?

2 分的閱讀內容
0

我想要將 CPU 配置給 Amazon Elastic Container Service (Amazon ECS) 中的任務,但我不知道如何開始著手。

簡短說明

在 Amazon ECS 中建立任務定義時,您可以在任務層級和容器層級定義 CPU 資源的限制。這些限制會影響 Amazon ECS 叢集的整體效能。請根據 Amazon ECS 行為和您的使用案例,調整在任務層級和容器層級的 CPU 配置值。請使用下列資訊來判斷符合您的工作負載和應用程式要求的 CPU 配置。

解決方法

Amazon ECS 對 CPU 資源採用稱為 CPU 單位的標準測量單位。例如,1024 個 CPU 單位等同於 Linux 的 1 個 vCPU,而 2048 個 CPU 單位等同於 2 個 vCPU。定義任務定義時,您可以使用 1 個 vCPU 來替代 1024 個。註冊任務定義時,ECS 會將值轉換為單位。

**注意:**Windows 容器會忽略任務層級 CPU 和記憶體參數。使用 Windows 容器時,最佳實務是指定容器層級資源。如需詳細資訊,請參閱任務大小

任務層級 CPU 配置

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

使用 Linux 執行個體時,您在任務層級設定的 cpu 參數也會設定該容器中任務所允許的 CPU 資源上限。在此任務組態中執行的容器僅可使用由任務大小定義的 CPU 容量。

AWS Fargate

對於 Linux 和 Windows,AWS Fargate 要求任務層級 cpu 參數將請求的資源配置給任務。您可以從可用於 AWS Fargate 可用的預先定義任務大小中選取記憶體cpu

Amazon EC2

**注意:**對於在 Amazon EC2 Linux 上執行的任務,cpu 參數為選用。

如果您在 Linux 中定義 cpu 參數,則該參數具有以下限制:

  • 視您在任務層級定義的 cpu 數量而定,您的容器存取權會受限。
  • 您在 任務 cpu 參數中定義的值會成為在容器執行個體上排程任務的 CPU 保留。
  • 指派給容器的 cpu 單位會使用 Linux CPU 共用來實作任務中的共用。Linux CPU 是加權機制,用於決定 CPU 存取的優先順序。

在下列範例中,cpu 參數在 Amazon EC2 上的定義如下所示:

  • m5.large EC2 執行個體會在 ECS 叢集中註冊為容器執行個體,總計為 2048 個 CPU 單元。
  • 在任務層級定義中定義為 cpu: 1024 的一項任務正在執行個體上執行。
  • 目前執行個體 EC2 CPUUtilization 為 68%。

在上述範例中,組態在其集區中保留 1024 個 CPU 單元。

目前的 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 定義值的 cpu 資源。
  • 如果未設定任務層級 cpu 定義,則您的任務中的容器可以存取在執行個體中所有可用的 CPU 資源。無論在容器層級設定的 cpu 定義為何,容器都可存取資源。
  • 如果您使用 Windows 且不支援任務層級的 cpu,容器則會以容器層級 cpu 定義做為上限。

**注意:**在 Windows 容器執行個體上,CPU 配額會以絕對配額強制執行。如需詳細資訊,請參閱環境

如果是 Linux 容器執行個體,容器層級 cpu 定義直接對應到 CpuShares 參數。如需詳細資訊,請參閱 Docker 網站上的建立容器 API

CPU 爭用

當多個處理程序請求 cpu 時間時,就會發生 CPU 爭用情況。發生 CPU 爭用情況時時,您的容器會節流為您在容器層級定義中 cpu 上定義的資源量。

**重要:**確認您在 ECS 上執行的應用程式是否為容器感知。如 Java 10 等某些應用程式皆為感知容器,而且僅使用在容器層級 cpu 定義中定義的限制。即使有 CPU 爭用情況,這些應用程式仍會使用容器層級定義。

相關資訊

如何在 Amazon ECS 中將記憶體配置給任務?

AWS 官方
AWS 官方已更新 8 個月前