当任务用尽所有容器的资源时,是否可以通过滚动更新在 AWS ECS 上实现无停机时间部署?

当任务用尽所有容器的资源时,是否可以通过滚动更新在 AWS ECS 上实现无停机时间部署?

目前,我有一个 ECS 集群正在运行一项服务,该服务每个容器实例运行一个任务,每个任务几乎占用了容器实例的所有资源。我想知道是否有某种方法,也许可以通过设置任务数量、最低健康百分比、服务的最大百分比以及容量提供程序来实现这一点,一旦要部署新任务版本,就会启动一个新的容器实例,一旦准备就绪,就会删除旧的容器实例。

因此,在部署期间使用 2 个容器实例,一个是旧容器实例,另一个是为新任务定义启动的容器实例,最后删除旧容器实例,部署完成后只留下 1 个容器实例运行。

答案1

如果您使用 ECS 集群自动扩展,集群将根据需要自动添加新实例以在部署期间放置任务。或者,您可以使用 Fargate,而完全不必担心 EC2 实例扩展。

答案2

这通常称为蓝/绿部署,其描述如下这里。记得给旧容器一些时间来排空连接,以便所有流量都流向新容器。

简而言之,ECS 可以为您做到这一点。

当您更新现有 Amazon ECS 服务时,Amazon Elastic Container Service (ECS) 会执行滚动更新。滚动更新涉及将容器的当前运行版本替换为最新版本。滚动更新期间 Amazon ECS 从服务中添加或删除的容器数量通过调整服务部署期间允许的最小和最大健康任务数量来控制。

当您使用最新版本的容器映像更新服务的任务定义时,Amazon ECS 会自动开始用最新版本替换旧版本的容器。在部署期间,Amazon ECS 会耗尽当前正在运行版本的连接,并在新容器上线时将其注册到应用程序负载均衡器。

相关内容