# 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: 80
KubernetesContainer OrchestrationResource Management