Skip to content

Kubernetes QoS Burstable Class

Kubernetes QoS Burstable is one of the three Quality of Service (QoS) classes assigned to a Pod based on its configured resource requests and limits.^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md]

This QoS class is designed for workloads that typically require a small amount of resources but may need to burst to higher levels when spare capacity is available.

Definition and Conditions

A Pod is classified as Burstable if it meets the following conditions^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md]:

  1. It is not a Guaranteed Pod (meaning it does not have request == limit for CPU and Memory for all containers).
  2. At least one container within the Pod has set a specific request for memory or CPU.

In practice, this is the most common configuration for applications, as it allows the scheduler to place the Pod based on a baseline requirement (request) while allowing it to consume more resources up to a defined ceiling (limit) when the node is underutilized^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

Example Configuration

The following manifest demonstrates a Pod configuration that results in a Burstable QoS class^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md]. Here, the container requests 100Mi of memory but is allowed to burst up to 200Mi.

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-2
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-2-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"

To verify the assigned class, you can inspect the Pod's status:

[kubectl](<./kubectl.md>) get pod qos-demo-2 --output=yaml

The output will contain qosClass: Burstable in the status section^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

Resource Behavior and Implications

The Burstable class represents a balance between resource utilization and stability^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

  • Minimum Guarantee: The Pod is guaranteed the amount of resources specified in the request. The Kubernetes scheduler uses this value to ensure the node has enough capacity to run the Pod^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].
  • Bursting: If the node has unused resources available, the Pod is allowed to consume resources up to its limit (or higher if no limit is set)[^inferred].
  • Eviction Priority: In terms of system stability and OOM (Out of Memory) handling, Burstable Pods have a lower priority than Guaranteed Pods.
    • They are protected compared to BestEffort Pods (which have no requests and are the first to be killed)[^inferred].
    • However, if system memory is insufficient and no BestEffort Pods exist, Burstable Pods become the targets for eviction to reclaim resources^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

Sources

  • 400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md