{{ summaryTitle }} {{ summaryValue }} {{ summaryLine }} Limiter {{ limiterBadge }} Policy {{ policyBadge }} Replica goal {{ goalBadge }}
Kubernetes cluster capacity setup
Worker pool resources and rollout policy
Profiles are editable starting points, not Kubernetes defaults or provider guarantees.
Exclude cordoned nodes and nodes whose taints prevent this workload from landing.
nodes
Convert millicpu to cores: 14,000m is 14 vCPU.
vCPU
Enter GiB available to pods, not physical host memory.
GiB
Pod slots can bind before CPU or memory for small pods.
pods
250m equals 0.25 vCPU; observed usage is not a scheduling request.
vCPU
512Mi is approximately 0.5 GiB.
GiB
Select 1 to disable the zone-loss policy check.
This is a planning factor, not a Kubernetes scheduler setting.
%
Lower values reserve more landing room and reduce the replica ceiling.
%
Match the Deployment rollingUpdate maxSurge percentage.
%
Use zero when no percentage minAvailable policy applies to this workload.
%
Use 1 for an N+1 drain or node-loss review.
nodes
{{ workflowFeedback }}
Leave zero when max pods per node already represents application slots.
pods
Leave zero when allocatable CPU has already been reduced for this workload plan.
vCPU
Leave zero when allocatable memory has already been reduced for this workload plan.
GiB
Leave zero when the average pod request already includes all containers and overhead.
vCPU
Leave zero when the average pod request already includes all containers and overhead.
GiB
Leave zero unless placement constraints have produced measurable packing loss.
%
Leave zero when the average pod shape and reserve buffer already cover packing variance.
%
Leave zero unless pod ephemeral-storage requests should constrain scheduling.
GiB
Both this value and allocatable ephemeral storage must be positive to enable the storage ceiling.
GiB
Leave zero when node maxPods already captures the provider CNI limit.
IPs
Leave zero when usable pod-subnet IPs already excludes platform consumers.
IPs
This affects only the optional pod-IP ceiling.
nodes
It does not create capacity; zero is neutral for the replica ceiling.
%
Leave zero when you only need the maximum safe replica estimate.
replicas
{{ planExportStatus }}
Planning itemResultUseCopy
{{ row.item }}{{ row.result }}{{ row.use }}
{{ checksExportStatus }}
ScenarioSafe targetStatusOperator actionCopy
{{ row.scenario }}{{ row.target }}{{ row.status }}{{ row.action }}
{{ chartExportStatus }}
{{ summaryAnnouncement }}

A Kubernetes workload can fit while every worker is healthy and still fail to schedule during a rollout or node drain. Capacity planning therefore needs more than a total CPU or memory number. It must account for the scheduler's resource requests, per-node pod limits, platform pods, temporary surge replicas, and the smaller pool that remains after a chosen failure.

Nodes publish allocatable CPU, memory, and ephemeral storage for pods after system reservations. The scheduler compares pod requests with that allocatable amount even when live usage is low. A pod requesting 500 millicpu reserves 0.5 CPU for scheduling; a low utilization graph does not make the request disappear.

Kubernetes capacity questions and common mistakes
Capacity questionWhat can bind firstCommon mistake
How many pods fit now?CPU requests, memory requests, pod slots, optional storage, or pod IPsLooking only at observed CPU use
How many replicas fit during rollout?Steady capacity divided by the maxSurge multiplierLeaving no room for temporary new pods
How many survive maintenance?The same ceilings after selected node or largest-zone lossTesting only the all-nodes-healthy pool
Will voluntary eviction proceed?The PodDisruptionBudget (PDB) availability floorAssuming a PDB protects against node failure

Small pods often hit the maximum pods-per-node setting or pod-address supply before CPU or memory. Sidecars, RuntimeClass overhead, and DaemonSets can also change a workload's effective shape. Optional storage and network ceilings belong in the same minimum comparison when those resources are explicitly modeled.

Placement is not perfectly divisible. Anti-affinity, topology spread constraints, taints, selectors, uneven zones, and leftover fragments of CPU and memory can strand capacity. Planning allowances can discount the ideal pool, but they remain estimates rather than scheduler rules. The final replica ceiling should be checked against real pending pods, scheduler events, zone distribution, autoscaling policy, and a maintenance drill.

How to Use This Tool:

Model one homogeneous worker pool and one representative pod shape using scheduler-visible requests rather than usage averages.

  1. Choose a Workload profile only as an editable starting point. Enter schedulable worker count plus allocatable CPU, memory, and maximum pod slots per node; exclude cordoned or incompatible nodes.
  2. Enter average pod CPU and memory requests. Add sidecar, runtime, and other repeated pod overhead separately when those costs are not already included in the average.
  3. Set reserve, target utilization, rollout maxSurge, availability zones, tolerated node failures, and PDB minAvailable. These assumptions reduce the healthy ceiling into scenario-specific safe targets.
  4. Open advanced inputs when DaemonSets, topology constraints, imperfect bin packing, ephemeral storage, or pod-subnet addresses can bind. Use zero only for optional dimensions that are intentionally not modeled.
  5. Read Capacity plan to identify the limiting resource, then inspect Resilience checks. Use the smallest scenario target and verify it with actual scheduler predicates before changing a Deployment replica count.

Interpreting Results:

Safe replica ceiling is the smallest target across healthy rollout, selected node loss, largest-zone loss when more than one zone is modeled, and the percentage PDB check. The named Binding policy explains which scenario reduced the answer most.

  • Read Limiter separately from Binding policy. CPU may be the smallest healthy resource while largest-zone loss is the scenario that sets the final replica target.
  • Rollout peak pods includes the rounded-up surge count. Confirm that the current Deployment uses the same percentage semantics before relying on the result.
  • A non-negative Desired replica goal gap means the goal fits below the modeled ceiling. It does not prove that labels, taints, volumes, affinities, or real zone placement allow every pod to schedule.
  • A PDB check covers voluntary evictions. Node crashes and other involuntary disruptions can still reduce availability below minAvailable.

Technical Details:

Each active-node scenario builds independent CPU, memory, pod-slot, optional storage, and optional network ceilings. The steady capacity is the smallest active ceiling. A surge adjustment then converts steady pod capacity into a safe desired replica target.

Formula Core:

Resource budgets first subtract per-node DaemonSet requests and then apply reserve, utilization, topology, and fragmentation factors. Pod requests include any entered per-pod overhead.

F =(1r100)u100(1t100)(1f100) CCPU =N(ACPUDCPU)FRCPU+OCPU Csteady =min(CCPU,Cmemory,Cslots,Cstorage,Cnetwork) Csafe =Csteady1+s100
Kubernetes capacity formula symbols
SymbolMeaningUnit
NActive nodes in the scenariocount
A, DAllocatable per node and repeated DaemonSet request per nodevCPU or GiB
R, OAverage pod request and added pod overheadvCPU/pod or GiB/pod
r, u, t, fReserve, target utilization, topology reserve, and fragmentation allowancepercent
sDeployment maxSurgepercent

Memory uses the same resource equation with GiB values. Pod slots subtract DaemonSet pod count and apply utilization, topology, and fragmentation factors but not the general resource reserve. Ephemeral storage participates only when both allocatable storage and effective pod storage request are greater than zero.

Scenario Rule Core:

Kubernetes capacity scenario rules
ScenarioActive poolSafe-target rule
Healthy rolloutAll entered worker nodesfloor(steady capacity ÷ surge multiplier)
Selected node lossWorker nodes − failed nodesRecalculate all ceilings, then apply surge
Largest-zone lossWorker nodes − ceiling(nodes ÷ zones)Assumes the largest zone holds the rounded-up share
PDB floorSmaller steady capacity after node or zone lossfloor(failure capacity ÷ minAvailable ratio)

A percentage maxSurge is rounded up when reporting peak rollout pods. Percentage maxUnavailable is rounded down for the modeled unavailable count. Percentage PDB minAvailable is rounded up to report the pods that must remain available.

Accuracy Notes:

The profile values and reserve factors are planning assumptions, not Kubernetes defaults or provider guarantees. The model treats the pool as homogeneous and uses average pod requests. It does not reproduce scheduler bin packing, node affinity, topology-spread skew, taints and tolerations, storage topology, persistent-volume attachment limits, autoscaler behavior, priority and preemption, quota, or per-zone subnet differences.

  • Use allocatable values from current nodes and requests from representative pod specifications.
  • Compare the largest-zone estimate with actual node distribution; uneven zones can lose more or less capacity.
  • Run a rollout and drain test in a representative environment before treating the ceiling as an operating limit.

Worked Examples:

Twelve workers across three zones

With 12 workers, 14 allocatable vCPU per node, 0.35 vCPU requested per pod, an 18% reserve, 76% target utilization, and 25% surge, CPU is the healthy limiter at 299 steady pods. The healthy rollout target is 239 replicas. One-node loss lowers it to 219, while the even-split largest-zone loss leaves 8 nodes and a target of 159. The final ceiling is therefore 159 replicas, bound by the zone-loss scenario rather than the healthy CPU total.

References: