Kubernetes node reservation formulas: EKS, GKE, AKS (2026)
Allocatable = capacity − kube-reserved − system-reserved − eviction threshold. Each managed service fills these in differently, and two of them changed recently. Verified on 2026-10-11.
Amazon EKS (AL2023 / nodeadm)
- Memory:
11 MiB × maxPods + 255 MiBkube-reserved, plusmemory.available < 100Mieviction. - CPU: 6% of the first core, 1% of the second, 0.5% of cores 3–4, 0.25% of every core above 4.
- maxPods: with the default VPC CNI it is the ENI limit,
ENIs × (IPs per ENI − 1) + 2(m5.large: 29). With prefix delegation AWS recommends 110 below 30 vCPU and 250 above, which also raises the memory reservation. - Source: amazon-eks-ami nodeadm kubelet config.
Google GKE (Standard)
- GKE ≤ 1.36 memory: 255 MiB below 1 GiB; else 25% of the first 4 GiB, 20% of the next 4, 10% of the next 8, 6% of the next 112, 2% above 128 GiB.
- GKE 1.37+ memory:
min(the old value, 15 MiB × maxPods + 500 MiB)on Container-Optimized OS (700 MiB base on Ubuntu) — much less on big nodes. - Both: +100 MiB eviction threshold. CPU: same tiers as EKS; 1.37+ caps it at 1 vCPU; shared-core E2 types reserve 1060m.
- Default max pods: 110. Source: GKE: plan node sizes.
Azure AKS
- AKS 1.29+ memory:
min(20 MB × maxPods + 50 MB, 25% of RAM)plus 100 Mi eviction. - Before 1.29: the same tiered 25/20/10/6/2% as old GKE, plus a 750 Mi eviction threshold.
- CPU (millicores): 1 core 60, 2 → 100, 4 → 140, 8 → 180, 16 → 260, 32 → 420, 64 → 740 (NodeSize interpolates other core counts).
- Default max pods: Azure CNI Overlay 250, CNI pod subnet and kubenet 110, legacy Azure CNI 30. Sources: AKS reservations, max pods.
What the formulas leave out
Capacity itself: kubelet reports the RAM the kernel sees, typically 2–5% below the advertised size (an 8 GiB m5.large shows about 7.6 GiB). DaemonSets request resources on every node too — budget for them; the calculator lets you set them.