Amazon Elastic Container Service (Amazon ECS) 任务需要很长时间才能进入 STOPPED 状态。或者,当容器实例设置为 DRAINING 时,Amazon ECS 任务卡滞在 RUNNING 状态。
简短描述
当您将 ECS 实例设置为 DRAINING 时,Amazon ECS 将阻止安排放置在该容器实例上的新任务。Amazon ECS 会立即停止处于 PENDING 状态的服务任务。Amazon ECS 会将处于 RUNNING 状态的服务任务过渡到 STOPPED 状态。处于 PENDING 或 RUNNING 状态的独立任务不受影响。要停止独立任务,请等待其自行停止或手动停止。
配置参数或任务出现问题可能会使任务停留在 RUNNING 状态,或延迟其向 STOPPED 状态的过渡。
要对这些问题进行故障排除,请完成以下任务:
- 更新您的 DeploymentConfiguration 参数
- 更新取消注册延迟值
- 更新 ECS_CONTAINER_STOP_TIMEOUT 值
- 查找其他与任务相关的问题
解决方法
要排查需要很长时间才能停止的 Amazon ECS 任务,请完成以下任务。
更新您的 DeploymentConfiguration 参数
完成以下步骤:
- 打开 Amazon ECS 控制台。
- 在导航窗格中,选择 Clusters(集群)。然后,选择您的容器实例即将耗尽的集群。
- 选择 Infrastructure(基础设施)选项卡。
- 在 Container instances(容器实例)下,按 Status(状态)筛选出 DRAINING。
- 选择您的容器实例,然后为即将耗尽或需要很长时间才能耗尽的任务找出相应的服务。
- 选择 Services(服务)选项卡,选择相应服务,然后选择 Deployments(部署)。
- 查看 minimumHealthyPercent 和 maximumPercent 的值。
注意: 容器实例上处于 RUNNING 状态的服务任务将停止并根据服务的部署配置参数进行替换。有关详细信息,请参阅耗尽 Amazon ECS 容器实例。
更新取消注册延迟值
重要信息: 以下步骤仅适用于使用应用程序负载均衡器或网络负载均衡器的服务。如果服务使用的是经典负载均衡器,请检查连接耗尽值。
完成以下步骤:
- 打开 Amazon ECS 控制台。
- 在导航窗格中,选择 Clusters(集群),然后选择容器实例即将耗尽的集群。
- 选择 Services(服务)选项卡,然后选择堆栈卡滞在 RUNNING 状态的服务。
- 选择 Target Group Name(目标组名称)。
- 在 Details(详细信息)选项卡上,向下滚动,然后选中 Deregistration delay(取消注册延迟)复选框。
更新 ECS_CONTAINER_STOP_TIMEOUT 值
完成以下步骤:
-
使用 Secure Shell (SSH) 连接到您的容器实例。
-
要查找 ECS_CONTAINER_STOP_TIMEOUT 的值,请运行以下命令:
docker inspect ecs-agent --format '{{json .Config.Env}}'
-
如果存在 ECS_CONTAINER_STOP_TIMEOUT 的值,请检查该持续时间值。
注意: ECS_CONTAINER_STOP_TIMEOUT 是一个 ECS 容器代理参数,用于定义 Amazon ECS 在终止容器之前需要等待的时间。任务停止后,开始计时。如果输出中未显示 ECS_CONTAINER_STOP_TIMEOUT 参数,则 Amazon ECS 使用 30 秒的默认值。
查找其他与任务相关的问题
要查找其他与任务相关的问题,请使用 SSH 连接到您的 Linux 实例。然后,完成以下任务:
相关信息
耗尽 Amazon ECS 容器实例