1. 개요

각 파드에 컨테이너 실행에 필요한 리소스(CPU, 메모리 등) 량을 지정할 수 있다. 

따라서 파드에 컨테이너에 대한 리소스 request를 지정하면, 스케쥴러는 이 정보를 기반으로 파드를 배치할 노드를 결정한다. 그리고 컨테이너 리소스 limit을 지정하면 kubelet이 실행 중인 컨테이너가 더 많은 리소스를 사용하지 못하도록 제한한다.

2. Request & Limit

파드가 실행 중인 노드에 리소스가 충분하다면 request보다 더 많은 리소스를 사용할 수 있다. 이를 overcommitted 상태라고 한다. 그러나 그 한계는 limit 까지이다.

예) 컨테이너에 256MB의 메모리를 request 했고, 현재 8GB 노드에서 실행되고 있고, 현재 해당 노드에 다른 파드는 없다. 그렇다면 컨테이너는 더 많은 메모리를 사용할 수 있음

예) 컨테이너에 4GB의 메모리를 limit하면 kubelet이 이를 적용한다. 만약 컨테이너가 허용된 양보다 많은 메모리를 사용하려고 한다면 OOM이 발생하고 종료될 것이다.

3. CPU

CPU는 쿠버네티스 CPU 단위이다. 쿠버네티스 CPU 1RO는 CSP의 vCPU/Core 1개, ㄷ또는 베어메탈의 1개 하이퍼스레드에 해당한다.

4. 메모리

memory에 대한 request와 limit은 바이트 단위로 측정된다.

사용되는 접미사는 E, P, T, G, M, K 혹은 Ei, Pi, Ti, Gi, Mi, Ki 등이다. 128974848, 129e6, 129M, 123Mi는 동일한 의미를 나타낸다.

5. 예

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"