【问题标题】:INACTIVE task - how to kill themINACTIVE 任务 - 如何杀死他们
【发布时间】:2018-11-25 12:21:21
【问题描述】:

当我在 aws ecs 中创建任务的新修订版时,ecs 会根据请求创建两个新实例。

但是,其他两个保持不变:

AWS 确实知道,但这是不正确的:

为什么会这样?

我的生命值最低为 100%(两个任务),最高为 200%。

我的理解是它会启动两个新任务,然后杀死不活动的任务。但是那些不活跃的只是永远呆在那里(直到我手动杀死它们),在旧代码上做不可预测的事情。

【问题讨论】:

    标签: amazon-web-services amazon-ecs


    【解决方案1】:

    请注意,不是旧的tasks,而是旧的task-definition 处于非活动状态。您有两个正在使用 taskdef:34 的正在运行的任务和 2 个使用旧的、现在不活动的 taskdef 的旧任务。

    ECS/ALB 确实会立即停止将新请求路由到旧任务,但只要它们有活动连接,它们就会一直存在。这确实是一种实现零停机优雅切换的机制。如果您的应用保持长期连接,或者这是您交易的本质,那么您的旧任务将持续更长时间。

    如果您愿意,您可以选择旧任务并立即手动终止它们;甚至编写一个脚本来终止在旧 taskdefs 上运行的所有任务。不用说,这可能会破坏活动的连接/事务。

    【讨论】:

    • 这很有意义。那么一旦没有连接,aws 会关闭它吗?没有来自外部的长时间运行的连接。但是,这是否适用于任务定义之间的连接?该任务由一个 nginx/java 应用程序组成,并且 nginx 保持与上游 java 任务的连接。
    • 当 ECS 决定终止任务是安全的时,无法说出确切的内部实现,文档说“等待连接耗尽”。如果您不相信您的应用程序导致他们存活,您应该联系支持他们进行调查。也就是说,“等待连接耗尽”听起来确实包括任务间连接。
    • 我遇到了类似的问题。你有没有找到更好的方法来处理这个问题?
    • 在我看来,最好的办法是将逻辑合并到容器中,检查启动容器的任务定义是否“不活动”。如果是,则采取适当的措施。我目前正在寻找/编写执行此操作的 python 代码。
    猜你喜欢
    • 2019-05-19
    • 2021-04-28
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多