⎈ k8s knowledge compiler

Configure Default CPU Requests and Limits for a Namespace [page]deterministic

Define a default CPU resource limits for a namespace, so that every new Pod in that namespace has a CPU resource limit configured.

tasks

This page shows how to configure default CPU requests and limits for a [namespace](#gloss:namespace).

A Kubernetes cluster can be divided into namespaces. If you create a Pod within a namespace that has a default CPU [limit](/docs/concepts/configuration/manage-resources-containers/#requests-and-limits), and any container in that Pod does not specify its own CPU limit, then the [control plane](#gloss:control-plane) assigns the default CPU limit to that container.

Kubernetes assigns a default CPU [request](/docs/concepts/configuration/manage-resources-containers/#requests-and-limits), but only under certain conditions that are explained later in this page.

##

You must have access to create namespaces in your cluster.

If you're not already familiar with what Kubernetes means by 1.0 CPU, read [meaning of CPU](/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu).

## 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 default-cpu-example ```

## Create a LimitRange and a Pod

Here's a manifest for an example [LimitRange](#gloss:limitrange). The manifest specifies a default CPU request and a default CPU limit.

Create the LimitRange in the default-cpu-example namespace:

```shell kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults.yaml --namespace=default-cpu-example ```

Now if you create a Pod in the default-cpu-example namespace, and any container in that Pod does not specify its own values for CPU request and CPU limit, then the control plane applies default values: a CPU request of 0.5 and a default CPU limit of 1.

Here's a manifest for a Pod that has one container. The container does not specify a CPU request and limit.

Create the Pod.

```shell kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod.yaml --namespace=default-cpu-example ```

View the Pod's specification:

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

The output shows that the Pod's only container has a CPU request of 500m `cpu` (which you can read as “500 millicpu”), and a CPU limit of 1 `cpu`. These are the default values specified by the LimitRange.

```shell containers: - image: nginx imagePullPolicy: Always name: default-cpu-demo-ctr resources: limits: cpu: "1" requests: cpu: 500m ```

## What if you specify a container's limit, but not its request?

Here's a manifest for a Pod that has one container. The container specifies a CPU limit, but not a request:

Create the Pod:

```shell kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-2.yaml --namespace=default-cpu-example ```

View the [specification](/docs/concepts/overview/working-with-objects/#object-spec-and-status) of the Pod that you created:

``` kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example ```

The output shows that the container's CPU request is set to match its CPU limit. Notice that the container was not assigned the default CPU request value of 0.5 `cpu`:

``` resources: limits: cpu: "1" requests: cpu: "1" ```

## What if you specify a container's request, but not its limit?

Here's an example manifest for a Pod that has one container. The container specifies a CPU request, but not a limit:

Create the Pod:

```shell kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml --namespace=default-cpu-example ```

View the specification of the Pod that you created:

``` kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example ```

The output shows that the container's CPU request is set to the value you specified at the time you created the Pod (in other words: it matches the manifest). However, the same container's CPU limit is set to 1 `cpu`, which is the default CPU limit for that namespace.

``` resources: limits: …(trimmed)

Sources

tasks/administer-cluster/manage-resources/cpu-default-namespace.md · docConfigure Default CPU Requests and Limits for a Namespace

Related (15)

references Namespacenamespace conf=1
references Control Planecontrol plane conf=1
references LimitRangeLimitRange conf=1
references ResourceQuotaresource quota conf=1
part_of {{% heading "prerequisites" %}}describes conf=1
part_of Create a namespacedescribes conf=1
part_of Create a LimitRange and a Poddescribes conf=1
part_of Clean updescribes conf=1
part_of {{% heading "whatsnext" %}}describes conf=1
part_of For cluster administratorsdescribes conf=1
part_of For app developersdescribes conf=1
api_for Namespacedocuments API object conf=1

← all Docs