Are Kubernetes CPU limits "hard" limits?
Say I have a node with 1 CPU with two pods scheduled and running/ready/active, each with requests.limits.cpu
of 500m. Pod A uses up 1 CPU for a while--this is normal/allowed. Eventually, pod B wants some CPU. Will Kubernetes (or Linux) make sure that pod B can get the .5 CPU it asks for?
I'm still looking for a definitive answer, but it sounds like these may be hard limits in Linux/Docker. @danielmartins
wrote this in the k8s slack channel:
I believe you can find this out by running
docker inspect
on the containers in which you set the limits. Checking one of my containers, I see that Kubernetes setCpuPeriod
,CpuQuota
for them. The Docker docs (https://docs.docker.com/engine/reference/run/) mention the CFS documentation (https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt), and from the information there, it seems that these are hard limits
For kubernetes v1.2+, CPU resource limits are enforced using hardcapping, and requests are enforced using shares.
The change was noted in the release note and there is an issue open to update the documentation.