⎈ k8s knowledge compiler

Configure Quality of Service for Pods [page]deterministic

tasksnetworking

This page shows how to configure Pods so that they will be assigned particular [Quality of Service (QoS) classes](#gloss:qos-class). Kubernetes uses QoS classes to make decisions about evicting Pods when Node resources are exceeded.

When Kubernetes creates a Pod it assigns one of these QoS classes to the Pod:

* [Guaranteed](/docs/concepts/workloads/pods/pod-qos/#guaranteed) * [Burstable](/docs/concepts/workloads/pods/pod-qos/#burstable) * [BestEffort](/docs/concepts/workloads/pods/pod-qos/#besteffort)

> Note: Kubernetes assigns the QoS class when the Pod is created, and it remains unchanged for the lifetime of the Pod. If you attempt to [resize the Pod's resources](/docs/tasks/configure-pod-container/resize-container-resources/) to values that would result in a different QoS class, control plane rejects your request with an error message.

##

You also need to be able to create and delete namespaces.

## Create a namespace

Create a namespace so that the resources you create in this exercise are isolated from the rest of your cluster.

```shell kubectl create namespace qos-example ```

## Create a Pod that gets assigned a QoS class of Guaranteed

For a Pod to be given a QoS class of `Guaranteed`:

* Every Container in the Pod must have a memory limit and a memory request. * For every Container in the Pod, the memory limit must equal the memory request. * Every Container in the Pod must have a CPU limit and a CPU request. * For every Container in the Pod, the CPU limit must equal the CPU request.

These restrictions apply to init containers and app containers equally. [Ephemeral containers](/docs/concepts/workloads/pods/ephemeral-containers/) cannot define resources so these restrictions do not apply.

Here is a manifest for a Pod that has one Container. The Container has a memory limit and a memory request, both equal to 200 MiB. The Container has a CPU limit and a CPU request, both equal to 700 milliCPU:

Create the Pod:

```shell kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example ```

View detailed information about the Pod:

```shell kubectl get pod qos-demo --namespace=qos-example --output=yaml ```

The output shows that Kubernetes gave the Pod a QoS class of `Guaranteed`. The output also verifies that the Pod Container has a memory request that matches its memory limit, and it has a CPU request that matches its CPU limit.

```yaml spec: containers: ... resources: limits: cpu: 700m memory: 200Mi requests: cpu: 700m memory: 200Mi ... status: qosClass: Guaranteed ```

> Note: If a Container specifies its own memory limit, but does not specify a memory request, Kubernetes automatically assigns a memory request that matches the limit. Similarly, if a Container specifies its own CPU limit, but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches the limit.

#### Clean up {#clean-up-guaranteed}

Delete your Pod:

```shell kubectl delete pod qos-demo --namespace=qos-example ```

## Create a Pod that gets assigned a QoS class of Burstable

A Pod is given a QoS class of `Burstable` if:

* The Pod does not meet the criteria for QoS class `Guaranteed`. * At least one Container in the Pod has a memory or CPU request or limit.

Here is a manifest for a Pod that has one Container. The Container has a memory limit of 200 MiB and a memory request of 100 MiB.

Create the Pod:

```shell kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-2.yaml --namespace=qos-example ```

View detailed information about the Pod:

```shell kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml ```

The output shows that Kubernetes gave the Pod a QoS class of `Burstable`:

```yaml spec: containers: - image: nginx imagePullPolicy: Always name: qos-demo-2-ctr resources: limits: memory: 200Mi requests: memory: 100Mi ... status: qosCl …(trimmed)

Sources

tasks/configure-pod-container/quality-service-pod.md · docConfigure Quality of Service for Pods

Related (13)

references QoS ClassQuality of Service (QoS) classes conf=1
part_of {{% heading "prerequisites" %}}describes conf=1
part_of Create a namespacedescribes conf=1
part_of Create a Pod that has two Containersdescribes conf=1
part_of Retrieve the QoS class for a Poddescribes conf=1
part_of Clean updescribes conf=1
part_of {{% heading "whatsnext" %}}describes conf=1
part_of For app developersdescribes conf=1
part_of For cluster administratorsdescribes conf=1
api_for Poddocuments API object conf=1

← all Docs