Kubernetes Cluster를 여러 팀이나 여러 Application이 함께 사용하는 환경에서는 Resource 관리가 매우 중요합니다.
하나의 Namespace에서 너무 많은 CPU, Memory, Storage를 사용하면 다른 Application 운영에 영향을 줄 수 있습니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 ResourceQuota 기능을 제공합니다.
ResourceQuota는 Namespace별로 사용할 수 있는 CPU, Memory, Storage, Object 개수 등을 제한하는 Kubernetes Resource 관리 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| ResourceQuota | Namespace Resource 제한 |
| Namespace | Resource 관리 영역 |
| LimitRange | Container 기본 제한 설정 |
| API Server | Quota 정책 적용 |
ResourceQuota를 활용하면 Multi Tenant 환경에서 Resource를 공정하게 배분하고 안정적인 Cluster 운영이 가능합니다.
Kubernetes ResourceQuota란 무엇인가?
ResourceQuota는 특정 Namespace에서 사용할 수 있는 Resource 총량을 제한하는 기능입니다.
관리자는 Namespace마다 사용할 수 있는 Resource 범위를 지정할 수 있습니다.
예:
Development Namespace:
CPU 10 Core 제한
Memory 20GB 제한
Production Namespace:
CPU 50 Core 제한
Memory 100GB 제한
이처럼 팀이나 Application별 Resource 사용량을 관리할 수 있습니다.
Kubernetes ResourceQuota가 필요한 이유
Kubernetes Cluster에서는 여러 Application이 같은 Infrastructure Resource를 공유합니다.
제한 없이 사용하면 특정 Application이 대부분의 Resource를 점유할 수 있습니다.
문제:
| 상황 | 문제 |
|---|---|
| Pod 과다 생성 | Cluster Resource 부족 |
| Memory 과사용 | 다른 서비스 영향 |
| Storage 증가 | Disk 부족 |
| 팀별 사용량 증가 | 운영 관리 어려움 |
ResourceQuota는 이러한 Resource 경쟁 문제를 해결합니다.
Kubernetes ResourceQuota 동작 구조
ResourceQuota는 Namespace 단위로 적용됩니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Namespace | Resource 제한 영역 |
| ResourceQuota | 사용량 제한 정책 |
| API Server | 요청 검증 |
| Scheduler | 배치 관리 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | Namespace 생성 |
| 2단계 | ResourceQuota 설정 |
| 3단계 | Pod 생성 요청 |
| 4단계 | Quota 사용량 확인 |
| 5단계 | 허용 또는 거부 |
설정된 한도를 초과하면 새로운 Resource 생성이 제한됩니다.
Kubernetes ResourceQuota 관리 대상
ResourceQuota는 다양한 Resource를 제한할 수 있습니다.
| Resource | 설명 |
|---|---|
| CPU | Processor 사용량 |
| Memory | 메모리 사용량 |
| Storage | Disk 사용량 |
| Pod | Pod 개수 |
| Service | Service 개수 |
| PVC | Persistent Volume Claim 개수 |
운영 목적에 따라 필요한 제한을 설정할 수 있습니다.
Kubernetes CPU와 Memory Quota
가장 일반적으로 사용하는 Quota는 CPU와 Memory 제한입니다.
예:
Namespace 제한:
| Resource | Limit |
|---|---|
| CPU | 20 Core |
| Memory | 40GB |
결과:
현재 사용량:
18 Core
새로운 Pod 요청:
5 Core
↓
제한 초과
↓
Pod 생성 거부
이를 통해 Resource 독점을 방지합니다.
Kubernetes Object Count Quota
ResourceQuota는 Resource 개수 자체도 제한할 수 있습니다.
예:
| Object | 제한 |
|---|---|
| Pod | 100개 |
| Service | 50개 |
| PVC | 30개 |
| ConfigMap | 200개 |
불필요한 Resource 생성으로 인한 Cluster 부담을 줄일 수 있습니다.
Kubernetes Storage Quota 관리
Storage 사용량도 Namespace별로 제한할 수 있습니다.
예:
| 항목 | 제한 |
|---|---|
| Persistent Volume | 500GB |
| PVC 개수 | 50개 |
Database나 File Storage 사용량이 증가하는 환경에서 유용합니다.
Kubernetes ResourceQuota와 LimitRange 차이
ResourceQuota와 LimitRange는 비슷해 보이지만 목적이 다릅니다.
| 구분 | ResourceQuota | LimitRange |
|---|---|---|
| 범위 | Namespace 전체 | Container 또는 Pod |
| 목적 | 총량 제한 | 개별 제한 |
| 관리 대상 | 전체 Resource | 개별 Resource |
| 예시 | CPU 총 50 Core | Container 최대 2 Core |
두 기능을 함께 사용하면 더욱 정교한 Resource 관리가 가능합니다.
Kubernetes LimitRange란?
LimitRange는 Namespace 내부 개별 Container 또는 Pod의 기본 Resource 설정을 관리하는 기능입니다.
설정 가능 항목:
| 항목 | 설명 |
|---|---|
| Default Limit | 기본 최대 사용량 |
| Default Request | 기본 요청량 |
| Min | 최소 Resource |
| Max | 최대 Resource |
예:
Container가 Resource 설정 없이 생성되어도 자동으로 기본값을 적용할 수 있습니다.
Kubernetes ResourceQuota와 Scheduler 관계
Scheduler는 Pod를 배치할 때 Node Resource뿐 아니라 Namespace Quota 상태도 고려합니다.
구조:
Pod 생성 요청
↓
API Server
↓
ResourceQuota 확인
↓
허용
↓
Scheduler 배치
Quota 초과 시 Pod 생성 단계에서 제한됩니다.
Kubernetes ResourceQuota와 Multi Tenant 환경
대규모 Kubernetes 환경에서는 여러 팀이 하나의 Cluster를 공유합니다.
ResourceQuota는 이러한 Multi Tenant 환경에서 필수 기능입니다.
예:
| 팀 | Namespace | Quota |
|---|---|---|
| 개발팀 | dev | CPU 20 Core |
| 테스트팀 | test | CPU 10 Core |
| 운영팀 | prod | CPU 100 Core |
팀별 Resource 사용량을 독립적으로 관리할 수 있습니다.
Kubernetes ResourceQuota 운영 시 고려사항
Production 환경에서는 적절한 Quota 설계가 필요합니다.
| 항목 | 설명 |
|---|---|
| Resource 분석 | 실제 사용량 확인 |
| 여유 공간 확보 | 갑작스러운 증가 대응 |
| 팀별 정책 | 사용 목적 고려 |
| Monitoring | Quota 사용량 확인 |
너무 낮은 제한은 Application 운영에 영향을 줄 수 있습니다.
Kubernetes ResourceQuota Monitoring
Quota 사용량을 지속적으로 확인하는 것이 중요합니다.
확인 항목:
| 항목 | 설명 |
|---|---|
| 현재 사용량 | 사용 Resource 확인 |
| 남은 용량 | 추가 가능 여부 |
| 초과 요청 | 실패 원인 분석 |
| 팀별 사용량 | 효율 관리 |
Monitoring 시스템과 함께 운영하면 더욱 효과적입니다.
Kubernetes ResourceQuota 장점
| 장점 | 설명 |
|---|---|
| Resource 보호 | 과도한 사용 방지 |
| 공정한 배분 | 팀별 관리 가능 |
| 비용 관리 | 불필요한 사용 감소 |
| 안정성 향상 | 서비스 영향 감소 |
ResourceQuota는 Kubernetes 운영 규모가 커질수록 더욱 중요한 기능입니다.
자주 묻는 질문
ResourceQuota는 어디에 적용되나요?
Namespace 단위로 적용되며 해당 Namespace 내부 Resource 사용량을 제한합니다.
ResourceQuota와 LimitRange를 같이 사용할 수 있나요?
가능합니다.
ResourceQuota는 전체 제한, LimitRange는 개별 Container 제한 역할을 합니다.
Quota를 초과하면 기존 Pod도 종료되나요?
아닙니다.
일반적으로 새로운 Resource 생성 요청이 제한되며 기존 Pod는 유지됩니다.
마무리
Kubernetes ResourceQuota는 Namespace별 Resource 사용량을 제한하고 Cluster Resource를 효율적으로 관리하는 핵심 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| ResourceQuota | 전체 Resource 제한 |
| LimitRange | 개별 Container 제한 |
| Namespace | 관리 영역 |
| API Server | 정책 적용 |
ResourceQuota를 활용하면 Kubernetes Multi Tenant 환경에서 Resource를 공정하게 분배하고 안정적인 운영 환경을 구축할 수 있습니다.
다음 글에서는 Kubernetes 서비스 검색과 내부 통신 구조를 담당하는 Kubernetes DNS 완벽 가이드! CoreDNS와 Service Discovery 구조 이해하기를 알아보겠습니다.