如何為 Amazon ECS 使用 Fargate Spot 容量供應商?

3 分的閱讀內容
0

我想為 Amazon Elastic Container Service (Amazon ECS) 使用 AWS Fargate Spot 容量提供商。

簡短描述

在開始之前,請記住以下事項:

  • 不需要建立 Fargate 和 Fargate Spot 容量提供者。它們適用於所有帳戶,只需要與叢集建立關聯即可使用。
  • Fargate Spot 容量提供者可以使用 ECS PutClusterCapacityProviders API 和 ECS put-cluster-capacity-providers CLI 命令參考與現有叢集關聯。使用 AWS 管理主控台不支援將 Fargate Spot 容量提供者新增至現有叢集。
  • Fargate 和 Fargate Spot 容量提供者是保留的,無法刪除。您可以使用 PutClusterCapacityProviders API 將它們與叢集取消關聯。
  • Fargate Spot 要求您的任務使用平台版本 1.3.0 或更高(適用於 Linux),並且Fargate Spot 上的 Windows 容器不支持 Fargate 容量提供程序。

解決方法

**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI

建立、關聯以及取消 Fargate Spot 容量提供者與您叢集的關聯

當使用僅限聯網的叢集範本從 Amazon ECS 主控台建立時,Fargate Spot 容量提供者會自動與叢集建立關聯。如需詳細資訊,請參閱使用新主控台建立 Fargate 啟動類型的叢集

**將 Fargate Spot 容量提供者與您的叢集建立關聯 **

如果 Fargate Spot 容量提供者尚未關聯,您可以使用PutClusterCapacityProviders API 或下列 AWS CLI 命令,將容量提供者與叢集建立關聯:

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE FARGATE_SPOT \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --region <Region>

**重要事項:**若要避免覆寫容量提供者,請將所有現有的容量提供者和容量提供者策略納入前面的命令中。未包含在命令中的容量提供者會與叢集取消關聯。

**將 Fargate Spot 容量提供者與您的叢集分離 **

任何與叢集關聯的現有容量提供者,且 PutClusterCapacityProviders API 調用省略的現有容量提供者都將與叢集取消關聯。若要取消 Fargate Spot 容量提供者與 Amazon ECS 叢集的關聯,請執行以下 AWS CLI 命令:

aws ecs put-cluster-capacity-providers \
        --cluster <Cluster_name> \
        --capacity-providers FARGATE \
        --default-capacity-provider-strategy capacityProvider=FARGATE,weight=1 \
        --region <Region>

確認您的 Fargate Spot 容量供應商與您的 Amazon ECS 叢集相關聯

若要確認 Fargate Spot 容量提供者是否與您的 Amazon ECS 叢集相關聯,請執行下列命令:

aws ecs describe-clusters \
        --cluster <Cluster_name> \
        --region <Region>

輸出看起來類似於以下內容:

Output:
      "capacityProviders": [
           "FARGATE",
           "FARGATE_SPOT"
      ]

注意:上述命令的輸出包括capacityProviders區段,其中包含與 Amazon ECS 叢集相關聯的容量提供者。

使用 Fargate Spot 容量提供者執行工作或建立服務

若要使用 Fargate Spot 容量提供者執行工作,請執行下列命令:

aws ecs run-task \
        --cluster <Cluster_name> \
        --capacity-provider-strategy capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_definition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --count <Number_of_Tasks> \
        --region <Region>

若要建立使用 Fargate Spot 容量供應商的 Amazon ECS 服務,請執行下列命令:

aws ecs create-service \
        --cluster <Cluster_name> \
        --service-name <Service_name> \
        --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \
        --task-definition <Task_defintition_family>:<revision> \
        --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \
        --desired-count <Number_of_tasks> \
        --region <Region>

確認您的工作是否在 Fargate Spot 容量提供者上執行

若要確認您的工作使用 Fargate 容量提供者,請執行下列命令:

aws ecs describe-tasks
        --cluster <Cluster_name> \
        --tasks <TaskID> \
        --region <Region>

目前不支援追蹤來自 Amazon CloudWatch 的每項服務的 Fargate OnDemand 和Fargate Spot 使用量。不過,您可以使用 CloudWatch 查看總 Fargate OnDemand 和 Spot 使用量的指標。如需詳細資訊,請參閱 AWS Fargate 使用指標

常見問題

什麼是 Fargate Spot 的最佳實踐?

  • Fargate Spot 非常適合無狀態、容錯的工作負載,但不要僅依賴 Spot 任務來處理關鍵工作負載。相反,配置常規 Fargate 任務的混合。
  • 通過捕獲 ** SIGTERM 信號來優雅地處理中斷。收到 SIGTERM 訊號時,最佳做法是將StopTimeout**設定為 120 秒。如需詳細資訊,請參閱使用 ECS 進行正常關機
  • 在 Fargate Spot 上運行的應用程序必須具有容錯能力。

當 FARGATE\ _SPOT 容量不可用時,任務會發生什麼情況?

當 ECS 排程器因容量不可用而無法啟動任務時,會發出SERVICE_TASK_PLACEMENT_FAILURE ** 事件。工作不會進入第一階段PROVISIONING且 ECS 事件中不會顯示通知。ECS 排程器將繼續嘗試啟動工作。如果容量變為可用,則SERVICE_STEADY_STATE** 事件將發出。

當沒有可用的 Fargate Spot 容量時,是否存在容錯移轉到 Fargate?

當沒有可用的 FARGATE\ _SPOT 容量時,不可以將故障返回機制給 FARGATE

在 ECS 服務中使用容量提供者時,工作如何放置的範例是什麼?

在此範例中,容量提供者策略包含下列兩個容量提供者:

Provider 1: FARGATE      |  Base:2   Weight:1
Provider 2: FARGATE_SPOT |  Base:0   Weight:3

根據此策略,在滿足基本值之後,對於使用 FARGATE, 運行的每一個任務,三個任務都使用 FARGATE\ _SPOT。當建立 ECS 服務時,所需的計數為 ** 5**,則會發生下列情況:

  • 使用FARGATE 啟動2個任務以滿足基值,其餘3 個任務以 1:3的比例在FARGATEFARGATE_SPOT 之間分配。

  • 使用FARGATE3 個任務和 ** 2 ** 個在FARGATE_SPOT中運行的任務。

使用此相同的策略,發生的向外擴展事件,並且所需的計數增加到 ** 9**。ECS 調度程序將看到 3 個任務已經使用了滿足基礎FARGATE 運行。此外,它還會看到處於PROVISIONING 狀態的新 4 個任務以 1:3 的比例在 FARGATEFARGATE_SPOT 之間分配。最後的 4個任務是使用FARGATE5 任務在FARGATE_SPOT運行。


AWS 官方
AWS 官方已更新 2 年前