Overview

A LimitRange object enumerates the minimum and maximum resource usage values per object in a project.

Limits

A LimitRange object can enumerate the following limits for each object type and resource value that is created or modified in the project. If a usage limit is defined, and the incoming resource exceeds the allowed range, then the resource is forbidden from the project.

For some fields, in the absence of a value on the incoming resource, it is possible to apply a default value, if it is specified in the LimitRange definition.

Table 1. Limits
Type ResourceName Description Default Value Supported

Container

cpu

Minimum/maximum CPU allowed per container.

yes

Container

memory

Minimum/maximum memory allowed per container.

yes

Pod

cpu

Minimum/maximum CPU allowed across all containers in a pod.

no

Pod

memory

Minimum/maximum memory allowed across all containers in a pod.

no

Limit Enforcement

Once a LimitRange is created in a project, all resource create and modification requests are evaluated against each LimitRange object in the project. If the resource violates a minimum or maximum constraint enumerated, then the resource is rejected. If the resource does not set an explicit value, and if the constraint supports a default value, then the default value is applied to the resource.

For example, if the container does not express a CPU resource requirement, but the LimitRange specifies a default value for container CPU, then the default value is set to the allowed CPU usage for that container, and the minimum (if specified) is set as the minimum requested value for that container.

Example 1. Limit Range Object Definition
{
  "apiVersion": "v1",
  "kind": "LimitRange",
  "metadata": {
    "name": "limits" (1)
  },
  "spec": {
    "limits": [
    {
      "type": "Pod",
      "max": {
        "memory": "1Gi", (2)
        "cpu": "2" (3)
      },
      "min": {
        "memory": "1Mi", (4)
        "cpu": "250m" (5)
      }
    },
    {
      "type": "Container",
      "max": {
        "memory": "1Gi", (6)
        "cpu": "2" (7)
      },
      "min": {
        "memory": "1Mi", (8)
        "cpu": "250m" (9)
      },
      "default": {
        "memory": "1Mi", (10)
        "cpu": "250m" (11)
      }
    }
    ]
  }
}
1 The name of the limit range document.
2 The maximum amount of memory that a pod can consume on a node across all containers.
3 The maximum amount of cpu that a pod can consume on a node across all containers.
4 The minimum amount of memory that a pod can consume on a node across all containers.
5 The minimum amount of cpu that a pod can consume on a node across all containers.
6 The maximum amount of memory that a single container in a pod can consume.
7 The maximum amount of cpu that a single container in a pod can consume.
8 The maximum amount of memory that a single container in a pod can consume.
9 The maximum amount of cpu that a single container in a pod can consume.
10 The default amount of memory that a container will request if not specified.
11 The default amount of cpu that a container will request if not specified.

Creating a Limit Range

To apply a limit range to a project, create a limit range object definition on your file system to your specifications, then run:

$ oc create -f <limit_range_file>

Viewing Limits

To view limits enforced in a project:

$ oc get limits
NAME
limits

$ oc describe limits limits
Name:           limits
Type            Resource        Min     Max     Default
----            --------        ---     ---     ---
Pod             memory          1Mi     1Gi     -
Pod             cpu             250m    2       -
Container       memory          1Mi     1Gi     1Mi
Container       cpu             250m    250m    250m

Deleting Limits

If you do not want to enforce limits in a project, you can remove any active limit range by name:

$ oc delete limits <limit_name>