Skip to content

Quality of Service (QoS) Classes

Overview

Kubernetes assigns QoS classes to pods based on resource requests/limits. QoS determines eviction priority under node pressure.


QoS Classes

ClassConditionEviction Priority
GuaranteedAll containers have requests = limits for CPU & memoryLast (highest priority)
BurstableAt least one container has request < limitMiddle
BestEffortNo requests or limits setFirst (lowest priority)

Guaranteed QoS

Every container must have identical requests and limits:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: guaranteed-pod
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "100m"       # Must equal request
        memory: "128Mi"   # Must equal request

Burstable QoS

At least one container has resource requests set, but not equal to limits:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: burstable-pod
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "500m"       # Different from request
        memory: "256Mi"   # Different from request

BestEffort QoS

No resource requests or limits:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: besteffort-pod
spec:
  containers:
  - name: app
    image: nginx
    # No resources specified

Check QoS Class

bash
kubectl get pod <pod-name> -o jsonpath='{.status.qosClass}'

# Or describe
kubectl describe pod <pod-name> | grep "QoS Class"

Eviction Order

When node is under memory pressure:

  1. BestEffort pods evicted first
  2. Burstable pods evicted next (based on usage vs request)
  3. Guaranteed pods evicted last

CKA Tip

To get Guaranteed QoS:

  • Set both requests AND limits
  • Make them equal for BOTH cpu AND memory
  • Do this for ALL containers in the pod

Released under the MIT License.