Kubernetes에서 리소스 관리는 중요한 요소입니다.
하나의 클러스터를 여러 팀이 공유할 때, 특정 네임스페이스에서 과도한 리소스를 사용하지 못하도록 제한해야 합니다.
이를 위해 Kubernetes는 ResourceQuota와 LimitRange를 제공합니다.
이번 글에서는 ResourceQuota와 LimitRange의 개념, 차이점, 그리고 실전 활용법을 정리하겠습니다.
🔹 ResourceQuota란?
ResourceQuota는 네임스페이스 단위로 리소스(CPU, 메모리, 스토리지 등)의 최대 사용량을 제한하는 리소스입니다.
✔️ 네임스페이스 내에서 사용 가능한 리소스 총량을 제한
✔️ CPU, 메모리, 스토리지, 오브젝트(Pod, Service, PVC 등) 개수 제한 가능
✔️ 팀별 리소스 사용량을 조절하여 공정한 분배 가능
💡 ResourceQuota를 설정하면, 해당 네임스페이스의 리소스 사용이 지정된 한도를 초과할 수 없습니다.
🔹 ResourceQuota 예제
아래 예제는 my-namespace에서 최대 10개의 Pod만 생성 가능하며, CPU와 메모리 사용량도 제한하는 ResourceQuota를 설정합니다.
apiVersion: v1
kind: ResourceQuota # ResourceQuota 리소스 선언
metadata:
name: my-quota # ResourceQuota의 이름
namespace: my-namespace # 적용할 네임스페이스
spec:
hard:
pods: "10" # 최대 10개의 Pod 생성 가능
requests.cpu: "2" # 총 2개 CPU 요청 가능
requests.memory: "4Gi" # 총 4Gi 메모리 요청 가능
limits.cpu: "4" # 최대 4개 CPU 사용 가능
limits.memory: "8Gi" # 최대 8Gi 메모리 사용 가능
💡 위 설정이 적용되면, my-namespace에서는 최대 10개의 Pod까지만 배포할 수 있습니다.
🔹 ResourceQuota 상태 확인
kubectl get resourcequota --namespace=my-namespace
kubectl describe resourcequota my-quota --namespace=my-namespace
💡 네임스페이스에서 설정된 리소스 한도를 확인할 수 있습니다.
🔹 LimitRange란?
LimitRange는 개별 Pod 또는 컨테이너가 요청할 수 있는 최소/최대 리소스를 제한하는 리소스입니다.
✔️ Pod 또는 컨테이너 단위의 CPU, 메모리 최소/최대값 설정
✔️ 특정 Pod가 과도한 리소스를 차지하지 않도록 제한 가능
✔️ ResourceQuota와 함께 사용하면 더욱 효과적
💡 LimitRange는 ResourceQuota와 달리 네임스페이스 전체가 아니라, 개별 Pod/컨테이너에 적용됩니다.
🔹 LimitRange 예제
아래 설정은 Pod 또는 컨테이너가 요청할 수 있는 최소/최대 CPU 및 메모리를 제한합니다.
apiVersion: v1
kind: LimitRange # LimitRange 리소스 선언
metadata:
name: my-limitrange # LimitRange의 이름
namespace: my-namespace # 적용할 네임스페이스
spec:
limits:
- type: Container # 컨테이너 단위로 제한 적용
max:
cpu: "2" # 최대 2개 CPU 사용 가능
memory: "2Gi" # 최대 2Gi 메모리 사용 가능
min:
cpu: "100m" # 최소 100m(0.1) CPU 요청해야 함
memory: "256Mi" # 최소 256Mi 메모리 요청해야 함
default:
cpu: "500m" # 기본 CPU 할당 (0.5 vCPU)
memory: "512Mi" # 기본 메모리 할당 (512Mi)
defaultRequest:
cpu: "250m" # 기본 요청 CPU (0.25 vCPU)
memory: "256Mi" # 기본 요청 메모리 (256Mi)
💡 LimitRange가 적용되면, 컨테이너가 cpu: 10과 같이 과도한 요청을 하지 못하도록 제한됩니다.
🔹 LimitRange 상태 확인
kubectl get limitrange --namespace=my-namespace
kubectl describe limitrange my-limitrange --namespace=my-namespace
💡 네임스페이스 내에서 설정된 최소/최대 리소스 한도를 확인할 수 있습니다.
🔹 ResourceQuota vs LimitRange 비교
기능 ResourceQuota LimitRange
적용 범위 | 네임스페이스 전체 | 개별 Pod 또는 컨테이너 |
리소스 제한 방식 | 전체 사용량 제한 | 최소/최대 값 설정 |
리소스 종류 | CPU, 메모리, 스토리지, Pod 개수 등 | CPU, 메모리 |
주 사용 목적 | 네임스페이스별 리소스 할당 | 개별 Pod의 과도한 리소스 사용 방지 |
💡 ResourceQuota는 네임스페이스 전체의 리소스 사용량을 제한하고, LimitRange는 개별 Pod/컨테이너의 리소스를 제한합니다.
🚀 마무리
✔️ ResourceQuota는 네임스페이스 단위로 리소스 사용량을 제한
✔️ LimitRange는 개별 Pod 또는 컨테이너의 최소/최대 리소스를 제한
✔️ 두 개념을 함께 사용하면 리소스를 효과적으로 관리 가능
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
Kubernetes 리소스 시리즈 #13: ServiceAccount (정책 및 접근 제어 리소스) (0) | 2025.03.05 |
---|---|
Kubernetes 리소스 시리즈 #12: RBAC (Role-Based Access Control) (정책 및 접근 제어 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #10: Node & Namespace (클러스터 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #9: PersistentVolume & StorageClass (구성 및 스토리지 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #8: ConfigMap & Secret (구성 및 스토리지 리소스) (0) | 2025.03.05 |