最佳化 Amazon ECS 叢集自動擴展 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

最佳化 Amazon ECS 叢集自動擴展

在 Amazon EC2 上執行 Amazon ECS 的客戶,可以利用叢集自動擴展來管理 Amazon EC2 Auto Scaling 群組的擴展。透過叢集自動擴展,您可以設定 Amazon ECS 自動擴展 Amazon EC2 Auto Scaling 群組,並專注於執行任務。Amazon ECS 可確保 Amazon EC2 Auto Scaling 群組視需要縱向擴展,而不需要進一步介入。Amazon ECS 容量提供者可用來管理叢集中的基礎結構,確保有足夠的容器執行個體可滿足應用程式需求。若要了解叢集自動擴展的底層運作機制,請參閱 Deep Dive on Amazon ECS Cluster Auto Scaling

叢集自動擴展依賴與 Amazon EC2 Auto Scaling 群組的 CloudWatch 型整合來調整叢集容量。因此存在以下固有延遲:

  • 發布 CloudWatch 指標。

  • 指標 CapacityProviderReservation 觸發 CloudWatch 高低閾值警報所需的處理時間

  • 新啟動的 Amazon EC2 執行個體完成暖機所需的時間。您可以採取下列動作提高叢集自動擴展的回應速度,加速實現部署:

容量提供者步進擴展大小

Amazon ECS 容量提供者將擴增/縮小容器執行個體,以滿足應用程式的需求。將 Amazon ECS 會啟動的執行個體數量下限預設為 1。如果需要多個執行個體來放置待處理任務,可能會增加部署所需的時間。您可以透過 Amazon ECS API 增加 minimumScalingStepSize,提高 Amazon ECS 每次可縮減或擴展的執行個體數量下限。太低的 maximumScalingStepSize 會限制每次可縮減或擴展的容器執行個體數量,進而拖慢部署速度。

注意

此組態目前只能透過 CreateCapacityProviderUpdateCapacityProvider API 使用。

執行個體暖機期間

執行個體暖機期是新啟動的 Amazon EC2 執行個體可以為 Amazon EC2 Auto Scaling 群組貢獻 CloudWatch 指標的期間。在指定的暖機期到期後,執行個體會計入 Amazon EC2 Auto Scaling 群組的彙總指標,而叢集自動擴展會繼續進行其下一次的計算反覆運算,以估計所需的執行個體數量。

instanceWarmupPeriod 的預設值為 300 秒,您可以透過 CreateCapacityProviderUpdateCapacityProvider API 將其設定為較低的值,從而實現更即時的擴展。建議將該值設定為大於 60 秒,避免過度佈建。

備用容量

如果容量提供者沒有可用於置放任務的容器執行個體,就必須透過即時啟動 Amazon EC2 執行個體來增加 (橫向擴充) 叢集容量,並等待這些執行個體啟動完成後才能在其上部署容器。這會大幅降低任務啟動速率。對此,您有兩種選擇。

在這種情況下,若事先啟動並準備好可用於執行任務的 Amazon EC2 備用容量,即能提高有效的任務啟動速率。您可以透過 Target Capacity 組態來指定希望叢集維持的備用容量。例如,將 Target Capacity 設定為 80%,即指定叢集需隨時保留 20% 的備用容量。這些備用容量可讓任何獨立任務立即啟動,確保任務啟動不會受到限流。但此方法的權衡在於,維持叢集備用容量可能會增加成本。

另一種替代方法是為服務增加緩衝空間,而非為容量提供者設定。這意味著,您不必透過降低 Target Capacity 組態來啟動備用容量,而是可以藉由修改服務自動擴展的目標追蹤擴展指標或步進擴展閾值,直接增加服務中的副本數量。請注意,此方法僅對突發性工作負載有效;在部署新服務並首次從 0 擴展至 N 個任務時,則無法發揮作用。如需有關相關擴展政策的詳細資訊,請參閱《Amazon Elastic Container Service 開發人員指南》中的目標追蹤擴展政策步進擴展政策