Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何将 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 中运行。
- 语言
- 中文 (简体)
