Pod Overhead Calculation

Pods have overhead beyond app resources.

Sources of pod overhead

Pod overhead has three predictable sources. Sidecar containers (service mesh proxies, log forwarders, metrics agents) add CPU, memory, and startup time; kube-proxy and CNI plugins add network overhead per pod; container runtime overhead from containerd or CRI-O is non-zero and noticeable at small pod sizes.

Typical overhead percentages

The percentages are predictable. Without service mesh: 10-15% per pod, mostly sidecar agents. With service mesh: 20-35% per pod, Envoy or similar adds CPU and memory. Smaller pods feel the overhead more proportionally: 50m overhead on a 100m CPU pod is 33% waste, the same overhead on a 1000m pod is 5%.

Planning capacity around overhead

Capacity planning must account for overhead at both pod and node levels. Pod requests include overhead (200m app + 40m overhead = 240m request); node-level reservation covers kubelet, kube-proxy, and CNI; standard reservation is 0.5 cores and 1GB per node, which larger nodes amortise and smaller nodes feel more.

Reducing overhead

Three patterns reduce overhead at scale. Sidecar consolidation folds multiple agents into one process; DaemonSet for shared functionality runs one log forwarder per node instead of one per pod; service mesh sampling captures only a fraction of traces and metrics rather than every request.

What to monitor

The overhead signal is in three places. Node-level utilisation vs pod requests (gap is overhead plus headroom); per-pod actual vs requested (overhead shows up as systemic difference between request and use); pod startup time (heavy sidecars dominate, so optimise the slowest sidecar first).