如何正确使用eksctl ClusterConfig搭配vpc-cni传递maxPodsPerNode到启动模板?
EKS VPC-CNI模式下调整节点最大Pod数到110的正确配置方法
问题根因
你仅配置了托管节点组的maxPodsPerNode参数,该参数只会修改kubelet的--max-pods启动参数,但是VPC CNI默认的IP分配逻辑受限于EC2实例的ENI可用私有IP数量:m5.xlarge实例默认支持4个ENI,每个ENI最多分配15个私有IP,扣除网络预留资源后计算得到的默认最大Pod数为57,对应节点可分配Pod数显示为58,因此仅修改kubelet配置无法生效,需要先调整VPC CNI的IP分配策略。
操作步骤
1. 确认VPC CNI版本符合要求
VPC CNI从v1.9.0版本开始支持前缀委派功能,这是实现单节点高密度Pod部署的前提,执行以下命令检查当前插件版本:
kubectl describe daemonset aws-node -n kube-system | grep Image | cut -d "/" -f 3
如果版本低于v1.9.0,先升级VPC CNI插件到兼容版本。
2. 开启VPC CNI前缀委派功能
执行以下命令修改VPC CNI的DaemonSet配置,开启前缀委派,允许单个ENI分配/28前缀段,大幅提升单节点可用IP数量:
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
你可以根据集群IP使用效率需求,可选配置前缀预热参数,减少IP浪费:
kubectl set env daemonset aws-node -n kube-system WARM_PREFIX_TARGET=1
3. 滚动更新节点组使配置生效
你在ClusterConfig的managedNodeGroups中配置maxPodsPerNode: 110的操作是正确的,在完成VPC CNI配置后,需要对已有的节点组执行滚动更新,让新启动的节点加载完整配置:
eksctl update nodegroup --cluster <你的集群名称> --name <你的节点组名称> --force-update-version
如果是新建节点组,直接在配置文件中声明maxPodsPerNode: 110后创建即可。
验证配置
节点组滚动更新完成后,执行以下命令查看节点可分配Pod数:
kubectl describe node <目标节点名称> | grep "pods:"
输出显示pods: 110即为配置成功。
注意事项
- 开启前缀委派后,需要确保集群节点所属的VPC子网有足够的/28 CIDR块可用,避免出现IP分配失败的问题
- m5.xlarge实例开启前缀委派后最大可支持230个Pod,配置110个Pod的需求完全可以满足
- 如果需要配置超过110个Pod的上限,需要同步调整kubelet的
podPidsLimit参数,避免PID资源不足
内容的提问来源于stack exchange,提问作者paltaa
相关产品推荐
相关产品推荐

