我们有一个运行容器的AutoScaling组(使用ECS)。当我们在ASG中添加OR替换EC2实例时,它们没有我们想要的docker镜像。因此,我们使用cloud-init运行一些docker pull
命令,以便在启动时获取图像。
但是,ASG认为新实例已准备就绪,并终止旧实例。但实际上,在拉出所有泊坞窗图像之前,这个新实例还没有准备就绪。
E.g。 假设我的ASG所需数量是5,我必须使用cloud-init来拉5个容器。现在,我想替换ASG中的所有EC2实例。
当新实例开始启动时,ASG将终止旧实例。但由于docker pull
滞后,部署期间会有一段时间,当实际有效实例将小于3或2时。
如何在cloud-init完成时“标记实例准备好” ?
注意:我认为Cloudformation可以使用CFN-Bootstrap弥补这种沟通鸿沟。但我没有使用Cloudformation。
答案 0 :(得分:2)
你看起来是AutoScaling Lifecycle Hooks。您可以将实例保持在Pending:Wait状态,直到Docker pull完成为止。然后,您可以将实例移动到InService。所有这一切都可以通过AWS CLI完成,因此应该可以在docker命令之前和之后使用AWS AutoScaling命令实现。
我提供的文档链接详细说明了此功能,并提供了有关如何使用它的很好示例。