Amazon ECS 服务节流逻辑 - Amazon Elastic Container Service

Amazon ECS 服务节流逻辑

Amazon ECS 服务计划程序包含限制服务任务在反复启动失败后再启动的频率逻辑。

如果某个服务的任务始终无法进入 RUNNING 状态(直接从 PENDING 跳到 STOPPED 状态),则后续重启尝试间隔的时间会逐渐延长,最多达到 27 分钟。此最长周期将来可能会发生变化。此行为降低了失败任务对 Amazon ECS 集群资源或 Fargate 基础设施成本的不利影响。如果您的服务启动了限制逻辑,则您会收到以下服务事件消息

(service service-name) is unable to consistently start tasks successfully.

Amazon ECS 永远不会阻止失败的服务重试。除了延长重启的间隔时间外,它也不会尝试以任何方式对其进行修改。服务限制逻辑不提供任何用户可调参数。

如果您将服务更新为使用新的任务定义,则您的服务会立即返回到正常的无限制状态。有关更多信息,请参阅 使用控制台更新 Amazon ECS 服务

以下是触发此逻辑的一些常见原因。建议您采取手动措施来解决此问题:

  • 集群中缺乏用来托管任务的资源,如端口、内存或 CPU 单位。在这种情况下,您还会看到资源不足服务事件消息

  • Amazon ECS 容器代理无法提取任务 Docker 映像。这可能是因为容器映像名称、映像、标签错误,或者缺少私有注册表身份验证或权限。在这种情况下,您还会在CannotPullContainerError停止的任务错误中看到

  • 您的容器实例上的磁盘空间不足,无法创建容器。在这种情况下,您还会在CannotCreateContainerError停止的任务错误中看到 。有关更多信息,请参阅 对 Amazon ECS 中的 Docker API error (500): devmapper 进行故障排除

重要

进入 RUNNING 状态后停止的任务不会启动限制逻辑或相关服务事件消息。例如,假设因服务的 Elastic Load Balancing 运行状况检查失败而导致某个任务被标记为运行状况不佳,则 Amazon ECS 会将其注销并停止该任务。此时,任务没有受到限制。即使任务的容器命令立即退出并伴随非零退出代码出现,该任务也已转为 RUNNING 状态。由于命令错误而立刻失败的任务不会导致限制或服务事件消息。