Kubernetes 운영에서 안정적인 Application 배포를 위해 가장 중요한 설정 중 하나가 Resource 관리입니다.
많은 초보 운영자가 Kubernetes를 사용할 때 Pod가 실행되지 않거나 성능 문제가 발생하는 이유는 CPU와 Memory 설정이 정확하지 않기 때문입니다.
예를 들어 Application이 사용하는 Resource보다 너무 낮게 설정하면 Container가 종료될 수 있고, 반대로 너무 높게 설정하면 Node Resource가 낭비됩니다.
Kubernetes는 이러한 문제를 해결하기 위해 Container Resource Request와 Limit 기능을 제공합니다.
Resource Request는 Kubernetes Scheduler가 Pod를 어느 Node에 배치할지 결정하는 기준이며, Resource Limit은 Container가 사용할 수 있는 최대 Resource를 제한하는 역할을 합니다.
| 구성 요소 | 역할 |
|---|---|
| Resource Request | Scheduler 배치 기준 |
| Resource Limit | 최대 사용량 제한 |
| CPU | 처리 능력 관리 |
| Memory | 메모리 사용 관리 |
Resource 구조를 이해하면 Pending Pod 문제를 해결하고 효율적인 Kubernetes Cluster 운영이 가능합니다.
Kubernetes Resource Request란?
Resource Request는 Container가 실행되기 위해 최소한으로 필요한 Resource 양을 의미합니다.
Kubernetes Scheduler는 실제 CPU와 Memory 사용량이 아니라 Request 값을 기준으로 Pod 배치를 결정합니다.
예:
Pod 설정:
CPU Request:
500m
Memory Request:
512Mi
의미:
이 Container는 최소한 CPU 0.5 Core와 Memory 512MB 공간이 필요하다는 뜻입니다.
Kubernetes Resource Limit이란?
Resource Limit은 Container가 사용할 수 있는 최대 Resource 한도를 의미합니다.
예:
CPU Limit:
2
Memory Limit:
2Gi
의미:
Container가 최대 CPU 2 Core, Memory 2GB까지만 사용할 수 있습니다.
Limit을 초과하면 Kubernetes는 다음과 같은 동작을 수행합니다.
CPU 초과:
→ 제한 적용
Memory 초과:
→ OOMKilled 발생 가능
따라서 Resource 설정은 신중해야 합니다.
Kubernetes Resource Request와 Limit 차이
| 구분 | Request | Limit |
|---|---|---|
| 목적 | 배치 기준 | 사용 제한 |
| 관리 대상 | Scheduler | Container Runtime |
| 초과 시 | 다른 Node 선택 | 제한 또는 종료 |
| 필수 여부 | 선택 가능 | 선택 가능 |
Request와 Limit은 서로 다른 역할을 수행합니다.
Kubernetes Scheduler와 Resource 관계
Pod가 생성되면 Scheduler는 실행 가능한 Node를 찾습니다.
과정:
Pod 생성
↓
Request 확인
↓
Node Resource 확인
↓
조건 비교
↓
Node 선택
↓
kubelet 실행
예:
Node A:
CPU 여유 4 Core
Pod Request:
CPU 2 Core
배치 가능
반대로 Node Resource가 부족하면 Pending 상태가 됩니다.
CPU Resource 단위 이해하기
Kubernetes CPU는 Core 단위를 사용합니다.
표현:
1 CPU
= 1000m
예:
500m
= 0.5 CPU
100m
= 0.1 CPU
실제 Server CPU 개념과 연결해서 이해하면 됩니다.
Memory Resource 단위 이해하기
Memory는 Byte 단위를 기반으로 표현합니다.
대표 단위:
| 표현 | 의미 |
|---|---|
| Mi | Mebibyte |
| Gi | Gibibyte |
예:
512Mi
≈ 512MB
2Gi
≈ 2GB
운영 환경에서는 Memory 설정이 특히 중요합니다.
Resource Request 설정 예시
Deployment 예:
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
의미:
최소:
CPU 0.5 Core
Memory 512Mi
최대:
CPU 1 Core
Memory 1Gi
Application 특성에 맞게 설정해야 합니다.
Resource Request가 너무 낮으면 발생하는 문제
낮은 Request는 Resource 부족 문제를 발생시킬 수 있습니다.
예:
실제 사용량:
CPU 2 Core
설정:
CPU Request 200m
결과:
- Scheduler 판단 오류
- 성능 저하
- Container 경쟁 증가
실제 사용량을 기반으로 조정해야 합니다.
Resource Request가 너무 높으면 발생하는 문제
반대로 과도한 설정도 문제가 됩니다.
예:
실제 사용량:
CPU 500m
설정:
CPU Request 4 Core
결과:
- Node Resource 낭비
- Pending Pod 증가
- Cloud 비용 증가
적절한 균형이 필요합니다.
Kubernetes QoS Class 이해하기
Resource 설정에 따라 Kubernetes는 Pod를 QoS Class로 분류합니다.
| Class | 특징 |
|---|---|
| Guaranteed | Request와 Limit 동일 |
| Burstable | Request와 Limit 다름 |
| BestEffort | Resource 설정 없음 |
Node Resource 부족 상황에서 우선순위 판단에 사용됩니다.
Kubernetes Guaranteed QoS
가장 높은 안정성을 제공합니다.
조건:
CPU Request = CPU Limit
Memory Request = Memory Limit
예:
CPU:
2
Memory:
4Gi
운영 중요 Application에서 사용합니다.
Kubernetes Burstable QoS
가장 일반적으로 사용되는 방식입니다.
예:
Request:
CPU 500m
Memory 512Mi
Limit:
CPU 2
Memory 2Gi
일정 범위 안에서 유연하게 동작합니다.
Kubernetes BestEffort QoS
Resource 설정이 없는 Pod입니다.
특징:
- 가장 낮은 우선순위
- Resource 부족 시 먼저 종료 가능
테스트 환경에서는 사용할 수 있지만 Production에서는 주의가 필요합니다.
Resource 설정과 HPA 관계
HPA는 Resource Request 값을 기준으로 CPU 사용률을 계산합니다.
구조:
Resource Request 설정
↓
CPU 사용률 계산
↓
HPA 판단
↓
Pod 증가
따라서 HPA 사용 시 정확한 Request 설정이 필요합니다.
Resource 설정과 VPA 관계
VPA는 Resource Request 값을 자동으로 조정합니다.
구조:
사용량 분석
↓
적절한 Request 계산
↓
Resource 변경
VPA는 Resource 최적화 기능입니다.
Resource 부족 문제 해결 방법
운영 환경에서 Resource 부족이 발생하면:
방법 1
Resource 조정
↓
Request/Limit 수정
방법 2
Node 추가
↓
Cluster 확장
방법 3
Autoscaling 적용
↓
자동 관리
상황에 맞는 해결 방법을 선택합니다.
Kubernetes Resource Monitoring
Resource 관리를 위해 Monitoring이 필요합니다.
확인 명령어:
kubectl top pods
kubectl top nodes
확인:
- CPU 사용량
- Memory 사용량
운영 환경에서는 Prometheus와 Grafana를 함께 사용합니다.
Kubernetes Resource 운영 전략
Production 환경에서는 다음 방식을 추천합니다.
개발 환경:
낮은 Request
↓
테스트
↓
사용량 분석
↓
Production 최적값 적용
실제 Metric 기반 관리가 중요합니다.
자주 묻는 질문
Request와 Limit 중 무엇이 더 중요한가요?
둘 다 중요하지만 Scheduler 배치에는 Request가 직접적인 영향을 줍니다.
Limit 없이 Request만 설정해도 되나요?
가능하지만 Application 특성에 따라 설정하는 것이 좋습니다.
Resource 부족하면 자동으로 해결되나요?
아닙니다.
HPA, VPA, Cluster Autoscaler 같은 자동화 기능을 함께 구성해야 합니다.
마무리
Kubernetes Resource Request와 Limit은 안정적인 Container 운영을 위한 핵심 설정입니다.
| 구성 요소 | 역할 |
|---|---|
| Request | Scheduler 배치 기준 |
| Limit | 최대 Resource 제한 |
| CPU | 처리 능력 관리 |
| Memory | 메모리 관리 |
Resource 설정을 제대로 이해하면 Pending Pod 문제를 줄이고 Kubernetes Cluster 비용과 성능을 효율적으로 관리할 수 있습니다.
다음 글에서는 Kubernetes 내부 저장 구조를 다루는 Kubernetes Persistent Volume 완벽 가이드! PV와 PVC를 활용한 Container Storage 관리 방법 이해하기를 알아보겠습니다.