我想要將 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 中將記憶體配置給任務?