【问题标题】:ECS Rolling Update : Healthy task killedECS 滚动更新:健康的任务被杀死
【发布时间】:2019-04-22 21:15:13
【问题描述】:

我有一个现有服务正在运行 2 个任务。我用一个新的任务定义更新了现有的服务,旧的被删除了。新任务未能启动,但旧任务被终止,服务尝试启动新任务但失败。这会导致根本没有任务运行的情况。 新任务无法出现的原因是我的代码中存在错误。但是,ECS 不应该确保旧的健康任务在新任务未启动时仍在运行。

ECS 何时决定终止旧任务? 我知道这是当任务状态变为“正在运行”时。 “跑步”是否意味着健康?进一步调试,发现问题任务处于运行状态一段时间。

【问题讨论】:

    标签: amazon-web-services docker amazon-ecs


    【解决方案1】:

    好吧,让我解释一下发生了什么:

    当您更新您的任务定义(其中您假设有一些任务正在运行)时,ECS 会尝试执行蓝绿部署,即等待新任务处于 ready 状态,然后停止旧的。

    现在,当容器启动时,你的任务会进入就绪状态,但是当它试图执行一些内部有错误的代码时,它会崩溃并死掉,所以它会再次改变它的状态,但它已经通过了ready 状态,因此旧任务已被终止。

    【讨论】:

    • 谢谢 该服务支持 ALB。它不检查任务是否健康吗?如果没有,您能否提出一个更好的方法来处理这个问题。在我的情况下,应用程序需要将近 15 秒才能启动,并且有一段时间新旧任务都在运行但新任务不健康(ALB 健康检查会失败)
    • 参考这个*.com/questions/51425983/…,我认为它可能会有所帮助。
    • 你成功了吗?
    • 我与 AWS 团队进行了讨论,并认为如果新任务不健康,ECS 不会杀死旧任务。当服务与 ALB 绑定时,ECS 不会取消注册旧任务,直到 ALB 将新任务返回为健康状态。
    【解决方案2】:

    我与 AWS 团队进行了讨论,并认为如果新任务不健康,ECS 不会杀死旧任务。当服务与 ALB 绑定时,ECS 不会取消注册旧任务,直到 ALB 将新任务标记为健康。

    【讨论】: