我一直在努力寻找正确的词来准确描述我正在尝试做的事情,因此很可能会阻止我使用Google搜索的能力,这可能是一个简单的答案。我在亚马逊的ECS上部署了一项服务。当我推送新版本的Task定义以更新到较新的docker映像时,ECS会管理旋转新版本,然后完全按照您的期望旋转旧实例。
但是,这些旧实例具有客户关系,因此我想优雅地结束。如果允许旧实例只要有连接就可以继续运行,则我的服务将运行良好,我的应用程序基础结构的其他部分将确保新连接直接指向新容器。
Amazon是否公开了任何挂钩,我可以在其中自定义拆解旧容器的条件?如果不是这样,我想到的唯一另一个想法是使新版本完全成为另一个“服务”,并在所有连接都关闭后删除旧服务。这种“自己动手做”的解决方案将需要做更多的工作,而且更容易出错,但是...希望有更好的东西。
答案 0 :(得分:0)
您应该完整阅读this document page。
如果更新正在运行的服务的任务定义,ECS为您处理正常切换。只要来自新taskdef的任务运行状况良好,来自ALB /目标组的流量就会停止路由到旧任务,而只会进入新任务。旧任务一直保留到所有与它们的连接耗尽为止,因此可以轻松切换到新任务定义。
为您提供的拨号盘是最大和最小健康百分比。
默认值100和200表示在切换过程中最多可以运行2个所需的任务。如果您说了3个任务,则会启动3个新的taskdef任务,只有在新的任务通过运行状况检查之后,旧的任务才会被销毁,在任何给定的时间,运行的健康任务最少要运行3个。如果新任务执行不正常,旧任务将永远不会终止。