Upgrade & Secure Your Future with DevOps, SRE, DevSecOps, MLOps!

We spend hours on Instagram and YouTube and waste money on coffee and fast food, but won’t spend 30 minutes a day learning skills to boost our careers.
Master in DevOps, SRE, DevSecOps & MLOps!

Learn from Guru Rajesh Kumar and double your salary in just one year.


Get Started Now!

Kubernetes ResourceQuota & LimitRange Example Programs

Kubernetes ResourceQuota and LimitRange are two important mechanisms for managing resource allocation and usage within a Kubernetes cluster.

Here’s a comparison of ResourceQuota and LimitRange features and use cases in a tabular format:

FeatureResourceQuotaLimitRange
ScopeNamespace-wideIndividual pods and containers
PurposeLimit aggregate resource consumptionSet constraints on individual resources
Resource TypesCPU, memory, storage, object countsCPU, memory
Default ValuesDoes not set defaultsCan set default requests and limits
Enforcement LevelAcross all pods in a namespacePer pod or container
Ratio EnforcementNoCan enforce request-to-limit ratio
Object CreationCan limit number of objects by typeN/A
Use CaseResourceQuotaLimitRange
Prevent resource overuse by a team
Ensure fair resource distribution
Set default resource requests/limits
Prevent creation of pods without limits
Limit storage consumption
Control number of objects (e.g., services, ConfigMaps)
Enforce minimum resource requirements
Prevent excessive resource allocation to single pod
Maintain consistent request-to-limit ratios
Isolate resources between different environments (dev/prod)

This comparison highlights the complementary nature of ResourceQuota and LimitRange in managing Kubernetes cluster resources effectively.

ResourceQuota

ResourceQuota is used to limit the aggregate resource consumption per namespace. It can restrict:

  • Total compute resources (CPU and memory) that can be requested
  • Number of objects that can be created by type (e.g., pods, services)
  • Total storage resources that can be consumed

Key features:

  • Applied at the namespace level
  • Limits the sum of resources across all pods in a namespace
  • Enforces constraints on both resource requests and limits

Example ResourceQuota:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 1Gi
    limits.cpu: "4"
    limits.memory: 2Gi

LimitRange

LimitRange sets constraints on individual pods and containers within a namespace. It can:

  • Enforce minimum and maximum compute resources per pod or container
  • Set default request/limit values for containers
  • Enforce a ratio between request and limit for a resource

Key features:

  • Applied at the pod and container level within a namespace
  • Sets default values for resource requests and limits
  • Can prevent the creation of pods that don’t meet the specified constraints

Example LimitRange:

apiVersion: v1
kind: LimitRange
metadata:
  name: limit-mem-cpu-per-container
spec:
  limits:
  - default:
      cpu: 500m
      memory: 512Mi
    defaultRequest:
      cpu: 200m
      memory: 256Mi
    type: Container

Use Cases

  • ResourceQuota: Useful for enforcing overall resource constraints in a shared cluster environment, preventing one team or application from consuming all available resources.
  • LimitRange: Helpful for setting reasonable defaults and preventing the creation of pods with excessive resource requirements or no specified limits.

By using both ResourceQuota and LimitRange together, cluster administrators can effectively manage resource allocation and ensure fair usage across different teams and applications within a Kubernetes cluster.

apiVersion: v1
kind: Namespace
metadata:
  name: myspace
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: myspace
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-quota
  namespace: myspace
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    replicationcontrollers: "20"
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"



apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: helloworld-deployment
  namespace: myspace
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      containers:
      - name: k8s-demo
        image: wardviaene/k8s-demo
        ports:
        - name: nodejs-port
          containerPort: 3000
        resources:
          requests:
            cpu: 200m
            memory: 0.5Gi
          limits:
            cpu: 400m
            memory: 1Gi


apiVersion: v1
kind: LimitRange
metadata:
  name: limits
  namespace: myspace
spec:
  limits:
  - default:
      cpu: 200m
      memory: 512Mi
    defaultRequest:
      cpu: 100m
      memory: 256Mi
    type: Container
DevOps Certification, SRE Certification, and DevSecOps Certification by DevOpsSchool

Explore our DevOps Certification, SRE Certification, and DevSecOps Certification programs at DevOpsSchool. Gain the expertise needed to excel in your career with hands-on training and globally recognized certifications.