피드로 돌아가기
Dev.toDevOps
원문 읽기
kubectl-prof이 쿠버네티스 파드를 재시작하거나 수정하지 않고 프로파일링을 수행하는 방법을 제공한다
kubectl-prof: Profile Your Kubernetes Applications with Zero Overhead and Zero Modifications
AI 요약
Context
쿠버네티스 환경에서 실행 중인 파드의 성능 문제를 분석하려면 일반적으로 사이드카 컨테이너 추가나 파드 재시작이 필요했다. 이러한 방식은 프로덕션 환경에서 서비스 중단을 유발할 수 있어 실시간 디버깅이 어려웠다.
Technical Solution
- kubectl-prof 플러그인 → kubectl prof 명령어로 실행 중인 파드에 직접 프로파일러를 연결하는 구조
- 언어별 전용 도구 사용: Java는 async-profiler와 jcmd, Python은 py-spy, Go는 eBPF 활용
- 프로파일링 작업용 Job을 타겟 파드와 동일한 노드에 생성하여 에이전트 이미지로 컨테이너 프로세스에Attach하는 방식
- Memray 통합을 통해 Python 메모리 할당 추적 및 플레임그래프 생성 지원
- CRI-O 및 containerd 런타임 모두 지원하며 SYS_PTRACE와 SYS_ADMIN capability 자동 부여
Impact
별도의 파드 수정이나 재시작 없이 프로덕션 워크로드에 최소한의 오버헤드로 프로파일링 가능
Key Takeaway
프로파일링 에이전트를 별도 Job 형태로 실행 노드에 배치하여 타겟 컨테이너에 Attach하는 아키텍처로, 애플리케이션 코드 변경 없이 언어별 전문 프로파일링 도구를 활용할 수 있다
실천 포인트
프로덕션 쿠버네티스 환경에서 CPU 급등 현상이 발생한 파드를 중단 없이 분석할 때 kubectl prof mypod -t 5m -l java -o flamegraph 명령어로 async-profiler 기반 플레임그래프를 즉시 생성하여 핫스팟 함수를 파악할 수 있다