본문 바로가기
클라우드/쿠버네티스

쿠버네티스 모니터링: 별도 도구 없이 kubectl만으로 끝내는 핵심 가이드

by gasbugs 2026. 1. 31.

안녕하세요! '골든 쿠버스트로넛'을 향해 함께 달리고 있는 여러분, 반갑습니다. 👋

오늘은 CKAD(Certified Kubernetes Application Developer) 시험 범위 중에서도 실무에서 가장 빈번하게 사용되는 주제인 "애플리케이션 모니터링을 위한 k8s 내장 CLI 도구"에 대해 아주 깊숙이 파헤쳐 보겠습니다. 🕵️‍♂️

별도의 무거운 모니터링 솔루션(Prometheus, Grafana 등) 없이도, 오직 kubectl만으로 클러스터와 애플리케이션의 상태를 진단하는 핵심 기술들을 정리해 드릴게요.


🚀 k8s 내장 CLI 도구로 애플리케이션 모니터링하기

쿠버네티스 환경에서 애플리케이션이 "잘 돌아가고 있는가?"를 확인하는 것은 단순히 Running 상태를 보는 것 이상을 의미합니다. 리소스 사용량, 로그 분석, 그리고 내부 상태 진단까지 CLI를 통해 완벽하게 제어할 수 있어야 합니다.

1. 리소스 모니터링의 기본: kubectl top 📊

가장 먼저 확인해야 할 것은 CPU와 Memory입니다. 애플리케이션이 버벅이거나 이유 없이 죽는다면 리소스 부족(OOM 등)일 확률이 높기 때문이죠.

💡 주의: kubectl top 명령어를 사용하려면 클러스터에 Metrics Server가 반드시 설치되어 있어야 합니다.

  • Pod별 리소스 사용량 확인
    # 현재 네임스페이스의 모든 Pod 리소스 확인
    kubectl top pod
    
    # 특정 Pod의 컨테이너별 사용량 확인 (Multi-container Pod일 때 유용!)
    kubectl top pod <pod-name> --containers
    
  • Node별 부하 확인 애플리케이션뿐만 아니라 인프라 전체의 건강 상태를 체크할 때 사용합니다.
    kubectl top node
    

2. 살아있는 증거 확보: kubectl logs 📝

애플리케이션 내부에서 무슨 일이 벌어지는지 알 수 있는 가장 직접적인 방법은 표준 출력(stdout/stderr) 로그를 보는 것입니다.

  • 실시간 로그 스트리밍 (-f)
    # 실시간으로 로그 추적
    kubectl logs -f <pod-name>
    
  • 멀티 컨테이너 Pod 로그 Pod 안에 사이드카 컨테이너가 있다면 컨테이너 이름을 명시해야 합니다.
    kubectl logs <pod-name> -c <container-name>
    
  • 이전 컨테이너의 로그 확인 (-p) 애플리케이션이 Crash되어 재시작되었다면, 현재 로그가 아닌 죽기 직전의 로그를 봐야 원인을 찾을 수 있습니다. CKAD 시험에서 매우 중요한 포인트입니다!
    kubectl logs <pod-name> --previous
    

3. 상세 정보 및 이벤트 진단: kubectl describe 🔍

Pod가 Pending 상태이거나 ImagePullBackOff 에러가 발생했다면 로그에는 아무것도 찍히지 않습니다. 이때는 쿠버네티스 시스템이 기록한 Event를 봐야 합니다.

kubectl describe pod <pod-name>

이 명령어를 치면 하단의 Events 섹션을 가장 먼저 확인하세요.

  • FailedScheduling: 노드 리소스 부족
  • FailedMount: ConfigMap/Secret/PV 연결 실패
  • Back-off restarting failed container: 애플리케이션 런타임 에러

4. 실시간 상태 감시: --watch 플래그 ⏳

배포 직후 애플리케이션이 정상적으로 구동되는지, 혹은 Rolling Update가 잘 진행되는지 1초마다 명령어를 치고 계신가요? --watch (혹은 -w)를 사용하세요.

# 상태 변화가 있을 때마다 즉시 출력
kubectl get pods -w

5. 직접 침투: kubectl exec & debug 🛠️

네트워크 연결 문제나 내부 설정 파일을 직접 확인해야 할 때는 컨테이너 내부로 들어가야 합니다.

  • 대화형 터미널 접속
    kubectl exec -it <pod-name> -- /bin/sh
    
  • 임시 디버그 컨테이너 실행 (v1.18+) 이미지가 너무 가벼워서(distroless 등) sh조차 없을 때는 kubectl debug를 통해 디버깅용 도구가 포함된 임시 컨테이너를 붙일 수 있습니다.
    kubectl debug -it <pod-name> --image=busybox --target=<container-name>
    

🎯 CKAD 합격을 위한 실전 팁

시험에서는 단순히 명령어를 아는 것을 넘어 "어떤 상황에 어떤 도구를 쓸 것인가"를 결정하는 속도가 중요합니다.

  1. Pod 상태가 Running이 아닐 때: describe -> Events 확인.
  2. Running이지만 접속이 안 될 때: logs 확인.
  3. CrashLoopBackOff 발생 시: logs --previous로 이전 로그 확인.
  4. 성능 저하 의심 시: top pod으로 리소스 할당량(Limit/Request) 대비 사용량 확인.

💡 마무리하며

쿠버네티스 내장 도구만 잘 활용해도 대부분의 애플리케이션 장애를 80% 이상 진단할 수 있습니다. 특히 top, logs, describe 이 '삼총사'는 손가락이 기억할 정도로 연습해 두시길 바랍니다. ⌨️