如何将 Fargate Spot 容量提供商用于 Amazon ECS?
我想将 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 个任务在 FARGATE 和 FARGATE_SPOT 之间以 1:3 的比例分配。
- 3 个任务使用 FARGATE 运行,2 个任务在 FARGATE_SPOT 运行。
使用相同的策略,发生横向扩展事件,并且所需的计数增加到 9。ECS 调度器将看到,已经使用 FARGATE 运行了3 个任务,并且满足基本要求。此外,它将看到处于PROVISIONING(调配)状态的新 4 个任务在 FARGATE 和 FARGATE_SPOT 之间以 1:3 的比例分配。最后 4 个任务使用 FARGATE 运行,并且有 5 任务在 FARGATE_SPOT 中运行。

相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 个月前