Configure Quality of Service for Pods [page]deterministic
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)