为什么我的 Amazon EKS 节点组处于降级状态?

2 分钟阅读
0

我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中的托管节点组处于降级状态。

解决方法

根据您在 NodegroupHealth 中收到的错误消息执行以下故障排除操作。

AccessDenied

当 Amazon EKS 或您的某个托管节点无法在 Kubernetes 集群 API 服务器中进行身份验证或授权时,将会出现 AccessDenied 错误。您会收到类似于以下示例的错误:

“您的 Worker 节点无权访问集群。验证节点实例角色是否存在并在 aws-auth ConfigMap 中正确配置。”

要解决此问题,请运行以下命令以确认 aws-auth configmap 中的节点实例角色权限是否正确:

kubectl get configmap aws-auth -n kube-system -o yaml

或者,确认您已正确地将节点角色映射到访问条目

您的 Worker 节点实例角色必须存在且配置正确。确保仅将节点角色映射到 system:bootstrapperssystem:nodes。最佳做法是将节点角色映射到 system:masters 组。

当对托管节点组执行操作的角色没有 eks:node-manager ClusterRoleClusterRoleBinding 权限时,您还会收到 AccessDenied 错误。要解决此问题,请更新您的角色权限

如果您使用私有 Windows 亚马逊机器映像 (AMI) 启动托管节点组,则可能会收到 Not authorized for images(未获得映像授权)错误消息。当 AWS 推出新的 Windows AMI 时,AWS 会将所有早于 4 个月的 AMI 设为私有化。要解决此问题,请参阅 Not authorized for images(未获得映像授权)。

AmiIdNotFound

当 Amazon EKS 找不到与您的启动模板关联的 AMI ID 时,将会出现 AmiIdNotFound 错误。您会收到类似于以下示例的错误:

“AmiIdNotFound: ami id '[ami-0cxx]' 不存在”

要解决此问题,请确保添加到自定义启动模板的 AMI ID 存在。此外,请确保与您的 AWS 账户共享 AMI

AutoScalingGroupNotFound

当 Amazon EKS 找不到与托管节点组关联的 Amazon Elastic Compute Cloud (EC2) Auto Scaling 组时,将会出现 AutoScalingGroupNotFound 错误。您会收到类似于以下示例的错误:

“AutoScalingGroupNotFound - 未找到 Amazon AutoScalingGroup ASG 名称。”

要解决此问题,请确保您没有删除与托管节点组关联的 EC2 Auto Scaling 组。如果您不小心删除了 EC2 Auto Scaling 组,请创建同名的 EC2 Auto Scaling 组。等待几分钟,然后检查节点组是否恢复到 Active(活动)状态。

ClusterUnreachable

当 Amazon EKS 或您的托管节点无法与您的 Kubernetes 集群 API 服务器通信时,将会出现 ClusterUnreachable 错误。您会收到类似于以下示例的错误:

“Ec2SecurityGroupNotFound 您必须使用有效的完整启动模板。VPC‘vpc-0a8cxx‘中不存在安全组‘sg-09fxx’”

此错误通常是由于网络中断或 API 服务器在提交请求时超时而发生的。如果您超过 etcd 数据库大小的 8 GB 配额,也会出现此错误。要解决此问题,请参阅管理 Amazon EKS 集群上的 etcd 数据库大小。此外,请确保核心附加组件(例如 kube-proxyAmazon Virtual Private Cloud (Amazon VPC) CNICoreDNS 均为最新版本。

AutoScalingGroupInvalidConfiguration

当您错误地配置托管节点组的 EC2 Auto Scaling 组时,将会出现 AutoScalingGroupInvalidConfiguration 错误。您会收到类似于以下示例的错误:

“AutoScalingGroupInvalidConfiguration: Amazon AutoScalingGroup ASG 名称包含的子网([错误的子网 ID 1、错误的子网 ID 2、错误的子网 ID 3])并非 Amazon EKS 所预期的子网。预期的子网:([正确的子网 ID 1、正确的子网 ID 2、正确的子网 ID 3])。”

要解决此问题,请识别并删除对 EC2 Auto Scaling 组所做的更改。确保关联的子网未更改。更新与您的节点组关联的 EC2 Auto Scaling 以使用错误消息中列出的子网。

最佳做法是手动更新与托管节点组关联的 EC2 Auto Scaling 组。仅进行手动更改以恢复先前所做的手动更改。

Ec2SecurityGroupNotFound

当 Amazon EKS 找不到集群安全组时,将会出现 Ec2SecurityGroupNotFound 错误。您会收到类似于以下示例的错误:

“EC2SecurityGroupNotFound 未找到节点组名称的 Amazon EC2 安全组 sg-04f3xx。”

如果您收到此错误消息,则无法再使用处于降级状态的托管节点组。您必须启动新的节点组。然后,清空并删除先前的节点组。有关如何清空节点组的详细信息,请参阅 Kubernetes 网站上的 Safely drain a node

Ec2LaunchTemplateNotFound

当您的托管节点组的 Amazon Elastic Compute Cloud (Amazon EC2) 启动模板与 Amazon EKS 创建的版本不匹配时,将会出现 Ec2LaunchTemplateNotFound 错误。您会收到类似于以下示例的错误:

“未找到 Amazon EC2 启动模板 lt-0cdac3xxf 版本号。”

Amazon EKS 使用托管启动模板部署托管组,该模板与底层托管 EC2 Auto Scaling 组相关联。

如果您不小心删除了启动模板,则最佳做法是启动新的节点组。然后,清空并删除先前的节点组。有关如何清空节点组的详细信息,请参阅 Kubernetes 网站上的 Safely drain a node

最佳做法是手动更新与托管节点组关联的 EC2 Auto Scaling 组。仅进行手动更改以恢复之前所做的手动更改

Ec2LaunchTemplateVersionMismatch

当托管节点组的 EC2 Auto Scaling 组启动模板版本与 Amazon EKS 创建的版本不匹配时,将会出现 Ec2LaunchTemplateVersionMismatch 错误。您会收到类似于以下示例的错误:

“Amazon EC2 启动模板:lt-0cdacxx 具有与您的 Autoscaling 组关联的新版本(编号),该版本未受 Amazon EKS 托管。”预期启动模板版本:(编号)lt-0cdac39f3axx”

Amazon EKS 始终使用托管启动模板部署托管节点组。如果您不提供启动模板,Amazon EKS 会自动使用您账户的默认值创建一个启动模板。修改自动生成的模板不是最佳做法。无法直接更新未使用自定义启动模板的现有节点组。您必须使用自定义启动模板创建新的节点组

要解决自定义启动模板的 Ec2LaunchTemplateVersionMismatch 错误,请将启动模板版本更新为错误消息中提及的预期启动模板版本。

有关 Amazon EKS 节点组启动模板中允许的操作的信息,请参阅启动模板配置基础知识

AsgInstanceLaunchFailures

当您的 EC2 Auto Scaling 组无法启动实例时,将会出现 AsgInstanceLaunchFailures 错误。您会收到类似于以下示例的错误:

“AsgInstanceLaunchFailures 无法启动竞价型实例。UnfulfillableCapacity - 由于您的请求配置,无法满足容量要求。请调整您的请求并重试。启动 EC2 实例失败。”

当竞价型实例容量不足以满足您请求的实例类型时,通常会发生此错误。最佳做法是混合使用来自不同竞价型实例池的实例类型和系列来获得容量。有关详细信息,请参阅如何使用 Amazon EKS 托管节点组启动竞价型实例并对其进行故障排除?

InsufficientFreeAddresses

当与您的托管节点组关联的子网没有足够的可用 IP 地址供新节点使用时,将会出现 InsufficientFreeAddresses 错误。您会收到类似于以下示例的错误:

“InsufficientFreeAddresses - Amazon AutoScaling 无法启动实例,因为子网中没有足够的空余地址与您的 AutoScaling 组相关联。”

要解决此问题,请确保在与托管节点组关联的子网中有足够的 IP 地址。有关详细信息,请参阅优化 IP 地址利用率

IamInstanceProfileNotFound or IamNodeRoleNotFound

当您删除与托管节点组关联的 AWS Identity and Access Management (IAM) 角色或配置文件时,将会出现 IamInstanceProfileNotFoundIamNodeRoleNotFound 错误。要解决此问题,请使用与删除的角色或配置文件相同的名称和设置创建新的 IAM 角色或配置文件

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