Kubernetes Resource requirements
Resource Requirements
Resource Requirements limits CPU and Memory containers can use on kubernetes cluster. These are added as requests and limits on the containers. Requests are resources that can be requested by containers. Limits are the hard limits which the resources will be allocated to the container by the cluster. LimitRange can be used to specify the default limits on the cluster. Resourcequota are used to limit the resources on a namespace level. When more resources are requested than the allocated limits CPU throttling occurs for CPU requests. However when a container continuosly request more RAM than allocated it will be killed.
Limit Range for CPU and RAM
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
Limit Range ensures default assignment for any scheduled container would be 0.5 core and 256 Mi. The maximum allocation for a cluster would be 1 core and 512Mi
Resource Quota for a Namespace
apiVersion: v1
kind: ResourceQuota
metadata:
name: testing-ns-quota
namespace: testing-ns
spec:
hard:
pods: "10"
requests.cpu: "2"
requests.memory: 1G
limits.cpu: "2"
limits.memory: 1G
Resource Quota includes number of containers, total CPU limits and RAM resources in a namespace.
Resource request limit in container
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
tier: frontend
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources:
limits:
memory: "128Mi"
cpu: "250m"
requests:
memory: "128Mi"
cpu: "250m"
ports:
- containerPort: 80
Nginx container requests 0.25 CPU and 128Mi RAM. The maximum resource limit container would be limited is 0.25 and 128Mi RAM.