리소스 최적화
1. 리소스 설정 기본 원칙
1.1 Requests vs Limits
┌─────────────────────────────────────────────────────────────────────────────┐
│ Resource Configuration │
├─────────────────────────────────────┬───────────────────────────────────────┤
│ Requests │ Limits │
├─────────────────────────────────────┼───────────────────────────────────────┤
│ - 스케줄링에 사용 │ - 런타임 제한에 사용 │
│ - "최소 필요 리소스" │ - "최대 허용 리소스" │
│ - 노드 선택 기준 │ - 초과 시 throttling/OOMKill │
│ - QoS 클래스 결정 │ - cgroup 제한 설정 │
└─────────────────────────────────────┴───────────────────────────────────────┘구분
Requests
Limits
1.2 QoS 클래스
QoS 클래스
스케줄링
OOM 우선순위
사용 케이스
1.3 CPU Throttling 원리
1.4 Memory OOMKill
1.5 피해야 할 안티패턴
2. 최적 리소스 산정 방법
2.1 VPA (Vertical Pod Autoscaler) Recommender
2.2 Goldilocks 대시보드
2.3 PromQL 기반 분석
CPU 사용률 분석
메모리 사용률 분석
2.4 최소 레플리카 계산
2.5 리소스 최적화 체크리스트
항목
확인 기준
조치
3. JVM 워크로드 최적화
3.1 JVM Heap vs 컨테이너 메모리
3.2 컨테이너 인식 JVM 설정
컨테이너 메모리
MaxRAMPercentage
이유
3.3 GC 알고리즘 선택
GC
지연시간
처리량
메모리 오버헤드
사용 케이스
3.4 CPU Shares와 CFS Quota의 JVM 영향
3.5 JMX 모니터링 설정
3.6 JFR (Java Flight Recorder) 설정
3.7 Spring Boot Actuator + Micrometer
3.8 Grafana JVM 대시보드 패널
4. Python/Node.js 워크로드
4.1 Python (Gunicorn/uWSGI)
Worker 수 계산
Gunicorn 설정
Python Deployment
메모리 프로파일링
4.2 Node.js
V8 힙 설정
Cluster 모드 (멀티코어 활용)
메모리 누수 감지
5. Go/Rust 워크로드
5.1 Go
GOMAXPROCS 자동 설정
GOMEMLIMIT 설정
Go 리소스 효율성
5.2 Rust
메모리 사용 패턴
Tokio 런타임 설정
jemalloc 사용
5.3 컴파일 언어 장점
특성
Go
Rust
JVM (비교)
6. 리소스 모니터링 대시보드
6.1 CPU Throttling 감지
6.2 메모리 압박 감지
6.3 Request vs 실제 사용량
6.4 과잉 프로비저닝 감지
6.5 Grafana 패널 예시
6.6 알림 규칙
7. Auto Mode에서의 리소스 최적화
7.1 NodePool 인스턴스 타입 영향
7.2 Over-provisioning vs Right-sizing
7.3 노드 통합 동작
7.4 클러스터 수준 리소스 효율성 메트릭
관련 문서
마지막 업데이트