跳至内容

为什么我的 Amazon EC2 实例无法加入 Amazon ECS 集群?

3 分钟阅读
0

我无法使用 Amazon Elastic Container Service (Amazon ECS) 集群注册 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

解决方法

要确定为什么您的容器实例无法注册到您的 Amazon ECS 集群,请运行 AWSSupport-TroubleshootECSContainerInstance 运行手册以自动检查潜在问题。

运行 AWSSupport-TroubleshootECSContainerInstance 运行手册

先决条件:

要运行运行手册,请参阅 AWSSupport-TroubleshootECSContainerInstance

注意: 在您的 Amazon ECS 集群和 EC2 实例所在的同一 AWS 区域运行 AWSSupport-TroubleshootECSContainerInstance 运行手册。

查看运行手册的输出,以获取解决问题的建议。如果输出未给出建议,请执行以下操作手动解决此问题。

验证容器实例上 ECS 代理的状态

要检查实例上的 Amazon ECS 容器代理是否正在运行,请运行以下命令:

sudo systemctl status ecs

如果 Amazon ECS 容器代理未在您的实例上运行,请运行以下命令来启动代理:

sudo systemctl start ecs

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

Active: active (running)

要检查 Docker 服务是否正在运行,请运行以下命令:

sudo systemctl status docker

如果 Docker 服务未处于运行状态,请运行以下命令启动该服务:

sudo systemctl start docker

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

Active: active (running)

检查启动配置

如果启动实例属于某个自动扩缩组,请验证该自动扩缩组的启动配置是否正确。有关详细信息,请参阅 Refreshing an Amazon ECS Container Instance Cluster With a New AMI(使用新 AMI 刷新 Amazon ECS 容器实例集群)中的 Create a new launch configuration(创建新启动配置)步骤。

检查容器实例的 AMI

如果容器实例的 AMI 是复制或自定义的 AMI,请确认该实例符合以下要求:

  • 运行至少 Linux 内核 3.10 版本的 Linux 发行版。
  • 您使用的是最新版本的 Amazon ECS Linux 容器代理
  • 运行至少 1.9.0 版本和所有 Docker 运行时依赖项的 Docker 进程守护程序。要查看当前 Docker 版本,请运行 sudo docker version 命令。有关详细信息,请参阅 Docker Docs 网站上的 Install Docker Engine(安装 Docker 引擎)。

这些要求已在经 Amazon ECS 优化的 AMI 上预先配置。除非您的应用程序需要该 AMI 中不可用的版本,否则最佳做法是使用经 Amazon ECS 优化的 AMI。有关详细信息,请参阅检索经 Amazon ECS 优化的 Linux AMI 元数据

检查实例的用户数据是否包含正确的集群信息

要检查实例的用户数据是否包含正确的集群信息,请运行以下命令:

#!/bin/bash
echo ECS_CLUSTER=cluster-name >> /etc/ecs/ecs.config

注意: 请将 cluster-name 替换为您的集群名称。

验证日志文件

如果问题仍然存在,请使用 Amazon ECS 日志收集器收集日志。然后,查看日志以找出原因。您还可以在容器主机上检查 Amazon ECS 容器代理和 Docker 的日志文件。

要查看 Amazon ECS 容器代理和 Docker 的日志文件,请运行以下命令:

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

注意:YYYY-MM-DD 替换为要检查日志文件的日期。

对错误进行故障排除

Error: Launching a new EC2 instance.Status Reason: This account is currently blocked and not recognized as a valid account.Please contact aws-verification@amazon.com if you have questions.Launching EC2 instance failed.

当您的 AWS 账户被封锁且 Amazon 无法识别该账户时,就会出现此错误。要解除对您的账户的封锁,请发送电子邮件至 aws-verification@amazon.com,申请 AWS 解除对您的账户的封锁。

Error: re-registering: ClientException: Container instance 12345678910abcdefghixzy is inactive. status code: 400, request id: 012345678a-012345b-012ab-0a1-9f645f4s5c12 module=agent.go

当 Amazon ECS 容器代理由于 EC2 实例处于非活动状态而无法使用集群注册 EC2 容器实例时,就会出现此错误。此错误与实例上运行的应用程序有关。要了解出错原因,请先检查应用程序。如果错误仍然存在,请检查 Amazon ECS 容器代理日志。

Error: Few instances are able to join the cluster but with the same configurations, other instances are not able to join the cluster.

当特定 API 调用超过速率配额并导致 ThrottlingException 时,就会出现此错误。有关详细信息,请参阅 Amazon ECS API 的请求节流。要解决此错误,请提高账户级别的速率限制。使用 AWS CloudTrail 检查常见的 API 调用,例如 ListTasksRegisterContainerInstance

Error: After changing the instance type, new instances are unable to join the cluster.

当 Amazon ECS 容器代理卡滞在 Pending(待处理)状态,您无法更改实例类型时,就会出现此错误。要在 Amazon ECS 中更改实例类型,请完成以下步骤:

  1. 删除容器实例
  2. 启动具有新实例类型的新容器实例

注意: 最佳实践是使用经 Amazon ECS 优化的 Amazon Linux 2023 AMI 为您的集群启动实例。

或者,创建新的启动配置,然后在自动扩缩组中更新启动配置

有关详细信息,请参阅如何在 Amazon ECS 中更改容器实例类型?

Error: Unable to register as a container instance with ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster. status code: 400, request id: 0a123456-7899-10101-a987-6543210deff

当您缺少所需的 IAM 权限时,就会出现此错误。要解决这些错误,请创建容器实例 IAM 角色。然后,运行 AWSSupport-TroubleshootECSContainerInstance 运行手册,以确定容器实例角色缺少的权限。

相关信息

Amazon ECS 故障排除

Amazon ECS 容器实例 IAM 角色

AWSSupport-TroubleshootECSContainerInstance

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