
데브옵스
K8s에서 Java Heap Dump 저장하고 내려받기 개선
두줄요약
Kubernetes 환경에서 OOM 힙덤프가 사라지지 않도록 PV와 NFS로 보관 구조를 개선했습니다. 또한 Rclone과 MinIO를 활용해 웹 UI로 쉽게 내려받을 수 있게 했습니다.
문제 상황
- Kubernetes 환경의 JVM 애플리케이션에서 OOM 발생 시 힙덤프가 POD 내부에만 남아 분석 시점에 사라질 수 있는 문제
- kubectl cp로 직접 내려받아야 해서 수집 경로와 운영 부담이 큰 상태
원인 분석
- emptyDir 같은 임시 볼륨은 POD 생명주기와 함께 소멸
- hostPath는 노드 종속성 때문에 POD가 다른 노드로 이동하면 접근성과 관리성이 떨어짐
- 덤프 파일을 별도 저장소로 옮기고 내려받는 수단이 추가로 필요
해결 방법
- PV와 NFS를 사용해 덤프 파일을 POD 생명주기 밖에서 보관할 수 있게 구성
- Java 옵션으로 OOM 시 힙덤프를 지정 경로에 생성하고, Deployment에 PVC 마운트 적용
- Rclone 기반 dump collector를 두어 PV의 덤프를 MinIO로 주기적 전송
성능/운영 포인트
- MinIO UI를 통해 Web UI 방식의 손쉬운 다운로드 제공
- hostPath보다 중앙화된 보관으로 관리성 향상
- dump collector를 단순 스크립트와 재시도 기능으로 운영 부담 최소화
