我应该如何配置 AWS Auto-Scaling Group mixed_instances 策略以仅允许具有多个 EC2 instance_types 的 Spot 实例?

Posted

技术标签:

【中文标题】我应该如何配置 AWS Auto-Scaling Group mixed_instances 策略以仅允许具有多个 EC2 instance_types 的 Spot 实例?【英文标题】:How should I configure an AWS Auto-Scalling Group mixed_instances_policy to only allow for spot_instances with multiple EC2 instance_types? 【发布时间】:2021-01-20 18:19:12 【问题描述】:

我有一个 AWS Auto-Scalling 组,它根据特定 SQS 队列中的消息量生成(或关闭)一台 EC2 机器。这按预期工作,但有时我会收到以下错误:

启动一个新的 EC2 实例。状态原因:无法启动 Spot 实例。 InsufficientInstanceCapacity - 没有 Spot 容量 可满足您的要求。启动 EC2 实例失败。

我认识的一个 DevOps 人员告诉我“将 spot_instance_pools 的数量增加到 20 并添加更多 instance_types”。

我做了一些研究,发现the default number of spot_instance_pools is 2。 AWS 控制台上显示了相同的数字。每当我遇到这个问题时,我都会部署一个更改 EC 实例类型的新脚本并且它可以工作,所以这两个建议对我来说似乎都是有效的。

问题是我当前的 Terraform 脚本没有封闭的 mixed_instances_policy 并且我不确定如何将其配置为仅保留 on_spot 实例(因为它们更便宜)而没有 on_demand 实例。到目前为止,我想出了:

  mixed_instances_policy = 
    on_demand_percentage_above_base_capacity = 0
    spot_instance_pools                      = 20   
  

将其他值保留在 mixed_instances_policy 中并使用默认值对我来说就足够了。

但我不明白如何配置mixed_instances_policy launch_template。它是否嵌套在mixed_instances_policy 中?我也应该添加mixed_instances_policy launch_template override 吗?或者也许是一个launch_template_specification

TL;DR;

如何将 AWS Auto-Scalling 组混合实例策略配置为仅允许具有多个 EC2 实例类型的点实例?

【问题讨论】:

【参考方案1】:

on_demand_percentage_above_base_capacity = 0 行是您想要的行。根据您共享的文档和structure in the AWS doc,我想说它可能在instances_distribution 内部,这告诉ASG 按需启动0%(又名100% 现货)。在 mixed_instances_policy 中,您需要为要添加的实例类型添加 overrides(权重是可选的。权重是实例类型计入的所需容量单位的数量)。

此外,现货池的数量对您的用例而言并不重要。这就是说/如果一切都可用/每个可用区启动到那么多不同的点类型。不过,拥有更多池确实对可用性有所帮助,因为如果一个池变得供应受限,那么您不会立即终止所有实例,但这根本不会影响启动。

实际上,如果您想要更便宜的成本,您希望数字更低。因为如果您将分配策略设置为“最便宜的优先”,那么您希望每个 AZ 有几个池(因为那时它只有最便宜的几个池)。如果 AZ 中只有 1 种实例类型可用,则无论如何都会启动该实例类型。因此,您选择的覆盖数量是在启动时保持可用性的重要部分。

【讨论】:

以上是关于我应该如何配置 AWS Auto-Scaling Group mixed_instances 策略以仅允许具有多个 EC2 instance_types 的 Spot 实例?的主要内容,如果未能解决你的问题,请参考以下文章

Capistrano 和 Auto-Scaling AWS

AWS Beanstalk Auto-scaling Scaling Triggers with HealthyHostCount 或 UnhealthyHost count

Auto-Scaling 移除 ECS 服务中正在运行的任务 (FARGATE)

我应该如何配置 Apollo Nuxt 模块以向我的查询提供 AWS Amplify api 密钥?

如何使用有效的 AWS 配置文件配置 Alexa ask-cli?

如何在 Amazon Auto-scaling 组中的多个 ec2 实例上部署和更新应用程序?