如何将 Fargate Spot 容量提供商用于 Amazon ECS?

3 分钟阅读
0

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

简短描述

在开始之前,请考虑以下事项:

  • 无需创建 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 上的 Windows 容器不支持 Fargate Spot 容量提供程序。

解决方法

**注意:**如果在运行 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 和竞价总使用量的指标。有关更多信息,请参阅 AWS Fargate 使用指标

常见问题

Fargate Spot 有哪些最佳实践?

  • Fargate Spot 非常适合无状态、容错的工作负载,但关键工作负载不能仅仅依赖 Spot Tasks。相反,您可以混合配置常规 Fargate Tasks。
  • 通过捕捉 SIGTERM 信号,从容地处理中断问题。当接收 SIGTERM 信号时,最佳做法是将 StopTimeout 设置为 120 秒。有关更多信息,请参阅 Graceful shutdowns with ECS
  • 在 Fargate Spot 上运行的应用程序必须具有容错能力。

当 FARGATE_SPOT 容量不可用时,任务会怎样?

当 ECS 调度器由于容量不可用而无法启动任务时,将触发 SERVICE_TASK_PLACEMENT_FAILURE 事件。Task 不会进入 PROVISIONING(调配)的第一阶段,并且不会在 ECS Events 中显示通知。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 个任务在 FARGATEFARGATE_SPOT 之间以 1:3 的比例分配。
  • 3 个任务使用 FARGATE 运行,2 个任务在 FARGATE_SPOT 运行。

使用相同的策略,发生横向扩展事件,并且所需的计数增加到 9。ECS 调度器将看到,已经使用 FARGATE 运行了3 个任务,并且满足基本要求。此外,它将看到处于PROVISIONING(调配)状态的新 4 个任务在 FARGATEFARGATE_SPOT 之间以 1:3 的比例分配。最后 4 个任务使用 FARGATE 运行,并且有 5 任务在 FARGATE_SPOT 中运行。


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