AWS EKS节点组Max Pods设为110失败,求解决方案
解决EKS节点Max Pods无法设置为110的问题
以下是针对你的问题的排查与修正方案:
1. 修正Bootstrap参数的引号转义问题
你当前的template_file中,--kubelet-extra-args的单引号嵌套会导致shell解析错误,kubelet无法正确获取--max-pods=110参数。请调整为以下写法:
data "template_file" "test" { template = <<EOF #!/bin/bash /etc/eks/bootstrap.sh ${var.cluster-name} --use-max-pods false --kubelet-extra-args \"--max-pods=110\" EOF }
- 增加
#!/bin/bash确保脚本被正确解析 - 用转义双引号包裹kubelet参数,避免shell解析时丢失参数
如果使用terraform-aws-modules的_user_data模块,同样需要修正参数转义:
module "eks__user_data" { source = "terraform-aws-modules/eks/aws//modules/_user_data" version = "18.30.3" cluster_name = aws_eks_cluster.metashape-eks.name bootstrap_extra_args = "--use-max-pods false --kubelet-extra-args \\\"--max-pods=110\\\"" }
2. 确认节点组已滚动更新到最新配置
即使修改了启动模板,旧节点仍会保留原有配置。需确保:
- 执行
terraform apply后,节点组完成create_before_destroy的滚动更新 - 通过AWS控制台验证节点组使用的启动模板版本为最新版
- 登录任意节点执行
ps aux | grep kubelet,检查输出中是否包含--max-pods=110
3. 验证CNI前缀模式配置
要支持110个Pod,需确保CNI的前缀模式已正确配置:
- 检查
aws-nodeDaemonSet的环境变量:
确认值为kubectl describe daemonset aws-node -n kube-system | grep AWS_VPC_K8S_CNI_USE_PREFIX_DELEGATIONtrue - 设置足够的前缀预分配数量,例如:
(8个前缀×16个IP=128,满足110个Pod的IP需求)kubectl set env daemonset aws-node -n kube-system WARM_IP_TARGET=0 WARM_PREFIX_TARGET=8
4. 检查节点实例类型的资源限制
确认你使用的实例类型支持足够的ENI和前缀数量:
- 例如
m5.large最多支持3个ENI,每个ENI可关联4个前缀,总计3×4×16=192个IP,完全满足110个Pod的需求 - 若使用其他实例类型,可参考AWS官方文档确认ENI和IP配额
5. 查看节点初始化日志定位问题
登录节点查看cloud-init执行日志,确认bootstrap脚本是否正常运行:
cat /var/log/cloud-init-output.log | grep bootstrap.sh
若日志中存在参数解析错误,需进一步调整userdata的格式。
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

