0

我们有一个运行容器(使用 ECS)的 AutoScaling 组。当我们在 ASG 中添加或替换 EC2 实例时,它们上没有我们想要的 docker 映像。因此,我们使用 cloud-init 运行一些docker pull命令来在它们启动时获取图像。

但是,ASG 认为新实例已准备好,并终止旧实例。但实际上,在所有 docker 镜像都被拉取之前,这个新实例还没有准备好。


例如,假设我的 ASG 的期望计数是 5,我必须使用 cloud-init 拉出 5 个容器。现在,我想替换我的 ASG 中的所有 EC2 实例。

随着新实例开始启动,ASG 将终止旧实例。但是由于docker pull延迟,在部署过程中会有一段时间,实际有效实例会少于 3 或 2 个。


当 cloud-init 完成时,如何“将实例标记为就绪” ?

注意:我认为 Cloudformation 可以使用 CFN-Bootstrap 弥合这种沟通鸿沟。但我没有使用 Cloudformation。

4

1 回答 1

2

您看到的是AutoScaling Lifecycle Hooks。您可以将实例保持在 Pending:Wait 状态,直到 docker pull 完成。然后,您可以将实例移动到 InService。所有这些都可以通过 AWS CLI 完成,因此应该可以在 docker 命令之前和之后使用 AWS AutoScaling 命令来实现。

我提供的文档链接详细解释了这个特性,并提供了如何使用它的很好的例子。

于 2016-03-23T14:46:05.673 回答