AWS 自动扩展和 Spot 实例

Posted

技术标签:

【中文标题】AWS 自动扩展和 Spot 实例【英文标题】:AWS autoscaling and spot instances 【发布时间】:2020-05-12 09:46:43 【问题描述】:

我正在处理我的小项目,并混合使用现场实例和按需实例。我需要设置自动缩放以仅在不同的 AZ 中启动 Spot 实例。 例如,所需的实例数是 3,我们有 4 个可用区来放置它们。自动缩放尝试将实例放置在不同的 AZ 中,但如果失败,它会在同一个 AZ 中启动它们,这是我不想要的。

我想使用另一种逻辑。如果 Autoscaling 无法将所有 Spot 实例放置在不同的 AZ 中,它会改为启动按需实例。是否可以使用我们拥有的工具进行设置?

我想避免几个 Spot 实例最终在同一个 AZ 中的情况,因为如果 AZ 容量下降,亚马逊会迅速终止它们,我将没有时间在其他地方重新启动它们。

【问题讨论】:

您在使用启动模板吗? docs.aws.amazon.com/autoscaling/ec2/userguide/… 使用启动模板而不是带有自动缩放组的启动配置将提供所需的行为 不,不会。一个模板让我可以指定现货和按需实例之间的预设平衡,但它不会让自动缩放首先尝试使用现货实例,如果不可能使用按需实例。 【参考方案1】:

如果您希望避免 Spot 实例失去容量,那么一个好的策略是:

使用多种实例类型:如果一种类型的 Spot 实例因容量不足而终止,则其他实例类型不太可能同时受到影响 将实例分布在跨可用区(正如您所做的那样),因为每个 AZ 中的容量池是独立的

Auto Scaling 将自动尝试跨可用区平衡 EC2 实例的数量。 Auto Scaling 在任何时候都只能有一个活动的启动配置或启动模板。因此,它不能在按需实例和现场实例之间自动切换。

您可能想查看Launching an EC2 Fleet,它可以跨多个可用区自动启动一系列不同的实例类型。还有一些推荐的EC2 Fleet Configuration Strategies。

【讨论】:

我想应用自动缩放将首先使用现场实例的逻辑,如果失败,请尝试使用按需实例。 有没有办法限制自动缩放以在同一个 AZ 中启动实例?如果不可能将它们全部放在不同的 AZ 中,我完全可以不启动实例。 Auto Scaling 无法使用 Spot,如果失败,请按需使用。您需要进行额外的编码(以某种方式)来实现这一点。如果可能,Auto Scaling 将始终尝试将实例放在单独的 AZ 中。您无法更改此行为。 约翰·罗滕斯坦,够公平的。我预计亚马逊不会提供让他们的客户省钱的工具 :)))))) 现在我正在考虑如何编写此功能。 相反,提供了许多节省资金的工具,例如 Spot Instances、Trusted Advisor 和 Auto Scaling 本身(在不需要容量时进行缩减)。但是,Auto Scaling 一次只能有一个配置。

以上是关于AWS 自动扩展和 Spot 实例的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 CloudWatch 警报扩展 AWS Spot 实例吗?

使用 terraform 自动扩展 AWS spotfleet 会重置目标容量

AWS 实例调度程序和自动扩展组

AWS 中的弹性 IP 和自动扩展

使用用户定义的参数来控制 AWS ELB 实例的自动扩展

当实例连接到自动扩展组时,AWS EC2 如何更改实例类型?