CertGrid CertGrid
Hands-on Lab·Certified Kubernetes Application Developer

Resource Requests, Limits and OOMKilled

Requests are what the scheduler reserves; limits are what the kernel enforces. The asymmetry that catches people is between the two resources: memory is incompressible so exceeding its limit kills the container, while CPU is compressible so exceeding its limit just makes it slower. Both are reproduced here, along with the three QoS classes those numbers put a Pod into.

Configuration and Security Guide 26 of 44 Intermediate

Written against the versions above. Exit code 137 is 128 + 9, meaning the process was killed by SIGKILL. The kernel's OOM killer sends it and the kubelet reports `OOMKilled`. A container with `restartPolicy: Always` would restart and eventually reach `CrashLoopBackOff` with `OOMKilled` as the last state - the reason people see the loop and miss the cause.

Five Pods across the workers. The node's allocated-resources table is read from cka1001-node01, which is where the scheduler placed the reserved Pods.
Server NameIP AddressOSRolesCPURAMHDD
CKA1001192.168.0.175Ubuntu 26.04 LTSControl Plane Node2 Core4 GB50 GB
CKA1001-NODE01192.168.0.176Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB
CKA1001-NODE02192.168.0.177Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB
CKA1001-NODE03192.168.0.178Ubuntu 26.04 LTSWorker Node2 Core4 GB50 GB

Before you start

  1. Three Pods, three QoS classes

  2. What the scheduler actually reserved

  3. The limit that kills

  4. The limit that only slows you down

Official sources