如何解决 Amazon EKS 中的集群创建错误?

上次更新时间:2020 年 2 月 12 日

我在使用 AWS CloudFormation 或 eksctl 预置 Amazon Elastic Kubernetes Service (Amazon EKS) 集群时遇到服务错误。

简短描述

请考虑以下问题排查方案:

  • 如果您收到一条错误消息,消息称目标可用区没有足够的容量以支持该集群,请完成在另一个可用区中重新创建集群部分中的步骤。
  • 如果您收到一条错误消息,消息称资源创建失败,请完成确认您拥有正确的 IAM 权限以创建集群部分或监控您的 Amazon VPC 资源部分中的步骤。
  • 如果您收到错误消息,消息称创建超时等待工作线程节点,请完成确认工作线程节点可以到达控制层面 API 终端节点 部分中的步骤。

解决方法

在另一个可用区中重新创建集群

如果您在容量有限的可用区中启动控制层面实例,则可能会收到类似以下内容的错误消息:

Cannot create cluster 'sample-cluster' because us-east-1d, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1b, us-east-1c

要解决此错误,请使用错误消息中建议的可用区,再次创建集群

如果您使用 AWS CloudFormation 预置集群,则为与可用区匹配的子网的子网参数传递值。

--或者--

如果您使用的是 eksctl,则使用 --可用区标志传递另一个可用区的值。例如,如果您收到上述错误消息,请运行以下命令:

$ eksctl create cluster 'sample-cluster' --zones us-east-1a,us-east-1b,us-east-1c

注意:用您的集群名称替换示例集群。将 us-east-1aus-east-1bus-east-1c 替换为您的可用区。

确认您具有创建集群的正确 IAM 权限

创建集群时,请验证您是否具有正确的 AWS Identity and Access Management (IAM) 权限,包括针对 Amazon EKS 服务 IAM 角色的正确策略。

您可以使用 eksctl 为集群创建必备资源,如 IAM 角色和安全组。所需的最低权限取决于您正在启动的 eksctl 配置。有关详细信息,请查看 eksctl GitHub 社区中的故障排除解决方案

如果您的集群的 IAM 权限有问题,您可能会在 eksctl 中收到类似以下内容的错误消息:

API: iam:CreateRole User: arn:aws:iam::your-account-id:user/your-user-name is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::your-account-id:role/eksctl-newtest22-cluster-ServiceRole-10NXBYLSN4ULP

提示:要更容易地阅读错误消息,请在 AWS CloudFormation 控制台中查看错误消息。

要解决此错误,请查看与您的用户或角色关联的适用于 Amazon EKS 的 IAM 指导原则故障排除 IAM 策略

监控您的 Amazon VPC 资源

默认情况下,在创建集群时,eksctl 将创建新的 Amazon Virtual Private Cloud (Amazon VPC),除非您在配置文件中指定了自己的自定义 Amazon VPC 和子网。

如果您的集群存在 Amazon VPC 限制问题,您可能会收到以下错误消息:

The maximum number of VPCs has been reached. (Service: AmazonEC2; Status Code: 400; Error Code: VpcLimitExceeded; Request ID: a12b34cd-567e-890-123f-ghi4j56k7lmn)

要解决此错误,请监控您的资源,例如 AWS 区域中的 Amazon VPC 数量或创建集群的每个区域的互联网网关数量。有关更多信息,请参阅 Amazon VPC 配额

如果您所在区域的 Amazon VPC 资源数量存在资源限制问题,请考虑以下方案之一:

(方案 1)使用现有的 Amazon VPC 克服资源限制问题

要创建指定 VPC 和要在其中预置集群工作线程节点的子网的配置文件,请运行以下命令:

$ eksctl create cluster sample-cluster -f cluster.yaml

--或者--

(方案 2)请求增加服务配额以克服资源限制问题

请求增加充当由 eksctl 预置的集群 AWS CloudFormation 堆栈事件中瓶颈的资源的服务配额

确认您的工作线程节点可以到达控制层面 API 终端节点

eksctl 部署集群时,它将等待已启动的工作线程节点加入集群并达到就绪状态。如果您的工作线程节点无法到达控制层面或具有无效的 IAM 角色,则可能会收到以下错误消息:

timed out (after 25m0s) waiting for at least 4 nodes to join the cluster and become ready in "eksfbots-ng1"

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?