Mastering Kubernetes Resource Management: Setting Memory and CPU Quotas for Namespace Efficiency

Praneeth Bilakanti
3 min readMay 8, 2024

--

Introduction:
Effective resource management is essential for maintaining stability and performance in Kubernetes clusters. One key aspect is setting quotas to limit the total amount of memory and CPU that pods can consume within a namespace. In this guide, we’ll explore how to configure memory and CPU quotas using ResourceQuota objects in Kubernetes, ensuring optimal resource utilization and cluster health.

Understanding Namespace Resource Quotas

Kubernetes namespaces provide a logical separation of resources, allowing different teams or applications to coexist within a cluster. By setting memory and CPU quotas at the namespace level, you can enforce resource boundaries and prevent resource contention.

Configuring Memory and CPU Quotas

Let’s walk through the steps to configure memory and CPU quotas for a namespace:

Step 1: Create a Namespace

Start by creating a namespace to isolate resources and apply quotas.

kubectl create namespace quota-mem-cpu-example

Step 2: Define a ResourceQuota

Create a ResourceQuota manifest specifying quotas for memory and CPU usage within the namespace.

apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi

Apply the ResourceQuota to the namespace:

kubectl apply -f quota-mem-cpu.yaml --namespace=quota-mem-cpu-example

Step 3: Create Pods

Create pods within the namespace, ensuring they adhere to the memory and CPU quotas defined in the ResourceQuota.

Example: Pod with Specified Resource Requests and Limits

apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"

Apply the Pod manifest:

kubectl apply -f quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example

Enforcement and Limitations

Kubernetes enforces the specified quotas, preventing pods from exceeding allocated memory and CPU resources. If a pod attempts to exceed the quotas, Kubernetes will reject its creation, ensuring resource integrity within the namespace.

Attempting to Create a Second Pod

Let’s attempt to create a second pod within the namespace and observe Kubernetes’ enforcement of the memory and CPU quotas.

Example: Second Pod Manifest

apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo-2
spec:
containers:
- name: quota-mem-cpu-demo-2-ctr
image: redis
resources:
limits:
memory: "1Gi"
cpu: "800m"
requests:
memory: "700Mi"
cpu: "400m"

Attempt to create the second pod:

kubectl apply -f quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example

Conclusion: Optimizing Resource Utilization in Kubernetes

By setting memory and CPU quotas for namespaces in Kubernetes, you can effectively manage resource allocation and prevent resource contention. Embrace these best practices to optimize resource utilization and maintain cluster stability, ensuring efficient operation of your Kubernetes deployments.

In this guide, we’ve explored the importance of setting memory and CPU quotas for namespaces in Kubernetes, along with practical steps for configuration and enforcement. With these insights, you can effectively manage resource utilization and maintain cluster health in your Kubernetes environments.

--

--

Praneeth Bilakanti

GCP Cloud Engineer & Spring Boot Developer with a strong foundation in system design. Passionate about leveraging cloud technologies for solutions.