AWS EKS集群升级至v1.30后节点组升级失败问题
AWS EKS 1.30升级中启动模板节点组加入失败排查方案
问题背景
将EKS集群从1.29升级至1.30后,非启动模板创建的节点组升级成功,但通过启动模板创建的abc-node-group节点组升级失败,报错:
Error code: NodeCreationFailure
Error message: Couldn't proceed with upgrade process as new nodes are not joining node group abc-node-group
节点AMI已升级至1.30,但无法加入集群。
核心排查与修复步骤
1. 校验节点IAM角色权限
- 确认节点实例绑定的IAM角色已附加
AmazonEKSWorkerNodePolicy、AmazonEC2ContainerRegistryReadOnly、AmazonEKS_CNI_Policy三个核心托管策略 - 检查角色信任关系,确保包含
ec2.amazonaws.com服务主体,示例信任策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
2. 检查启动模板用户数据
- 验证用户数据中
bootstrap.sh脚本的集群名称、节点标签是否与实际配置完全匹配,示例正确配置:#!/bin/bash set -o xtrace /etc/eks/bootstrap.sh <集群名称> --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=abc-node-group,eks.amazonaws.com/nodegroup-image=ami-xxxxxx' - 确认未遗漏集群CA证书、API服务器端点的注入逻辑
3. 验证节点安全组规则
- 确保节点安全组允许:
- 入方向:TCP 443(集群API服务器)、TCP 10250(kubelet端口)
- 出方向:所有TCP/UDP流量到集群控制平面安全组,以及TCP 80流量到EC2元数据服务
- 检查节点安全组与控制平面安全组的双向访问规则是否生效
4. 分析节点系统日志
- 通过EC2控制台获取节点的
/var/log/cloud-init-output.log和/var/log/messages,重点排查:bootstrap.sh脚本执行报错- kubelet启动失败日志
- API服务器连接超时/拒绝的信息
5. 测试API端点连通性
- 在节点内部执行命令测试集群API端点可达性:
curl -v https://<集群API端点>/healthz - 排查DNS解析失败、VPC网络ACL拦截、VPC端点配置异常等问题
6. 确认kubelet版本兼容性
- 确保节点kubelet版本与集群控制平面版本(1.30)一致,EKS要求kubelet与控制平面版本差异不超过一个次要版本
- 若启动模板自定义了kubelet安装流程,需确认安装的是1.30版本kubelet
临时替代方案
若以上排查未定位到问题,可尝试:
- 替换
abc-node-group的启动模板,使用AWS官方EKS 1.30标准AMI重新创建节点组 - 手动扩容节点组添加新节点,确认新节点正常加入后再缩容旧节点,绕过自动升级流程
内容的提问来源于stack exchange,提问作者Ekam
相关产品推荐
相关产品推荐

