Kubernetes Resource Calculator
Size a Kubernetes workload. Enter the per-pod CPU and memory requests and limits and the replica count, describe your node size and the overhead reserved for the system and kubelet, and the calculator returns the total reserved capacity, how many pods fit per node, and how many nodes the workload needs — flagging whether CPU or memory is the binding constraint. Runs entirely in your browser.
Node sizing uses requests, because the scheduler packs pods by requested resources, not limits. The reserved overhead approximates kube-reserved, system-reserved, and the eviction threshold — the slice of a node not available to your pods. Real allocatable capacity varies by provider; check kubectl describe node.
How to use the Kubernetes Resource Calculator
Enter the resource spec for a single pod — CPU in milli-cores (250 = 0.25 vCPU) and memory in mebibytes — for both requests and limits, then the number of replicas you run. Describe a node in your cluster by its vCPU and memory, and estimate the reserved overhead: the portion of each node consumed by the kubelet, the OS, and the eviction threshold, which is not available to your pods. Cloud nodes typically lose 10–25% this way.
The result shows the total CPU and memory your replicas request and the total they are allowed to use, how many of these pods fit on one node, and the number of nodes required. It also tells you whether CPU or memory is the limiting factor — the resource that fills up first as you add pods. If one is far tighter than the other, rebalancing the request ratio or choosing a differently-shaped node can pack more pods per node and cut your bill.
How Kubernetes packs pods onto nodes
When you create a pod, the Kubernetes scheduler must find a node with enough free capacity to hold it. Crucially, it decides using each container's requests, not its limits: a node can accept new pods as long as the sum of requested CPU and memory does not exceed what the node has allocatable. Limits matter at runtime — CPU is throttled and memory over-limit is OOM-killed — but they do not affect placement. That is why node sizing is a requests problem.
A node's allocatable capacity is always less than its raw size. The kubelet, container runtime, and operating system need CPU and memory of their own (system-reserved and kube-reserved), and a slice is held back as an eviction threshold so the node can react before it runs out of memory. On managed clusters this overhead commonly removes 10–25% of a node, and memory reservations grow with node size. The reserved-overhead field models this so the node count reflects real allocatable capacity, not the marketing spec.
The number of pods that fit per node is the smaller of two ratios: allocatable CPU divided by the CPU request, and allocatable memory divided by the memory request. Whichever runs out first is the binding constraint. A common waste pattern is requesting lots of memory but little CPU (or vice versa) on a balanced node, so half the node's other resource sits idle while pods can no longer be scheduled. Spotting the binding constraint tells you whether to adjust requests or pick a compute-optimised or memory-optimised node shape to improve density and reduce cost.
Common use cases
- Cluster sizing. Estimate how many nodes a deployment of N replicas requires.
- Right-sizing requests. See whether CPU or memory binds and rebalance to pack more pods per node.
- Capacity planning. Project node count and cost before scaling a service up.
- Node shape selection. Compare how a compute- vs memory-optimised node changes density.