Amazon ECS 受管擴展行為 - Amazon Elastic Container Service

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

Amazon ECS 受管擴展行為

當您有使用受管擴展的 Auto Scaling 群組容量提供者時,Amazon ECS 會預估要新增至叢集的最佳執行個體數量,並使用 值來決定要請求或發行的執行個體數量。

受管向外擴展行為

Amazon ECS 會遵循服務、獨立任務或叢集預設值中的容量提供者策略,為每個任務選取容量提供者。Amazon ECS 會針對單一容量供應商遵循這些步驟的剩餘步驟。

沒有容量提供者策略的任務會被容量提供者忽略。沒有容量提供者策略的等待中任務不會導致任何容量提供者橫向擴展。如果任務或服務設定了啟動類型,則任務或服務無法設定容量提供者策略。

以下詳細說明向外擴展行為。

  • 將此容量提供者的所有佈建任務分組,以便每個群組具有相同的精確資源需求。

  • 當您在 Auto Scaling 群組中使用多個執行個體類型時,Auto Scaling 群組中的執行個體會依其參數排序。這些參數包含 vCPU、記憶體、彈性網路介面 (ENI)、連接埠和 GPU。為每個參數選取最小和最大的執行個體類型。如需如何選擇執行個體類型的詳細資訊,請參閱 Amazon ECS 的 Amazon EC2 容器執行個體

    重要

    如果一組任務的資源需求大於 Auto Scaling 群組中最小執行個體類型,則該任務群組無法使用此容量提供者執行。容量提供者不會擴展 Auto Scaling 群組。任務會維持在 PROVISIONING 狀態。

    為了防止任務停留在 PROVISIONING 狀態,建議您針對不同的最低資源需求,建立個別的 Auto Scaling 群組和容量提供者。當您執行任務或建立服務時,請僅將容量提供者新增至可以在 Auto Scaling 群組中最小執行個體類型上執行任務的容量提供者策略。對於其他參數,您可以使用置放條件限制

  • 針對每個任務群組,Amazon ECS 會計算執行未放置任務所需的執行個體數目。此計算會使用 binpack 策略。此策略會說明任務的 vCPU、記憶體、彈性網路介面 (ENI)、連接埠和 GPU 需求。其也會說明 Amazon EC2 執行個體的資源可用性。最大執行個體類型的值會被視為所計算執行個體數目的最大值。最小執行個體類型的值會作為保護使用。如果最小的執行個體類型無法執行任務至少一個執行個體,則計算會認為該任務不相容。因此,任務會排除在橫向擴展計算之外。當所有任務都與最小執行個體類型不相容時,叢集自動擴展將會停止,而且 CapacityProviderReservation 值仍為 targetCapacity 值。

  • 如果是下列情況之一,Amazon ECS 會依照 minimumScalingStepSizeCapacityProviderReservation 指標發佈到 CloudWatch:

    • 計算的執行個體計數上限小於擴展步驟大小下限。

    • maximumScalingStepSize 或計算執行個體計數上限的較低值。

  • CloudWatch 警示會使用容量提供者的 CapacityProviderReservation 指標。當 CapacityProviderReservation 指標大於 targetCapacity 值時,警示也會增加 Auto Scaling 群組的 DesiredCapacitytargetCapacity 值是在叢集自動擴展活動期間,傳送到 CloudWatch 警示的容量提供者設定。

    預設值targetCapacity為 100%。

  • Auto Scaling 群組會啟動其他 EC2 執行個體。為避免過度佈建,Auto Scaling 會確保最近啟動的 EC2 執行個體容量在啟動新執行個體之前已穩定。Auto Scaling 會檢查是否所有現有的執行個體都已超過 instanceWarmupPeriod (現在時間減去執行個體啟動時間)。對於位於 內的執行個體,會封鎖向外擴展instanceWarmupPeriod

    新啟動執行個體的暖機預設秒數為 300 秒。

如需詳細資訊,請參閱 Deep dive on Amazon ECS cluster auto scaling (《深入瞭解 Amazon ECS 叢集自動擴展》)。

擴增注意事項

使用擴增程序時,請注意以下事項:

  • 儘管存在多個置放限制條件,我們建議您只使用 distinctInstance 任務置放限制條件。此舉可以防止橫向擴展程序停止,因為您使用的置放限制條件與取樣的執行個體不相容。

  • 如果 Auto Scaling 群組使用相同或類似的執行個體類型,則受管擴展效果最佳。

  • 當需要橫向擴展程序且目前沒有正在執行的容器執行個體時,Amazon ECS 一開始會一律橫向擴展至兩個執行個體,再執行額外橫向擴展或縮減程序。任何額外的橫向擴展都會等待執行個體暖機期間。關於縮減流程,Amazon ECS 會在橫向擴展程序後等待 15 分鐘,然後隨時開始縮減程序。

  • 第二個橫向擴展步驟需要等到 instanceWarmupPeriod 過期,這可能會影響整體擴展限制。如果您需要減少此時間,請確定 instanceWarmupPeriod 的大小足以讓 EC2 執行個體啟動和啟動 Amazon ECS 代理程式 (防止過度佈建)。

  • 叢集自動擴展支援容量提供者 Auto Scaling 群組中的啟動組態、啟動範本和多種執行個體類型。您還可以使用屬性型執行個體類型選取範圍,而不使用多種執行個體類型。

  • 將 Auto Scaling 群組與隨需執行個體和多個執行個體類型或 Spot 執行個體搭配使用時,較大的執行個體類型的優先級更高,並且不要指定權重。目前不支援指定權重。如需詳細資訊,請參閱 AWS Auto Scaling 使用者指南中的具有多個執行個體類型的 Auto Scaling 群組

  • 然後,如果計算出的執行個體計數上限小於擴展步驟大小下限,或為 maximumScalingStepSize 或計算出的執行個體計數上限中的較小者,則 Amazon ECS 會啟動 minimumScalingStepSize

  • 如果 Amazon ECS 服務或 run-task啟動任務,且容量提供者容器執行個體沒有足夠的資源來啟動任務,則 Amazon ECS 會限制每個叢集具有此狀態的任務數量,並防止任何任務超過此限制。如需詳細資訊,請參閱Amazon ECS 服務配額

受管縮減行為

Amazon ECS 會監控叢集中每個容量提供者的容器執行個體。當容器執行個體未執行任務時,容器執行個體會被視為空白,Amazon ECS 會開始縮減程序。

CloudWatch 縮減警示需要 15 個資料點 (15 分鐘),然後才能開始 Auto Scaling 群組的縮減程序。在縮減程序開始後直到 Amazon ECS 需要減少已註冊的容器執行個體數量,Auto Scaling 群組將 DesireCapacity 值設定為大於一個執行個體且每分鐘小於 50%。

如果 Amazon ECS 在縮減程序進行期間請求橫向擴展 (CapacityProviderReservation 大於 100 時),縮減程序將停止,並在需要時從頭開始。

以下內容會詳細介紹縮減行為:

  1. Amazon ECS 會計算空白容器執行個體的數量。即使常駐程式任務正在執行,則會將容器執行個體視為空白。

  2. Amazon ECS 會將 CapacityProviderReservation 值設定為介於 0-100 之間的數字,此數字會使用下列公式來表示 Auto Scaling 群組需要相對於其實際大小的比率,並以百分比表示。之後,Amazon ECS 會將指標發佈到 CloudWatch。如需指標計算方式的詳細資訊,請參閱深入了解 Amazon ECS 叢集自動擴展

    CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
  3. CapacityProviderReservation 指標會產生 CloudWatch 警示。此警示會更新 Auto Scaling 群組的 DesiredCapacity 值。然後,執行下列其中一個動作:

    • 如果您不使用容量提供者受管終止,Auto Scaling 群組會選擇使用 Auto Scaling 群組終止政策的 EC2 執行個體,並終止執行個體,直到 EC2 執行個體數量達到 DesiredCapacity。之後,從叢集中取消註冊容器執行個體。

    • 如果所有容器執行個體都使用受管終止保護,則 Amazon ECS 會移除空白容器執行個體的縮減保護。之後,Auto Scaling 群組能夠終止 EC2 執行個體。之後,從叢集中取消註冊容器執行個體。