You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EKS T3.Small节点IP限制致Pod Pending问题解决方案咨询

核心结论

无法仅通过kubectl修改Kubernetes原生配置直接突破t3.small实例的Pod数量上限。
你遇到的Pod数量限制不是Kubernetes层面的软约束,是EKS默认VPC CNI插件与EC2实例规格绑定的硬限制:t3.small实例最多支持挂载2块弹性网卡(ENI),单块ENI最多分配6个私有IP,扣除节点自身、CNI预留的IP后,默认模式下仅能为业务Pod提供10个左右可分配IP,实际可调度业务Pod数约7个,和你观测到的现象一致。直接修改kubelet的max-pods参数、节点可分配Pod字段只会让调度器调度超量Pod到节点,最终还是会因为无IP可分配报failed to assign an IP address to container错误,无法解决问题。

可行修复方案

方案1:开启VPC CNI前缀委派(成本最优,无需更换实例规格)

这是官方支持的无额外成本的优化方案,原理是让CNI为ENI分配/28 IPv4前缀段(每个前缀包含16个可用IP)替代原来的单IP分配模式,t3.small实例开启后单节点可支持的业务Pod数最高可达110个,完全满足低资源消耗小Pod的部署需求。
操作步骤:

  1. 编辑kube-system命名空间下的VPC CNI配置ConfigMap
kubectl edit configmap aws-node -n kube-system
  1. 在data配置段添加以下两个参数
ENABLE_PREFIX_DELEGATION: "true"
WARM_PREFIX_TARGET: "1"
  1. 保存退出后,滚动重启CNI守护进程让配置生效
kubectl rollout restart daemonset aws-node -n kube-system
  1. 同步修改节点kubelet的--max-pods启动参数为110:托管节点组可直接在节点组配置页自定义最大Pod数;自管理节点组需要修改节点启动脚本中的kubelet启动参数,新节点启动后会自动生效,存量节点可通过滚动替换完成配置更新。

方案2:调整CNI IP预留策略,榨取默认模式下的IP配额

如果暂时不打算开启前缀委派,可以通过降低CNI的空闲IP预留数,小幅提升单节点可运行Pod数量:

  1. 同样编辑aws-node ConfigMap,添加以下参数
WARM_IP_TARGET: "1"
MINIMUM_IP_TARGET: "11"
  1. 重启aws-node DaemonSet让配置生效。
    该配置下t3.small默认模式最多可运行11个业务Pod,相比默认值提升4个,但无法突破实例ENI的总IP硬上限。

方案3:修复集群自动扩缩容触发逻辑

你观测到的IP耗尽后不触发自动扩缩容的问题,根因是默认集群自动扩缩器(CA)仅根据CPU、内存资源缺口判断是否需要扩容,无法感知IP/ENI资源耗尽的场景。修复方式为:

  • 为集群自动扩缩器添加--expendable-pods-priority-cutoff启动参数
  • 为低优先级业务Pod绑定对应优先级类
    配置完成后,当Pod因为IP不足处于Pending状态时,自动扩缩器会正确识别资源缺口触发节点扩容。

注意:所有不调整CNI能力、仅修改K8s调度层面参数的操作,都无法解决IP不足的本质问题,只会导致更多Pod启动失败。

内容的提问来源于stack exchange,提问作者Arnold Zahrneinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:39:19