为什么具有 Amazon Linux 1 AMI 的 Amazon ECS 容器实例已断开连接?

2 分钟阅读
0

我的 Amazon Elastic Container Service (Amazon ECS) 容器实例已断开连接。

简短描述

您的 Amazon ECS 容器代理一小时可能会连接和重新连接多次。这些变更事件很正常,不需要担心。

但是,如果您的容器代理仍处于断开状态,则容器实例将不能作为 ECS 集群的一部分运行。当 agentConnected 返回 false 时,您的代理已断开连接。该问题可能是由于下列原因造成的:

  • 联网问题阻止实例与 Amazon ECS 之间的通信。
  • 该容器代理不具有与 Amazon ECS 终端节点通信所需要的 AWS Identity and Access Management (IAM) 权限。
  • 容器实例内的主机或 Docker 服务存在问题。

要确定连接断开的原因,请完成以下步骤。

解决方法

**注意:**以下分辨率适用于经 Amazon ECS 优化的 Amazon Linux 1 AMI。有关适用于 Amazon ECS 优化的 Amazon Linux 2 AMI 的解决方案,请参阅如何对断开连接的 Amazon ECS 代理进行故障排除?

验证 Docker 服务在容器实例上运行

1.    要验证 Docker 服务在受影响的容器实例上运行,请运行以下命令:

sudo service docker status

该命令输出类似于以下内容:

docker (pid 23013) is running...

如果 Docker 服务未运行,或者如果您需要重新启动该服务,请运行以下命令:

sudo service docker restart

注意:当服务正在运行时,请勿输入此命令。首先,请确保将容器实例设置为耗尽 状态。然后,重新启动 Docker 服务,以便在另一个容器实例上安排现有任务。

该命令的输出内容必须包含以下行:

Stopping docker: [  OK  ]
Starting docker: [  OK  ]

**注意:**要验证 Docker 服务在重启命令之后运行,请运行 sudo service docker status 命令。

2.    要启动 ECS 代理,请运行以下命令:

sudo start ecs

验证容器代理在容器实例上运行

要验证容器代理是否正在受影响容器实例上运行,请运行以下命令:

sudo status ecs

如果容器代理未在您的容器实例上运行,则运行以下命令来开启代理:

sudo start ecs

该命令输出类似于以下内容:

ecs start/running, process 23403

查看容器代理和 Docker 的日志文件

如果您的容器实例仍然断开连接,请查看容器代理和 Docker 的容器主机上的日志文件。

要为容器代理和 Docker 输出日志文件,请运行以下命令:

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

**注意:**要从容器实例中收集日志信息,请运行 Amazon ECS 日志收集器

验证 IAM 实例配置文件拥有必要的权限

如果容器代理仍然断开连接,请验证与容器实例关联的 IAM 实例配置文件拥有必要的 IAM 权限。

1.    使用 SSH 连接到实例

2.    要查看与实例相关的实例配置文件上的实例元数据,请运行以下命令:

curl http://169.254.169.254/latest/meta-data/iam/info

该命令输出类似于以下内容:

{
  "Code" : "Success",
  "LastUpdated" : "2019-06-29T15:47:03Z",
  "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
  "InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"
}

3.    验证 IAM 角色包含容器实例的正确权限

4.    要验证容器代理的特定凭证错误,请运行以下命令检查容器代理日志以获取 ECS 日志列表:

cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**

**注意:**容器代理日志每小时轮换一次,且后缀会自动更改以反映当前日期和时间。更新命令,以包含发生问题时的日期范围和日志 ID。

如果容器代理没有所需的凭证,您会在日志中收到与以下内容类似的错误:

2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f
2019-06-29T16:10:09Z [ERROR] Error re-registering: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster
    status code: 400, request id: 0b73e260-5088-4688-a425-6f35f1ef440f

其他帮助

如果您无法通过此解决方案确定 ECS 容器实例中存在的问题,请联系高级支持,以寻求帮助。首先,使用 Amazon ECS 日志收集器创建实例日志的存档。然后,将日志附加到支持工单上,以帮助支持工程师对问题进行故障排除。


相关信息

Amazon ECS 问题排查

Amazon ECS 容器代理

Amazon ECS 容器实例 IAM 角色

Amazon ECS 日志文件位置

AWS 官方
AWS 官方已更新 2 年前