为什么我的 Amazon ECS 或 Amazon EC2 实例无法加入集群?
我无法向 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 运行手册。
- 打开 AWS Systems Manager 控制台。
- 在导航窗格的变更管理下,选择自动化。
- 选择执行自动化。
- 选择由 Amazon 所有选项卡。
- 在自动化文档下,搜索 TroubleshootECSContainerInstance。
- 选择 AWSSupport-TroubleshootECSContainerInstance 卡。
注意: 选择单选按钮,而不是带超链接的自动化名称。 - 选择下一步。
- 对于执行自动化文档,选择简单执行。
- 在输入参数部分,为 AutomationAssumeRole 输入允许 Systems Manager Automation 执行操作的角色的 Amazon 资源名称(ARN)。
注意: 如未指定 IAM 角色,Systems Manager Automation 将使用运行此运行手册的 IAM 用户或角色的权限。有关为 Systems Manager Automation 创建代入角色的详细信息,请参阅方法 2: 使用 IAM 为自动化配置角色。确保 AutomationAssumeRole 或 IAM 角色具有以下权限:ec2:DescribeIamInstanceProfileAssociations、ec2:DescribeInstanceAttribute、ec2:DescribeInstances、ec2:DescribeNetworkAcls、ec2:DescribeRouteTables、ec2:DescribeSecurityGroups、ec2:DescribeSubnets、ec2:DescribeVpcs、ec2:DescribeVpcEndpoints、iam:GetInstanceProfile、iam:GetRole、iam:SimulateCustomPolicy 和 iam:SimulatePrincipalPolicy。 - 对于 ClusterName,输入 EC2 实例注册失败的集群名称。
- 对于 InstanceId,输入注册失败的 EC2 实例 ID。
- 选择执行。
运行手册的输出将提供故障排除步骤和建议。
确认 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,确认该实例具有以下组件:
- 运行至少 3.10 版本的 Linux 内核的现代 Linux 发行版。
- 最新版本的 Amazon ECS Linux 容器代理。
- 运行至少 1.9.0 版本和任何 Docker 运行时系统依赖项的 Docker 进程守护程序(来自 Docker 网站)。要查看当前的 Docker 版本,请运行命令 sudo docker version。有关在特定 Linux 发行版上安装最新 Docker 版本的信息,请参阅 Docker 网站上有关安装 Docker 引擎的 Docker 文档。
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,如 RegisterTargets 和 RegisterContainerInstance。
错误: 更改实例类型后,新实例无法加入集群。
当 ECS 代理卡在待处理状态,无法更改实例类型时,会出现此错误。与某些 EC2 实例不同,您无法停止 ECS 实例,更改实例类型,然后重新启动实例。要在 Amazon ECS 中更改实例类型,请完成以下步骤:
- 终止容器实例。
- 启动具有新实例大小的新容器实例。最佳做法是使用 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 运行手册,了解容器实例角色缺少哪些权限。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前