Subnetcalculator

EKS Max Pods per Node Calculator

Instant max-pods-per-node results for any EC2 instance type — with prefix delegation and custom networking support, replacing AWS's max-pods-calculator.sh shell script.

EKS Max Pods per Node Calculator

Instance data last updated July 20, 2026 · 1,384 instance types · source: awslabs/amazon-eks-ami

Start typing a family (e.g. "m6i") to filter — 1,384 instance types covered.

VPC CNI assigns /28 IPv4 prefixes (16 IPs) per ENI slot instead of one IP at a time.

Reserves one ENI for the node's primary interface, so pods only get IPs from the remaining ENIs.

Shows total pods and IPs consumed across the whole node group.

Max Pods per Node
29
m5.large

Breakdown

ENIs used
3
IPs per ENI
10
IPs consumed per node
30

Copy for your nodegroup config

eksctl flag
--max-pods-per-node 29
bootstrap.sh (AL2) equivalent
--use-max-pods false --kubelet-extra-args '--max-pods=29'

Also see: general subnet calculator · AWS subnet calculator · Kubernetes pod & service CIDR calculator

The ENI max-pods formula, explained

Every EKS worker node runs the Amazon VPC CNI plugin, which assigns each pod a real routable IP address from the node's VPC subnet — there's no overlay network involved by default. That means pod capacity is bounded by how many IP addresses a node's network interfaces can hold, not by CPU or memory. AWS captures this per-instance-type limit as two numbers: the maximum number of Elastic Network Interfaces (ENIs) the instance supports, and how many IPv4 addresses each ENI can carry.

The standard formula is ENIs × (IPv4 per ENI − 1) + 2. One IP per ENI is reserved for the ENI's own primary address, and the +2 accounts for the two pods that use the host's own network namespace instead of consuming a VPC IP. This calculator sources its ENI and IP-per-ENI data directly from the dataset AWS ships inside amazon-eks-ami — the same source of truth max-pods-calculator.sh and nodeadm use internally.

Prefix delegation: ~16x more pods per node

Without prefix delegation, the VPC CNI attaches IPs one at a time, so pod density is capped by how many individual IPs an ENI can hold — often well under 50 on smaller instances. Prefix delegation changes the unit of allocation: instead of a single IP, each ENI slot gets a /28 prefix (16 contiguous IPv4 addresses) in one API call. That multiplies effective IP capacity by roughly 16x, which is why a t3.medium jumps from 17 pods to a kubelet-capped 110.

Two things temper that multiplier. First, prefix delegation only works on Nitro-based instance types — this calculator disables the toggle automatically on older Xen-hypervisor instances. Second, the kubelet itself enforces a hard ceiling regardless of how large the ENI math gets: 110 pods on instances with 30 vCPUs or fewer, 250 on larger ones. Large instances routinely hit this kubelet cap well before they'd run out of IP addresses — the calculator flags exactly when that happens.

Why pods get stuck in ContainerCreating

  • IP exhaustion, not resource pressure. A node can show plenty of free CPU and memory while every pod slot is IP-starved — the scheduler placed the pod, but the CNI can't attach it to the network.
  • ENI attachment lag. When warm IP/ENI pools run dry, the CNI has to call EC2 to attach a new ENI or allocate a new prefix, which can take tens of seconds — long enough for kubectl describe pod to show a stream of FailedCreatePodSandBox events.
  • Bootstrap flag mismatches. Setting --max-pods above what the instance's ENIs can actually support (via bootstrap.sh or a custom kubelet config) schedules pods that can never get an IP — this calculator's numbers are the real ceiling, not a suggestion.
  • Secondary CIDR without custom networking configured correctly. Custom networking reserves one ENI for the node's primary interface; forgetting to account for that in kubelet's --max-pods causes the same starvation pattern under load.

EKS Max Pods FAQ

How does EKS calculate the maximum pods per node?

By default EKS uses the ENI-based formula from AWS's own eni-max-pods.txt dataset: (number of ENIs on the instance) x (IPv4 addresses per ENI - 1) + 2. Each ENI needs one IP reserved for itself, and the +2 accounts for the two pods that use host networking. Larger instances support more ENIs and more IPs per ENI, so they scale up accordingly — a t3.medium tops out at 17 pods while an m5.8xlarge supports over 200 under the standard formula.

What does prefix delegation change?

With prefix delegation (ENABLE_PREFIX_DELEGATION=true on the VPC CNI), each ENI slot is assigned a /28 prefix (16 IPv4 addresses) instead of a single address, so pod density scales by roughly 16x. The formula becomes ENIs x ((IPv4 per ENI - 1) x 16) + 2, capped by the kubelet's own maximum: 110 pods for instances with 30 vCPUs or fewer, and 250 for larger ones. Prefix delegation only works on Nitro-based instance types — it's disabled in this calculator for older Xen-hypervisor instances.

Why do pods get stuck in ContainerCreating when IPs run out?

The VPC CNI has to attach a real VPC IP address to every pod before it can start. If a node has already handed out every IP across its ENIs, new pods sit in ContainerCreating while the CNI waits for an IP to free up or for a WARM_ENI/WARM_IP_TARGET-triggered ENI attachment to complete — which can take tens of seconds. This is the most common cause of stalled pod scheduling on EKS nodes that look otherwise healthy (CPU and memory both have headroom).

Can I override the default max-pods value?

Yes. Both eksctl-managed and self-managed nodegroups accept an explicit override: eksctl's --max-pods-per-node flag, or bootstrap.sh's --use-max-pods false --kubelet-extra-args '--max-pods=N' on Amazon Linux 2. Overriding above the ENI-derived ceiling is unsafe — pods will schedule but never get an IP — so treat the calculated value here as the real ceiling, not just a suggestion.

More Network Tools

Free tools for network engineers — no signup, no rate-limit walls.