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

启用前缀模式的Nitro实例出现Insufficient vpc.amazonaws.com/pod-eni错误

{"level":"debug","ts":"2024-11-13T09:35:43.766Z","caller":"ipamd/ipamd.go:1283","msg":"ENI eni-xxx cannot be deleted because it is primary"}
{"level":"debug","ts":"2024-11-13T09:35:43.766Z","caller":"ipamd/ipamd.go:1283","msg":"ENI eni-yyy cannot be deleted because it is a trunk ENI"}

我的预期是只要硬件资源充足,节点应该能支持最多98个Pod,请问哪里配置遗漏了?

---

# 解决方案

## 核心问题
虽然已经启用了前缀模式,但节点仍然以`vpc.amazonaws.com/pod-eni`(Pod专用ENI数量)作为调度约束,而非前缀分配的IP数量。这说明前缀模式未完全生效,IPAM仍在使用传统的ENI分配逻辑,且当前节点的Pod ENI配额已耗尽。

## 必要配置补充
启用前缀模式后,仅设置`ENABLE_PREFIX_DELEGATION=true`是不够的,还需添加以下关键参数:
- **`WARM_PREFIX_TARGET`**:预分配的IPv4前缀数量(每个前缀包含16个可用IP),根据r6g.medium实例的`max prefix 3`限制,建议设为2或3
- **`MINIMUM_IP_TARGET`**:可选,设置节点保留的最小IP数,避免频繁触发前缀分配操作

## 修复步骤
1. 更新aws-node DaemonSet的环境变量:
```bash
kubectl set env daemonset/aws-node -n kube-system WARM_PREFIX_TARGET=2
kubectl set env daemonset/aws-node -n kube-system MINIMUM_IP_TARGET=32
  1. 回收节点以让配置完全生效(重启aws-node Pod也可,但节点回收能确保VPC资源控制器重新初始化Trunk ENI):
kubectl drain <你的节点名称> --ignore-daemonsets
kubectl uncordon <你的节点名称>

额外排查点

如果执行上述步骤后问题仍存在,检查以下内容:

  • 查看节点的资源分配情况,确认vpc.amazonaws.com/pod-eni的已用数量:
    kubectl describe node <你的节点名称> | grep -A 5 "Allocated resources"
    
    若已用数量接近4,说明节点上存在未清理的旧Pod ENI,可手动登录AWS控制台删除非主ENI、非Trunk ENI的网卡,再重启aws-node Pod。
  • 验证ipamd日志中的前缀分配逻辑:
    kubectl logs -n kube-system <aws-node Pod名称> -c ipamd | grep "prefix"
    
    正常情况下应看到Assigned prefix等相关日志,说明前缀分配已启动。

注意事项

节点显示的pods:98是kubelet基于实例CPU/内存计算的理论最大值,但实际可运行的Pod数受限于VPC CNI能分配的IP数量。根据日志中的max ips 48,r6g.medium实例在前缀模式下最多支持48个Pod(3个前缀×16IP),这是AWS实例的网络资源硬限制,无法突破。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:34:55