使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

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

2 分钟阅读
0

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

解决方法

先决条件

在完成以下手动步骤之前,使用 AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 运行手册自动检查是否存在潜在问题。

AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 运行手册会自动排查您的 Amazon EC2 实例无法注册或加入集群的常见原因。该运行手册会检查以下要求:

**注意:**请确保在您的 ECS 集群和 EC2 实例所在的 AWS 区域使用 AWSSupport-TroubleshootECSContainerInstance 运行手册。

如果运行手册的输出未给出建议,则请使用以下解决办法手动解决此问题。

确认 Amazon Linux 2 实例上 Amazon ECS 代理的状态

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

sudo systemctl status ecs

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

sudo systemctl start ecs

命令输出的输出必须类似于以下命令输出示例:

ecs start/running, process 23403

检查启动配置

如果启动实例属于某个 AWS 应用程序 Auto Scaling 组,确认该 Auto Scaling 组的启动配置正确。有关更多信息,请参阅使用新 AMI 刷新 Amazon ECS 容器实例集群中的创建新启动配置步骤。

检查您的实例的亚马逊机器映像(AMI)

如果您用于 EC2 实例的 AMI 是复制的或自定义 AMI,确认该实例满足以下要求:

经过 Amazon ECS 优化的 AMI 已按照这些要求预先配置。除非您的应用程序需要该 AMI 中还不可用的版本,否则最佳做法是使用经过 Amazon ECS 优化的 AMI。

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

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

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

验证日志文件

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

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

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

排除常见错误

错误: 启动新 EC2 实例。状态描述: 此账户目前已被锁定,未被识别为有效账户。如果您有任何问题,请联系 aws-verification@amazon.com。启动 EC2 实例失败。

当您的账户被冻结且亚马逊无法识别您的账户时,就会出现此错误。要解禁账户,请发送电子邮件至 aws-verification@amazon.com。请务必在电子邮件中注明您需要解禁帐户。

Error: re-registering: ClientException: 容器实例 12345678910xxxxxxxxxxxx 处于非活动状态。\n\t状态代码: 400,请求 ID: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go

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

错误: 只有很少的配置相同的实例能够加入集群,其他实例无法加入集群。

出现此错误是由于特定 API 调用超过速率限制时引发的 ThrottlingException。要解决此错误,请提高账户级别的速率限制。检查 API,如 RegisterTargetsRegisterContainerInstance

错误: 更改实例类型后,新实例无法加入集群。

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

  1. 删除容器实例
  2. 启动具有新实例大小的新容器实例
    注意: 最佳做法是使用经过 Amazon ECS 优化的 Amazon Linux 2 AMI 为您的集群启动实例。

或者,您可以创建新的启动配置。然后,更新 Auto Scaling 组中的启动配置

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

错误: 无法在 ECS 中注册为容器实例: AccessDeniedException: 用户 arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def 未被授予在资源 arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster 上执行 ecs:RegisterContainerInstance 的权限。状态代码: 400,请求 ID: 0a123456-7899-10101-a987-6543210deff

-或-

错误: 2019-06-29T16:10:09Z [ERROR] 重新注册时出错: AccessDeniedException: 用户 arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef 未被授予在资源 arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster 上执行 ecs:RegisterContainerInstance 的权限。状态代码: 400,请求 ID: 0a123456-7899-10101-a987-123456pqrs

出现这些错误是由于缺少 IAM 权限。要排除这些错误,您必须创建容器实例 IAM 角色

然后,运行 AWSSupport-TroubleshootECSContainerInstance 运行手册,确定容器实例角色缺少哪些权限。

相关信息

创建虚拟私有云

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

Amazon ECS 故障排除

创建您自己的运行手册

AWS 官方
AWS 官方已更新 6 个月前