반응형
들어가며: Pod의 리소스 관리는 왜 중요할까?
쿠버네티스 환경에서 Pod가 사용하는 CPU나 메모리를 제한하지 않으면, 자원 과다 사용으로 인해 다른 서비스에 장애가 발생할 수 있습니다.
이를 예방하기 위해 쿠버네티스는 리소스 Requests와 Limits를 제공하여 컨테이너별 자원 사용량을 예측하고 제어할 수 있도록 합니다.
이번 글에서는 다음 내용을 다룹니다:
- Requests와 Limits의 개념과 차이점
- QoS 클래스 (Guaranteed, Burstable, BestEffort)
- 실습 가능한 YAML 예시
- 운영 환경에서 리소스 관리 전략
1. Requests와 Limits란 무엇인가?
Requests
- 컨테이너가 최소한으로 보장받아야 하는 리소스
- 스케줄러가 Pod를 배치할 때 Requests 값을 기반으로 노드 자원을 계산
Limits
- 컨테이너가 사용할 수 있는 최대 리소스
- Limits를 초과하면 CPU는 throttling(속도 제한), 메모리는 OOMKilled(프로세스 종료)
예시: Requests & Limits 설정
apiVersion: v1
kind: Pod
metadata:
name: resource-pod
spec:
containers:
- name: app
image: nginx
resources:
requests:
cpu: "250m" # 최소 0.25 CPU
memory: "128Mi" # 최소 128MB 메모리
limits:
cpu: "500m" # 최대 0.5 CPU
memory: "256Mi" # 최대 256MB 메모리
2. Requests와 Limits의 차이점
항목 | Requests | Limits |
---|---|---|
의미 | 최소 보장 리소스 | 최대 허용 리소스 |
스케줄링 영향 | Pod 배치에 직접 영향 | Pod 실행 중 자원 제한 |
초과 시 동작 | 스케줄 실패 가능성 | CPU: 속도 제한, 메모리: 종료 |
3. QoS 클래스란?
Kubernetes는 Pod의 Requests와 Limits 값에 따라 QoS(Quality of Service) 클래스를 자동으로 부여합니다.
QoS 클래스 | 조건 |
---|---|
Guaranteed | 모든 컨테이너가 Requests=Limits 설정 |
Burstable | Requests < Limits 설정 |
BestEffort | Requests와 Limits 미설정 |
예시
- Guaranteed Pod는 리소스가 부족할 때도 우선적으로 유지됩니다.
- BestEffort Pod는 가장 먼저 제거될 가능성이 높습니다.
4. 리소스 단위 이해하기
- CPU: 1 = 1 CPU 코어, 500m = 0.5 CPU
- Memory: 1Gi = 1024Mi = 약 1GB
m
단위는 milliCPU(1/1000 CPU)
5. 실습: 리소스 제한 없는 Pod vs 제한 있는 Pod
apiVersion: v1
kind: Pod
metadata:
name: no-limit-pod
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "while true; do echo Hello; sleep 1; done"]
위 Pod는 CPU/메모리 제한이 없으므로 노드 리소스를 무한히 점유할 가능성이 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: limited-pod
spec:
containers:
- name: app
image: busybox
resources:
requests:
cpu: "100m"
memory: "64Mi"
limits:
cpu: "200m"
memory: "128Mi"
위 Pod는 명시된 범위 내에서만 자원을 사용합니다.
6. 운영 환경에서의 리소스 관리 전략
- Requests 값을 실제 애플리케이션 평균 사용량 기반으로 설정
- Limits 값은 평균보다 1.5~2배 크게 설정해 여유 확보
- **HPA(Horizontal Pod Autoscaler)**와 연계하여 자동 스케일링
- ResourceQuota를 네임스페이스 단위로 설정해 팀별 리소스 관리
7. FAQ (Answer Engine Optimization)
Q1. Requests와 Limits를 설정하지 않으면 어떻게 되나요?
A. Pod는 BestEffort QoS를 받으며, 자원 부족 시 가장 먼저 종료될 수 있습니다.
Q2. CPU Limits를 초과하면 어떤 일이 발생하나요?
A. CPU는 강제로 제한(throttling)되어 성능 저하가 발생합니다.
Q3. Memory Limits를 초과하면요?
A. OOMKilled(Out Of Memory)로 Pod가 강제 종료됩니다.
8. 핵심 요약
개념 | 설명 |
---|---|
Requests | Pod가 보장받을 최소 리소스 |
Limits | Pod가 사용할 수 있는 최대 리소스 |
QoS | Requests/Limits 설정에 따른 우선순위 |
운영 전략 | 평균 사용량 기반의 Requests, 여유 있는 Limits 설정 |
마무리
Pod의 리소스를 올바르게 설정하면 안정성과 효율성을 동시에 확보할 수 있습니다.
반응형
'개발 창고 > Server' 카테고리의 다른 글
Pod 살펴보기 - Part7: Pod의 건강상태는? (4) | 2025.07.25 |
---|---|
Pod 살펴보기 - Part6: 컨테이너 한 개로는 부족해 (2) | 2025.07.24 |
Pod에 정보 전달하기: ConfigMap과 Secret 완벽 가이드 (2) | 2025.07.22 |
Pod 데이터 저장소 연결하기: Kubernetes 볼륨(Volume) 완벽 가이드 (2) | 2025.07.21 |
Pod 라벨링 시스템 이해하기: 왜 Kubernetes에서 라벨이 중요한가? (3) | 2025.07.20 |