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.