limit range


By default, containers run with unbounded compute resources on a Kubernetes cluster. With resource quotas, cluster administrators can restrict resource consumption and creation on a namespace basis. Within a namespace, a Pod or Container can consume as much CPU and memory as defined by the namespace's resource quota. There is a concern that one Pod or Container could monopolize all available resources. A LimitRange is a policy to constrain resource allocations (to Pods or Containers) in a namespace.

LimitRange provides constraints that can:

  • Enforce minimum and maximum compute resources usage per Pod or Container in a namespace.
  • Enforce minimum and maximum storage request per PersistentVolumeClaim in a namespace.
  • Enforce a ratio between request and limit for a resource in a namespace.
  • Set default request/limit for compute resources in a namespace and automatically inject them to Containers at runtime.

Enabling LimitRange


apiVersion: v1
kind: LimitRange
metadata:
	name: testLimit
	namespace: ns1
spec:
	limits:
		- default:
			cpu: 200m
			memory: 500m
		  defaultRequest:
		    cpu: 100m
			memory: 250m
		  type: Container


kubectl apply -f limit.yaml -n ns1

Note- after setting the limit range, we dont need to specify limit in the pod defination files

apiVersion: v1
kind: Pod
metadata:
	name: firstPod
spec:
	containers:
		- image: image:latest
		  name: firstcontainer


Set Min and Max for limit range

apiVersion: v1
kind: LimitRange
metadata:
	name: testLimit
	namespace: ns1
spec:
	limits:
		- default:
			cpu: 200mi
			memory: 500mi
		  defaultRequest:
		    cpu: 100mi
			memory: 250mi
		  min:
		    cpu: 80mi
			memory: 250mi
		  max:
		    cpu: 700mi
			memory: 700mi
		  type: Container


Set Max limit request ratio

apiVersion: v1
kind: LimitRange
metadata:
	name: testLimit
	namespace: ns1
spec:
	limits:
	 - maxLimitRequestRatio:
		memory: 2
	   type: Container