Kubernetes Cluster에서는 ResourceQuota를 사용하여 Namespace 전체 Resource를 제한할 수 있습니다.
하지만 개별 Container가 Resource 설정 없이 배포되면 문제가 발생할 수 있습니다.
예:
개발자가 Resource 설정 없이 Pod 배포
↓
Container 무제한 CPU 사용
↓
Node Resource 부족
↓
다른 Application 영향
이 문제를 해결하기 위해 Kubernetes는 LimitRange 기능을 제공합니다.
LimitRange는 Namespace 내부 Container와 Pod의 기본 CPU·Memory Request와 Limit을 자동 적용하는 Resource 관리 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| LimitRange | Container 기본 Resource 설정 |
| ResourceQuota | Namespace 전체 제한 |
| Pod | 실행 대상 |
| kubelet | Resource 제한 적용 |
| Cgroup | 실제 Resource 제어 |
LimitRange 구조를 이해하면 Kubernetes Cluster Resource를 안정적으로 운영할 수 있습니다.
Kubernetes LimitRange란?
LimitRange는 Namespace 내부 Resource 사용 규칙을 정의하는 Kubernetes Resource입니다.
관리 대상:
- Container CPU Request
- Container Memory Request
- Container CPU Limit
- Container Memory Limit
- 최소 Resource
- 최대 Resource
구조:
Namespace
↓
LimitRange 적용
↓
Pod 생성
↓
기본 Resource 자동 적용
개발자가 모든 설정을 직접 작성하지 않아도 됩니다.
Kubernetes LimitRange가 필요한 이유
Resource 설정이 없는 Container는 예측하기 어렵습니다.
예:
Container A
CPU 설정 없음
↓
CPU 과다 사용
↓
Node Resource 부족
LimitRange 적용:
Container 생성
↓
기본 CPU/Memory 설정 적용
↓
안정적인 운영
Resource 예측 가능성을 높입니다.
Kubernetes LimitRange와 ResourceQuota 차이
두 기능은 함께 사용됩니다.
| 구분 | 역할 |
|---|---|
| LimitRange | 개별 Container 제한 |
| ResourceQuota | Namespace 전체 제한 |
예:
LimitRange:
Container 하나당 CPU 2 Core 제한
ResourceQuota:
팀 전체 CPU 20 Core 제한
서로 보완하는 관계입니다.
Kubernetes LimitRange 동작 과정
Container 생성:
Pod 요청
↓
API Server
↓
LimitRange 확인
↓
기본값 적용
↓
Resource 저장
↓
Scheduler 배치
Admission Controller 단계에서 적용됩니다.
Kubernetes LimitRange 설정 구조
예:
apiVersion: v1
kind: LimitRange
metadata:
name: container-limit
spec:
limits:
- type: Container
default:
cpu: "1"
memory: 1Gi
defaultRequest:
cpu: "500m"
memory: 512Mi
기본 Resource 값을 지정합니다.
Kubernetes CPU Request와 Limit
CPU는 두 가지 개념이 있습니다.
Request:
Scheduler가 Node 선택 시 사용하는 값
Limit:
Container가 사용할 수 있는 최대 CPU
예:
Request:
500m
Limit:
2
Container는 최대 2 Core까지 사용할 수 있습니다.
Kubernetes Memory Request와 Limit
Memory도 동일합니다.
Request:
예약 Memory
Limit:
최대 Memory
예:
Request:
512Mi
Limit:
2Gi
Limit 초과 시:
↓
OOMKilled 발생 가능
Memory 관리는 중요합니다.
Kubernetes LimitRange Default 설정
Default 설정은 자동 적용됩니다.
예:
Pod YAML:
containers:
- name: nginx
image: nginx
Resource 없음
↓
LimitRange 적용
↓
CPU / Memory 자동 설정
운영 표준화를 할 수 있습니다.
Kubernetes LimitRange Min Max 설정
최소와 최대 Resource를 제한할 수 있습니다.
예:
최소:
CPU 100m
최대:
CPU 4
너무 작은 Resource 또는 과도한 Resource 요청을 방지합니다.
Kubernetes LimitRange와 Pod 안정성
적절한 Resource 설정:
↓
Scheduler 정확한 판단
↓
Node 안정성 증가
↓
Application 성능 유지
Production 환경에서 필수 관리 항목입니다.
Kubernetes LimitRange 장애 분석
Resource 문제가 발생하면 확인합니다.
LimitRange 확인:
kubectl get limitrange
상세 확인:
kubectl describe limitrange limit-name
Pod Resource 확인:
kubectl describe pod pod-name
적용된 Resource 값을 확인합니다.
Kubernetes LimitRange 오류 사례
대표 오류:
Resource 최소값 초과
요청:
CPU 50m
정책:
최소 CPU 100m
결과:
Pod 생성 실패
Resource 최대값 초과
요청:
Memory 8Gi
정책:
최대 Memory 4Gi
결과:
생성 거부
정책에 맞게 수정해야 합니다.
Kubernetes LimitRange와 Multi Tenant 운영
공유 Cluster에서는 중요합니다.
팀별 Namespace:
↓
LimitRange 적용
↓
기본 Resource 정책 통일
개발팀 간 Resource 충돌을 줄일 수 있습니다.
Kubernetes LimitRange와 Cloud 비용 관리
Cloud 환경에서는 Resource 설정이 비용과 연결됩니다.
LimitRange 적용:
↓
불필요한 Resource 요청 제한
↓
효율적인 Node 사용
↓
비용 절감
FinOps 전략과 연결됩니다.
Kubernetes LimitRange Monitoring
확인 항목:
- Resource 사용량
- Limit 초과
- OOMKilled 발생
- CPU Throttling
Monitoring 시스템과 연결합니다.
Kubernetes LimitRange 운영 전략
Production 환경:
기본 Resource 정책 설정
↓
Application별 조정
↓
Quota와 결합
↓
Monitoring
↓
정기 최적화
안정적인 Cluster 운영이 가능합니다.
Kubernetes LimitRange 장점
| 장점 | 설명 |
|---|---|
| Resource 표준화 | 기본값 적용 |
| 장애 예방 | 과도한 사용 방지 |
| 비용 관리 | 불필요한 Resource 감소 |
| 운영 안정성 | 예측 가능한 환경 |
LimitRange는 Kubernetes Resource 관리의 핵심 기능입니다.
자주 묻는 질문
LimitRange가 설정되면 기존 Pod도 변경되나요?
아닙니다.
새롭게 생성되는 Pod부터 적용됩니다.
ResourceQuota와 LimitRange 중 하나만 사용해도 되나요?
가능하지만 Production 환경에서는 함께 사용하는 것이 일반적입니다.
LimitRange가 CPU 사용량을 직접 감시하나요?
아닙니다.
설정 값을 적용하고 실제 제한은 Linux Cgroup이 담당합니다.
마무리
Kubernetes LimitRange는 Namespace 내부 Container의 Resource 기본값과 제한 조건을 관리하는 핵심 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| LimitRange | Container 기준 설정 |
| ResourceQuota | Namespace 전체 제한 |
| Cgroup | 실제 Resource 제어 |
| kubelet | 실행 관리 |
LimitRange 구조를 이해하면 Kubernetes 환경에서 안정적인 Resource 정책과 효율적인 Cluster 운영 환경을 구축할 수 있습니다.
다음 글에서는 Kubernetes Application 확장 관리 영역인 Kubernetes Vertical Pod Autoscaler(VPA) 완벽 가이드! Pod Resource 자동 조정과 최적화 구조 이해하기를 진행하겠습니다.