9/11/2022

Kubernetes CPU Allocation for Pods

 

When it comes to Kubernetes resource allocation, CPU allocation is considered as a critical factor for application/pod performance.

According to Kubernetes spec, there is a way to do this using Limits and Requests.



Resource Management for Pods and Containers | Kubernetes

Assign CPU Resources to Containers and Pods | Kubernetes


But how do we make sure or derive a value for both CPU requests and limits.

I found below article:

For the love of god, stop using CPU limits on Kubernetes (updated)


Summary



Here is the FUN part :) .

Do pods always get the CPU requested by their CPU request ? Is it guaranteed?


Kubernetes CPU requests explained – Mechpen

Linux CFS and task group

https://en.wikipedia.org/wiki/Completely_Fair_Scheduler


How is kernel CFS working?


  • In CFS, every running entity, a process or a task group, has a virtual runtime (vruntime) which accounts for the entity's CPU usage.


  • The scheduling goal of CFS is to keep the vruntime of all running entities to be the same.



  • Thus the allocated CPU time of an entity is proportional to its weight


  • Each entity gets a portion of cpu.shares proportional to the task group's running load on the CPU


Summary:

CPU requests can't be guaranteed since CPU time depends on process load.


Kubernetes QoS classes (Quality of Service)


Configure Quality of Service for Pods | Kubernetes





What should be the best way to configure CPU limits and requests

Will adding K8S CPU limit reduce service performance? - SoByte


  1. Set CPU requests and limits to the same value

  2. Add an HPA (Horizontal Pods Auto scaling) that allows Pods to automatically scale up and down based on load.

  3. Use circuit breaker pattern.