使用 Cloudformation 和 Spot 实例执行 RollingUpdate

Posted

技术标签:

【中文标题】使用 Cloudformation 和 Spot 实例执行 RollingUpdate【英文标题】:Perform RollingUpdate using Cloudformation with Spot Instances 【发布时间】:2018-06-04 11:59:18 【问题描述】:

我正在使用 cloudformation UpdatePolicy 属性来执行滚动更新,以防我的 ec2 启动配置发生任何更改。这在使用按需实例时效果很好。但是当我使用现场实例时,我得到以下错误:

Autoscaling rolling updates cannot be performed because the current launch configuration is using spot instances and MinInstancesInService is greater than zero.

MinInstancesInService 属性设置为零使其工作,但我得到大约 3-5 分钟的停机时间。

有没有办法在不停机的情况下使用 Cloudformation 实现这一目标?如果没有的话,有人可以指出一种更好的方法来自动化这个滚动更新过程,因为我有多个环境并且手动执行非常容易出错。谢谢

【问题讨论】:

【参考方案1】:

在使用 Spot 实例时,您不能将 MinInstancesInService 设置为 0 以外的任何值,因为 Spot 实例可以随时终止,因此 AWS 无法保证在滚动期间保持服务的最少实例数更新。

但是,您可以将 UpdatePolicy 中的 MaxBatchSize 参数设置为 1,因此一次只会更新一个实例。为确保高可用性,您必须确保 AutoScalingGroup 中有 2 个或更多实例可用,否则滚动更新将终止您的单个实例,从而导致停机。

【讨论】:

以上是关于使用 Cloudformation 和 Spot 实例执行 RollingUpdate的主要内容,如果未能解决你的问题,请参考以下文章

AWS 自动扩展和 Spot 实例

如何限制 ASG 中 Spot 实例池的数量?

VPC 内的 Terraform Spot 实例

Echo Spot使用内置摄像头录制视频 - 自定义技能

boto3:Spot 实例创建

泥点spot