如何對 Amazon ECS 容量供應商的擴展問題進行疑難排解?
我已為我的 Amazon Elastic Container Service (Amazon ECS) 叢集設定容量供應商。然而,當叢集資源耗盡,或當容量佔用較少而進行縮減時,容量供應商不會水平擴展。
簡短描述
由於以下一個或多個原因,Amazon ECS 叢集的容量供應商不會自動縮減或水平擴展:
- Amazon ECS 服務未與容量供應商相關聯。
- 與容量供應商相關的擴展政策不會連接至 Auto Scaling 群組。
- 目標追蹤擴展政策設定不正確。
- 在容量供應商中,沒有正確設定目標容量百分比。
- 任務放置策略並非是根據工作負載所定義。
- ECS 服務因一些錯誤而發生故障,並封鎖容量供應商擴展。
- 您正為容量供應商使用受管擴展,且 Auto Scaling 群組已自訂連接至該擴展的自訂擴展政策。
- Auto Scaling 群組已啟動容器執行個體,但無法加入叢集。
- 您的容器執行個體受到保護,以防止擴展。
- 容量供應商正處於故障狀態。
- Auto Scaling 群組處於水平擴展和擴展的迴圈中。
解決方案
Amazon ECS 服務未與容量供應商相關聯
要檢查雲 ECS 服務是否與容量供應商相關聯,請執行 AWS Command Line Interface (AWS CLI) 命令 describe-services。
aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query services[].capacityProviderStrategy
如果您的 ECS 服務與容量供應商相關聯,則輸出必須類似於以下內容:
[ [ { "capacityProvider": "example-capacity-provider", "weight": 1, "base": 1 } ] ]
請確保輸出中的 capacityProviderStrategy 欄位不是空。您可以藉由檢閱適用於 CreateService 和 UpdateService API 呼叫的 AWS CloudTrail 事件,檢視服務的組態。
如要解決此問題,請使用 update-service、run-task,或是 put-cluster-capacity-providers 等 AWS CLI 命令,更新 ECS 服務。您也可以使用 Amazon ECS 主控台,更新服務。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI。
與容量供應商相關的擴展政策並未連接至 Auto Scaling 群組
當容量供應商已建立,且和 Auto Scaling 群組相關聯時,Auto Scaling 群組會建立一個擴展政策,並使用目標追蹤修改所需容量,以容納叢集負載。
如要解決此問題,請檢閱適用於 UpdateAutoScalingGroup、CreateCapacityProvider、UpdateCapacityProvider,以及 PutScalingPolicy API 的 CloudTrail 事件。
執行以下命令,驗證 Auto Scaling 群組是否作為叢集連接而建立:
aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query clusters[].attachments[]
命令的輸出必須類似於以下內容:
[ { "id": "100a23456-5f0b-4abc-b998-d6789d111a", "type": "asp", "status": "CREATED", "details": [ { "name": "capacityProviderName", "value": "example-capacityProvider" }, { "name": "scalingPlanName", "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345" } ] } ]
如果您使用的是受管擴展政策,請執行以下操作,檢查政策是否連接至 Auto Scaling 群組:
- 開啟 Amazon ECS console (Amazon ECS 主控台)。
- 在導覽窗格中,選擇 Clusters (叢集)。
- 開啟您要檢查的叢集。
- 選擇 Capacity Providers (容量供應商) 標籤。
- 針對您要檢查的容量供應商,請選擇 ASG。
您將被轉向至 Amazon EC2 主控台中的 Auto Scaling groups (Auto Scaling 群組) 頁面。 - 選擇 Automatic Scaling (自動縮放) 標籤。
您可以檢視擴展政策。 - 檢查您正使用的擴展政策是否包含其中。
另外,請務必在 Auto Scaling 群組擴展政策的名稱中,包含前綴 AutoScaling-ECSManagedAutoScalingPlan。否則,Auto Scaling 群組使用的擴展政策,會不同於容量供應商管理的擴展政策。請注意,容量供應商可以與其他類型的擴展政策一起使用。如需更多資訊,請參閲服務自動擴展。
目標追蹤擴展政策設定不正確
目標追蹤擴展政策,會追蹤您定義指標的目標值。Amazon ECS 服務會建立並管理 Amazon CloudWatch 警示,而這些警示會觸發擴展政策,並根據指標與目標值計算擴展調整。如果目標追蹤政策設定不正確,則任務可能無法根據需要自動擴展。
假設目標追蹤自動擴展政策,正在追蹤 CloudWatch 中的 CPU 利用率指標,且您指定目標追蹤百分比為 60。在這種情況下,容量供應商會盡最大努力,將彙總的 CPU 利用率維持於 60%。當 CPU 利用率大於 60% 時,會導致水平擴展事件,若是利用率低於 60% 時,則會導致縮減事件。
如要解決此問題,請根據您的工作負載選擇正確的指標,並在目標追蹤政策中,設定正確的水平擴展與縮減數值。如需更多資訊,請參閲目標追蹤擴展政策。
在容量供應商中,並未正確配置目標容量百分比
目標容量數值是用於 CloudWatch 指標中的目標數值,而該指標則是用於 Amazon ECS 受管目標追蹤擴展政策中。將盡最大努力比對此目標容量數值。此數值的允許數值為介於 1 到 100 之間的整數。例如,如果您將目標容量設定為 100%,則會利用所有執行個體,且會縮減任何未執行任務的執行個體。但是,並不保證這種行為每次都會發生。如果您需要備用容量,請根據您的需求將目標容量設置為略低於 100% 的值。
如要使用正確的目標容量百分比,更新容量供應商,請根據使用傳統主控台更新 Auto Scaling 群組容量供應商中的説明,進行操作。
任務放置策略並非根據工作負載所定義
建立服務或執行任務時,可以指定任務放置策略。您還可以更新現有服務的任務放置策略。例如,假使您的工作負載是記憶體密集型,且您沒有相應設定任務放置策略,則這些任務不會根據記憶體使用情況進行縮減或向外擴展。請務必檢查任務放置策略類型,並根據您的工作負載定義這些策略。
ECS 服務因一些錯誤而發生故障,並封鎖容量供應商擴展
如果 ECS 服務出現故障且發生錯誤,則容量供應商會無法擴展和水平擴展。要診斷 ECS 服務失敗的原因,請檢查 Amazon ECS主控台中的服務事件訊息。
您正為容量供應商使用受管擴展,且 Auto Scaling 群組已自訂連接至該擴展的自訂擴展政策
如果您的叢集無法自動擴展,則可能會發生以下錯誤:
"StatusCode": "ActiveWithProblems" "StatusMessage": "Scaling plan has been created but failed to be applied to all resources. Problems were encountered for 1 resource. See scaling plan resources for the failure details."
此錯誤會在下列兩項條件同時成立時發生:
- 您正在為容量供應商使用 AWS 受管擴展。
- Auto Scaling 群組具有非由 Amazon ECS 建立的自訂擴展政策。
如要解決此錯誤,請參閲避免 ActiveWithProblems 錯誤。啟用受管擴展時,Amazon ECS 會使用自動擴展擴展計劃,管理 Auto Scaling 群組的擴展和水平擴展操作。建立一個新的 Auto Scaling 群組,並連接此群組至容量供應商,始終是最佳實務。
Auto Scaling 群組已啟動容器執行個體,但無法加入叢集
- 如要檢查此問題的可能原因,請參閲叢集自動擴展考量。
- 檢閱適用於 DescribeContainerInstances API 呼叫的 CloudTrail 事件,以檢查容器執行個體是否與容量供應商相關聯。
- 請確保 Auto Scaling 群組的 Maximum (最大值) 數值設定,是大於零的數值。
您的容器執行個體受到保護,防止縮減
如果您在設定容量供應商時啟用了受管終止保護,Amazon ECS 會阻止 Auto Scaling 群組中包含任務的 Amazon EC2 執行個體,於擴展動作期間終止。
如要確保 Auto Scaling 群組可在您變更所需容量時終止舊的執行個體,請執行以下操作:
如需更多資訊,請參閱如何解決 Amazon ECS 中的「容量供應商的受管終止保護設定無效」錯誤?
容量供應商正處於故障狀態
最佳實務是建立一個新的 Auto Scaling 群組,以便與容量供應商一起使用,而非使用現有群組。如果您使用現有 Auto Scaling 群組,則使用容量供應商時,可能會遇到問題。這是因為與現有群組相關聯,並註冊到 Amazon ECS 叢集的執行中 Amazon EC2 執行個體,可能無法正確註冊到容量供應商。
如要查看容量供應商的狀態,請執行 AWS CLI 命令 describe-capacity-providers。
此外,請檢閱 CloudTrail 事件,並檢查與 CreateCapacityProvider 相關的錯誤。
Auto Scaling 群組處於水平擴展和擴展的迴圈中
當 ECS 服務擴展政策中指定的指標數值達高峰時,Auto Scaling 群組會根據需要擴展,並啟動執行個體。但是,如果指標數值在突然峰值之後下降,Auto Scaling 群組會嘗試在執行個體中進行擴展。如果指標值在短時間範圍內波動多次,則 Auto Scaling 群組可能會陷入水平擴展與擴展的迴圈中。要避免此問題,請確保根據您的工作負載,定義擴展政策中的指標閥值。
相關資訊
相關內容
- 已提問 5 個月前lg...
- 已提問 8 個月前lg...
- 已提問 1 年前lg...
- 已提問 9 個月前lg...
- 已提問 8 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前