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.
A 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