# Kubernetes Pod Resource Limits
Today I learned about the critical importance of properly configuring resource requests and limits for Kubernetes pods, and how it affects cluster stability and efficiency.
## The Resource Configuration Problem
In our production Kubernetes cluster, we were experiencing two major issues:
1. Some pods were being terminated unexpectedly (OOMKilled)
2. Cluster nodes were underutilized despite the autoscaler not adding more pods
After investigation, I discovered these issues stemmed from improper resource configuration.
## Understanding Kubernetes Resource Controls
Kubernetes uses two key concepts for resource management:
- **Requests**: The minimum guaranteed resources a pod needs (used for scheduling)
- **Limits**: The maximum resources a pod can consume (enforced by the container runtime)
## Best Practices I Implemented
After analyzing our workloads, I implemented these guidelines:
1. **Set realistic requests based on actual usage**: Used metrics from Prometheus to determine baseline needs
2. **Configure memory limits conservatively**: Set to ~30% above the request to prevent OOMKilled events
3. **Consider CPU limits carefully**: Sometimes removed CPU limits entirely as they can cause throttling
4. **Use different configurations for different workloads**: Created standard profiles for stateless vs. stateful services
5. **Implement Quality of Service (QoS) classes**: Structured our pods to fall into appropriate QoS tiers
## Results
After implementing these changes:
- Pod terminations due to OOM decreased by 94%
- Cluster utilization improved by 35%
- Cost savings of approximately 22% through better resource efficiency
- More predictable application performance
This experience taught me that resource configuration is not just a technical detail but a critical aspect of Kubernetes operations that directly impacts reliability and cost.
Code Example
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: app
image: app:1.0.0
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
# Note: No CPU limit to avoid throttling
ports:
- containerPort: 80KubernetesContainer OrchestrationResource Management