Example of calculating allocatable Kubernetes cluster capacity for 3 nodes with 4 vCPU and 16 GB RAM each. Free tool.
Worked example
Input
Cluster: 3 worker nodes
Node spec: 4 vCPU, 16 GB RAM each
Question: how much total CPU/memory is available for pods?
Output
Raw capacity (3 × 4vCPU, 16GB):
Total CPU: 12,000m (12 cores)
Total RAM: 49,152 Mi (48 GB)
Kubelet overhead deductions per node:
System reserved (kubelet default):
CPU: 100m RAM: 1,800 Mi
Kube reserved (typical):
CPU: 100m RAM: 1,000 Mi
Eviction threshold:
RAM: 100 Mi
Allocatable per node:
CPU: 4,000m - 200m = 3,800m
RAM: 16,384 Mi - 2,900 Mi = 13,484 Mi
Cluster allocatable (3 nodes):
CPU: 11,400m (11.4 cores)
RAM: 40,452 Mi (~39.5 GB)
Practical rule: plan for 70% of allocatable:
Usable CPU: ~8,000m
Usable RAM: ~28 GB
(leaves headroom for DaemonSets, node scaling lag)
Kubernetes reserves resources from each node for the kubelet, OS, and eviction thresholds — the allocatable capacity is always less than the raw node capacity. kubectl describe node shows the Allocatable fields. The 70% practical limit accounts for DaemonSet overhead (Fluentd, Datadog agent, CNI plugins run on every node), node autoscaler warmup time, and headroom for pod disruption spikes.
What to do next
Run kubectl describe nodes | grep -A5 'Allocated resources' to see current usage vs allocatable per node. Set resource requests on all pods — without requests, the scheduler cannot make capacity decisions.
Use the Kubernetes Cluster Capacity Calculator to run this on your own input.
What happens to pods when a node runs out of memory?
The kubelet evicts pods in order: first pods exceeding their memory limit (OOMKilled by kernel), then pods with no limits (BestEffort QoS), then pods exceeding their requests (Burstable QoS). Pods with resource requests == limits (Guaranteed QoS) are evicted last. Set resource limits to prevent one pod from consuming all node memory.
How do DaemonSets affect allocatable capacity calculations?
DaemonSet pods run on every node and consume resource requests from each node's allocatable pool. A Datadog agent pod requesting 100m CPU and 256Mi RAM on 3 nodes consumes 300m CPU and 768Mi RAM cluster-wide. Include DaemonSet resource usage in capacity planning — a fully-loaded node with many DaemonSets may have significantly less capacity for application workloads.