I have a question on an hypothetical use case, in order to define the charge-back model on a multi-tenant cluster, ie a cluster whose infrastructure cost must be split between the different applications that run on the cluster.
The use case is:
- A cluster with cluster autoscaler activated
- A new pod needs to be scheduled
- All nodes are full
- There is a node where some burstable pods are running over request, and where the new pod could be scheduled if the burstable pods were throttled to their requests
What will happen to accommodate the new pod:
a) Will the cluster scale up?
b) Or will the burstable pods be throttled or evicted?
In case a), the charge-back model needs to take into account the request and the usage of pods. Indeed, the burstable pods must pay for burst usage, which may trigger cluster scale up.
In case b), the charge back model needs to take into account only the pod requests.
Indeed, only pod requests drive the cluster size, and so its cost.
In this case, burst usage is somehow free, but obviously it’s not guaranteed.
IMPORTANT NOTE: the charge-back model must be balanced: the sum of all charges must be equal to the cluster cost. There is no point in making “extra revenue” by charging burst usage.
Looking at https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler, I believe case b) will happen, but I would like confirmation.
Cluster autoscaler increases or decreases the size of the node pool automatically, based on the resource requests (rather than actual resource utilization) of Pods running on that node pool’s nodes. It periodically checks the status of Pods and nodes, and takes action: