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

3 分钟阅读
0

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

简短描述

由于以下一个或多个原因,您的 Amazon EC2 实例无法注册或加入 Amazon ECS 集群:

  • ECS 端点无法公开访问实例的域名系统(DNS)主机名。
  • 您的公有子网配置不正确。
  • 您的私有子网配置不正确。
  • 您的 VPC 端点配置不正确。
  • 您的安全组不允许网络流量。
  • EC2 实例没有所需的 AWS Identity and Access Management(IAM)权限。或者,ecs:RegisterContainerInstance API 调用被拒绝。
  • 您的 ECS 容器的实例用户数据配置不正确。
  • ECS 代理已停止或未在实例上运行。
  • 自动扩缩组的启动配置不正确(如果您的实例属于某个自动扩缩组)。
  • 您用于实例的亚马逊云机器镜像(AMI)不符合先决条件。

解决方法

使用 AWSSupport-TroubleshootECSContainerInstance AWS Systems Manager 运行手册解决简述部分列出的常见问题。如果运行手册的输出未提供建议,请使用以下解决方法部分的手动故障排除方法。

使用 Systems Manager Automation 运行手册

使用 AWSSupport-TroubleshootECSContainerInstance 运行手册对无法注册 ECS 集群的 EC2 实例进行故障排除。此自动化会检查以下资源可能存在的问题:

  • 实例的用户数据包含正确的集群信息。
  • 实例配置文件包含所需的权限。
  • 网络配置正确

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

  1. 打开 AWS Systems Manager 控制台
  2. 在导航窗格的变更管理下,选择自动化
  3. 选择执行自动化
  4. 选择由 Amazon 所有选项卡。
  5. 自动化文档下,搜索 TroubleshootECSContainerInstance
  6. 选择 AWSSupport-TroubleshootECSContainerInstance 卡。
    注意: 选择单选按钮,而不是带超链接的自动化名称。
  7. 选择下一步
  8. 对于执行自动化文档,选择简单执行
  9. 输入参数部分,为 AutomationAssumeRole 输入允许 Systems Manager Automation 执行操作的角色的 Amazon 资源名称(ARN)。
    注意: 如未指定 IAM 角色,Systems Manager Automation 将使用运行此运行手册的 IAM 用户或角色的权限。有关为 Systems Manager Automation 创建代入角色的详细信息,请参阅方法 2: 使用 IAM 为自动化配置角色。确保 AutomationAssumeRole 或 IAM 角色具有以下权限:ec2:DescribeIamInstanceProfileAssociationsec2:DescribeInstanceAttributeec2:DescribeInstancesec2:DescribeNetworkAclsec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVpcsec2:DescribeVpcEndpointsiam:GetInstanceProfileiam:GetRoleiam:SimulateCustomPolicyiam:SimulatePrincipalPolicy
  10. 对于 ClusterName,输入 EC2 实例注册失败的集群名称。
  11. 对于 InstanceId,输入注册失败的 EC2 实例 ID。
  12. 选择执行

运行手册的输出将提供故障排除步骤和建议。

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

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

sudo systemctl status ecs

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

sudo systemctl start ecs

命令输出的输出必须类似于:

ecs start/running, process 23403

检查启动配置

如果您启动的实例属于某个自动扩缩组,确认该自动扩缩组的启动配置正确。有关详细信息,请参阅使用新 AMI 刷新 Amazon ECS 容器实例集群中的步骤 5

检查实例的 AMI

如果您用于 EC2 实例的 AMI 是复制的或自定义 AMI,确认该实例具有以下组件:

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

验证日志文件

如果问题仍然存在,使用 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。请务必提及您必须解锁账户。

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

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

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

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

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

当 ECS 代理卡在待处理状态,无法更改实例类型时,会出现此错误。与某些 EC2 实例不同,您无法停止 ECS 实例,更改实例类型,然后重新启动实例。要在 Amazon ECS 中更改实例类型,请完成以下步骤:

  1. 终止容器实例。
  2. 启动具有新实例大小的新容器实例。最佳做法是使用 Amazon ECS 优化型 Amazon Linux 2 AMI 为您的集群启动实例。

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

有关详细信息,请参阅如何在 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 权限。要解决这些错误,请查看 Amazon ECS 容器实例 IAM 角色中的说明。

此外,运行 AWSSupport-TroubleshootECSContainerInstance 运行手册,了解容器实例角色缺少哪些权限。

相关信息

创建虚拟私有云

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

Amazon ECS 故障排除

创建您自己的运行手册

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