Bin Packer: Requests & Limits
Requests decide where a pod lands. Limits and node pressure decide when it gets hurt.
Requests determine scheduling fit; CPU limits throttle, memory limits can trigger OOM kills, and node memory pressure can cause eviction. Queue pods, let the scheduler place them, then turn up the load.
Σ limits 500m + unbounded (overcommitted)
Σ limits 256Mi + unbounded (overcommitted)
Σ limits 500m + unbounded (overcommitted)
Σ limits 512Mi + unbounded (overcommitted)
Σ limits 1000m + unbounded (overcommitted)
Σ limits 768Mi + unbounded (overcommitted)
Not scheduled (0)
Every pod fits somewhere. Queue a pod with a big request to see Pending.
Select a pod or a node to see its requests, limits, demand and why it ended up where it did.
Custom pod
BurstableDemand at 1x load (what the app actually wants, independent of requests)
Effective requests: 250m, 256Mi
How this model simplifies
One container per pod, restartPolicy: Always, owned by a Deployment, all at equal priority. This is a snapshot, not a timeline.
OOM is instant here. The real kernel kills the container after memory goes over its limit, and the kubelet restarts it.
Eviction follows the kubelet's order: pods using more than their memory request first, then the largest overage above request. It is not sorted by QoS class directly.
Not modelled: allocatable vs capacity, CPU shares under contention, priority and preemption, taints and affinity.