Goglides Dev 🌱

Balkrishna Pandey
Balkrishna Pandey

Posted on • Originally published at goglides.io on

Part 04: How to force quotas limit to Kubernetes resources (limits/request ratio)

This blog is a continuation of previous blog series https://goglides.io/2020/03/03/limit-range-kubernetes/

Limits/Requests Ratio

If LimitRangeItem.maxLimitRequestRatio is specified in the LimitRangeSpec,

  • the named resource must have a request and limit
  • both request and limit should be non-zero (>0)
  • limit divided by request is less than or equal to the enumerated value

Following manifest (limitrange-limit-request-ratio.yaml) saying limit to be at most twice the amount of memory request,


apiVersion: v1
kind: Namespace
metadata:
  name: limitrange-demo3
---
apiVersion: v1
kind: LimitRange
metadata:
  name: limit-memory-ratio-pod
  namespace: limitrange-demo3
spec:
  limits:
  - maxLimitRequestRatio:
      memory: 2
    type: Pod

Enter fullscreen mode Exit fullscreen mode

apply YAML,


kubectl apply -f limitrange-limit-request-ratio.yaml

Output:
namespace/limitrange-demo3 created
limitrange/limit-memory-ratio-pod created

Enter fullscreen mode Exit fullscreen mode

Describe the limitrange,


kubectl describe -f limitrange-limit-request-ratio.yaml

Output:
Name: limitrange-demo3
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"limitrange-demo3"}}
Status: Active

No resource quota.

Resource Limits
 Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
 ---- -------- --- --- --------------- ------------- -----------------------
 Pod memory - - - - 2

Name: limit-memory-ratio-pod
Namespace: limitrange-demo3
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod memory - - - - 2

Enter fullscreen mode Exit fullscreen mode

Now let’s test the constraint working or not,

First test failed conditions (invalid-limit-request.yaml)


apiVersion: v1
kind: Pod
metadata:
  name: busybox3
  namespace: limitrange-demo3
spec:
  containers:
  - name: busybox-cnt01
    image: busybox
    resources:
      limits:
        memory: "300Mi"
      requests:
        memory: "100Mi"

Enter fullscreen mode Exit fullscreen mode

apply YAML


kubectl apply -f invalid-limit-request.yaml

Output:
Error from server (Forbidden): error when creating "limitrange-limit-request-ratio.yaml": pods "busybox3" is forbidden: memory max limit to request ratio per Pod is 2, but provided ratio is 3.000000

Enter fullscreen mode Exit fullscreen mode

Here pod is failed to deploy because 300/100 > 2.

Now test with valid conditions (valid-limit-request.yaml)


apiVersion: v1
kind: Pod
metadata:
  name: busybox4
  namespace: limitrange-demo3
spec:
  containers:
  - name: busybox-cnt01
    image: busybox
    resources:
      limits:
        memory: "150Mi"
      requests:
        memory: "100Mi"

Enter fullscreen mode Exit fullscreen mode

apply YAML


kubectl apply -f valid-limit-request.yaml

Output:
pod/busybox4 created

Enter fullscreen mode Exit fullscreen mode

Top comments (0)