AWS EKS NodeGroup卡在删除状态,Terraform部署遇多异常
EKS NodeGroup删除卡住、配置不符问题排查与解决
一、核心问题梳理
- EKS托管节点组(private-nodes)长期处于删除状态,健康检查提示IAM角色不存在;重建角色后执行
UpdateNodegroupVersion报错:ResourceInUseException: Nodegroup cannot be updated as it is currently not in Active State - CLI与Terraform均无法删除集群及节点组
- Terraform配置节点组为SPOT类型
t3.medium,但实际存在按需类型t3.large实例,代码无对应配置
二、NodeGroup删除卡住问题解决步骤
1. 确认节点组当前状态
执行命令查看节点组详细状态与错误信息:
aws eks describe-nodegroup --cluster-name eks-gd360 --nodegroup-name private-nodes --region eu-west-1
重点关注status(如DELETING/DELETE_FAILED)与statusReason字段,定位具体失败原因。
2. 手动清理关联资源
如果节点组删除卡住,可手动清理其依赖资源:
- 终止关联EC2实例:在EC2控制台找到节点组对应的实例(标签包含
eks:nodegroup-name=private-nodes),手动终止 - 删除对应Auto Scaling Group(ASG):在EC2控制台的Auto Scaling组中,找到名称包含
private-nodes的ASG,先设置最小/最大/期望实例数为0,再删除ASG - 清理残留网络资源:检查节点组关联的安全组、负载均衡等资源,确认无业务依赖后手动删除
3. 修复IAM角色匹配问题
重建的IAM角色必须与节点组绑定的ARN完全一致:
- 确保角色名称与原角色完全相同,避免ARN变更导致节点组无法识别
- 验证角色的信任关系,确保包含以下服务主体:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["ec2.amazonaws.com", "eks.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] } - 重新附加所需权限策略:
AmazonEKSWorkerNodePolicy、AmazonEKS_CNI_Policy、AmazonEC2ContainerRegistryReadOnly
4. 强制清理节点组(极端情况)
若上述步骤无效,可通过AWS Support提交工单,请求使用官方资源清理工具强制删除卡住的节点组;或通过AWS CLI调用底层API(需谨慎操作,避免误删其他资源)。
三、Terraform配置与实际实例不符问题排查
1. 区分托管节点组与Karpenter节点
你使用了Karpenter模块,t3.large按需实例大概率是Karpenter自动创建的,而非Terraform定义的托管节点组:
- 执行
kubectl get nodes,查看节点标签,Karpenter管理的节点通常带有karpenter.sh/provisioner-name标签 - 检查Karpenter的Provisioner配置,确认是否有指定
t3.large实例类型与按需容量类型
2. 检查Terraform状态漂移
执行命令查看Terraform状态中节点组的实际配置:
terraform state show aws_eks_node_group.private-nodes
对比输出与本地代码,若状态与代码不一致,说明存在状态漂移,可通过terraform import重新同步资源,或手动修正状态文件(需谨慎)。
3. 核对模块内部配置
检查eks模块与karpenter模块的内部代码,确认是否存在额外的节点组配置或Provisioner定义,导致创建了t3.large实例。
四、Terraform无法删除集群问题解决
- 刷新Terraform状态:
terraform refresh
确保Terraform状态与AWS实际资源一致。
- 移除无效状态资源:
若节点组在AWS中已不存在,但Terraform状态仍有记录,执行以下命令移除:
terraform state rm aws_eks_node_group.private-nodes
- 清理集群关联资源:
删除集群前,需先清理所有关联资源:
- 删除EKS Add-ons(如kube-proxy、coredns、vpc-cni)
- 清理集群关联的负载均衡、存储卷、IAM角色等资源
- 最后再尝试通过Terraform或CLI删除集群
内容的提问来源于stack exchange,提问作者Bilal Majeed
相关产品推荐
相关产品推荐

