📦 Kubernetes LimitRange 완전 정리

2026. 2. 22. 00:30k8s

LimitRange

Namespace 안에서 생성되는 Pod/Container의
리소스 최소/최대값을 제한하는 정책 리소스

다.

즉,

  • CPU 최소값
  • CPU 최대값
  • Memory 최소값
  • Memory 최대값
  • 기본(request/limit) 값

을 강제하는 역할을 한다.


📌 왜 LimitRange가 필요한가?

예를 들어 누군가 이런 Pod를 만들면:

resources:
  limits:
    cpu: "20"
    memory: 100Gi

→ 노드를 거의 독점할 수 있다.

또는 리소스를 아예 안 쓰면:

resources: {}

→ ResourceQuota가 있어도 계산이 이상해질 수 있다.

이걸 방지하기 위해
Namespace 단위로 가이드라인을 설정하는 것이 LimitRange다.


📌 기본 구조

apiVersion: v1
kind: LimitRange
metadata:
  name: example-limitrange
  namespace: test
spec:
  limits:
  - type: Container
    max:
      cpu: "1"
      memory: "1Gi"
    min:
      cpu: "100m"
      memory: "128Mi"
    default:
      cpu: "500m"
      memory: "256Mi"
    defaultRequest:
      cpu: "200m"
      memory: "128Mi"

📊 주요 항목 설명

항목 의미
min 최소 허용값
max 최대 허용값
default limit 기본값
defaultRequest request 기본값
type 적용 대상 (Container, Pod 등)

📌 동작 방식

1️⃣ 사용자가 리소스를 안 쓰고 Pod 생성
→ default 값 자동 적용

2️⃣ 사용자가 max 초과 설정
→ 생성 거부

3️⃣ 사용자가 min 미만 설정
→ 생성 거부


📌 type 종류

type 의미
Container 컨테이너 단위
Pod Pod 전체
PersistentVolumeClaim PVC 용량 제한

📌 예시: max 초과 시 에러

resources:
  limits:
    cpu: "2"

LimitRange max가 1이면:

Error: exceeds limit

Pod 생성 실패


📌 예시: 기본값 자동 적용

리소스 미지정 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
  - name: nginx
    image: nginx

→ default / defaultRequest 값 자동 설정됨


📌 확인 방법

kubectl get limitrange -n test
kubectl describe limitrange example-limitrange -n test

📌 LimitRange vs ResourceQuota 차이

구분 LimitRange ResourceQuota
범위 개별 Pod/Container Namespace 전체
목적 최소/최대 제한 총 사용량 제한
컨테이너 CPU 1core 이하 Namespace 총 CPU 10core 이하

📌 함께 사용하는 구조

실무에서는 보통:

LimitRange → 개별 제한
ResourceQuota → 전체 제한

두 개를 같이 사용한다.


📌 실무 권장 설정 예

✔ 최소 request 강제
✔ max 제한 설정
✔ default 자동 설정
✔ PVC 제한 포함


🎯 한 줄 정리

LimitRange는 Namespace 내 Pod/Container의
리소스 최소/최대값과 기본값을 강제하는 정책이다.