[CKA] Resource Requests와 Limits

스케줄링 기준이 되는 Resource Request와 실행 중 자원 상한인 Limit의 차이를 정리합니다.

Request는 스케줄러가 노드의 여유 자원을 계산할 때 사용하는 값입니다. 조건을 만족하는 노드가 없으면 파드는 Pending 상태가 되고 이벤트에 Insufficient cpu 같은 이유가 표시됩니다.

Limit은 컨테이너가 실행 중 사용할 수 있는 상한입니다. CPU를 초과하면 사용량이 제한되고, 메모리 한계를 넘으면 컨테이너가 OOM으로 종료될 수 있습니다.

resources:
  requests:
    memory: "1Gi"
    cpu: "1"
  limits:
    memory: "2Gi"
    cpu: "2"

Request와 Limit을 모두 생략하면 기본적으로 예약량과 상한이 없습니다. 다만 Namespace에 LimitRange가 있으면 기본값이 주입될 수 있습니다. Limit만 지정하고 Request를 생략하면, 별도 기본값이 없는 경우 Kubernetes는 Request를 Limit과 같은 값으로 설정합니다.

컨테이너가 반복 종료될 때는 kubectl describe pod의 상태와 Last State를 확인합니다. Namespace 전체의 자원 사용량은 ResourceQuota로 제한할 수 있습니다.