【问题标题】:Ensure ECS only kills old tasks when new ones are ready确保 ECS 仅在新任务准备就绪时终止旧任务
【发布时间】:2018-07-20 00:57:59
【问题描述】:

我们有基于 Docker 的 ECS 服务,一旦进程启动,它需要在准备好开始服务请求之前同步应用程序状态。这可能需要一些时间(进程开始后的数秒)。

使用 ECS 服务时,更改任务定义版本会触发任务的滚动替换(很好),但它执行得太快了。一旦一个任务达到RUNNING 状态,下一个任务就会被终止。但RUNNING 只是表示进程已启动,并不表示它已满足其自身所有准备工作的内部要求......在这种情况下,还没有准备好服务请求

整个更新过程发生得如此之快,以至于在某些情况下,所有旧任务都在任何新任务完成加载其状态之前被终止,最终导致中断。

什么是确保 ECS 服务在新任务真正热且完全在线之前不会终止旧/热任务的最佳或正确方法,而不仅仅是容器进程正在运行?

【问题讨论】:

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


    【解决方案1】:

    您可以通过设置以下参数来控制部署进行的速度:

    • deploymentConfiguration(特别是您的情况下的 minimumHealthyPercent
    • 启用运行状况检查(如果您使用负载平衡器,请使用 load balancer health checks 或使用 container health checks
    • 设置healthCheckGracePeriodSeconds(用于负载平衡器运行状况检查)或startPeriod(用于容器运行状况检查)以考虑启动同步时间。

    【讨论】:

    • 所以我明白了 - 任务替换过程,在更新服务的任务定义版本时运行,在考虑多低时尊重容器运行状况检查 + 宽限期(例如“优雅的不健康状态”)下降到 minimumHealthyPercent?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2021-07-11
    • 2020-12-03
    • 1970-01-01
    • 2019-12-16
    • 2019-12-15
    相关资源
    最近更新 更多