Skip to content

Burstable QoS Pods

In Kubernetes, a Burstable QoS Pod is a Pod assigned to the Burstable Quality of Service (QoS) class. This classification is determined by the specific resource requests and limits defined for the containers within the pod^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

A Pod falls into the Burstable category if it meets the following two conditions^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md]:

  1. It is not a Guaranteed Pod (meaning request and limit values are not identical for CPU and Memory).
  2. At least one container within the Pod has set a specific request for either memory or CPU^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

Characteristics

The defining feature of a Burstable Pod is that it has a minimum resource guarantee but is allowed to use more resources when capacity is available on the node^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md]. This occurs because the limit (the maximum allowed usage) is set higher than the request (the reserved amount).

Eviction and Priority

Kubernetes uses the QoS class to determine the order in which pods are terminated when the system is under resource pressure (e.g., memory or CPU starvation)1.

  • Lower Priority: Burstable pods have a lower priority compared to Guaranteed pods.
  • Higher Priority: Burstable pods have a higher priority compared to BestEffort pods.

Consequently, when the system is low on resources, the cluster will prioritize killing Burstable pods before Guaranteed pods. However, they will only be targeted after all available BestEffort pods have been cleaned up^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

Example

The following manifest demonstrates a configuration that results in a Burstable classification. The container requests 100Mi of memory but is limited to 200Mi, meaning it is guaranteed 100Mi but can burst up to 200Mi if the node has free resources^[400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md].

apiVersion: v1
kind: [Pod](<./pod.md>)
metadata:
  name: qos-demo-2
  namespace: qos-example
spec:
  containers:
  - name: qos-demo-2-ctr
    image: nginx
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"

Sources

  • 400-devops__06-Kubernetes__k8s-ithelp__Day21__README.md

  1. This behavior is distinct from BestEffort QoS Pods, which are the first to be killed, and Guaranteed QoS Pods, which are the last.