안녕하세요! 쿠버네티스 클러스터의 건강을 책임지는 여러분의 주치의, CLOUD SECURITY LAB입니다. 👨⚕️
애플리케이션에 문제가 생겼을 때, 우리는 종종 kubectl logs를 가장 먼저 들여다봅니다. 마치 환자가 "어디가 아파요"라고 말하는 것을 듣는 것과 같죠. 로그는 분명 문제 해결의 아주 중요한 단서입니다.
하지만 만약 환자가 아무 말도 하지 않는데 식은땀을 흘리거나 숨을 헐떡이고 있다면 어떨까요? 이때 의사는 청진기를 대고 혈압을 재는 등 객관적인 생체 신호(Vital Signs)를 확인할 겁니다.
쿠버네티스 세계에서 kubectl top 명령어가 바로 이 '청진기'와 '혈압계' 역할을 합니다. 컨테이너가 현재 얼마나 많은 CPU와 메모리를 사용하고 있는지, 그 생체 신호를 실시간으로 측정하여 성능 문제의 근본 원인을 찾아내는 강력한 도구죠.
오늘은 CKAD 시험의 필수 스킬이자, 운영 환경의 구세주인 kubectl top 사용법을 완벽하게 마스터해 보겠습니다!

🤔 kubectl top은 왜 필요할까요? (feat. Metrics-Server)
kubectl top은 다음과 같은 결정적인 질문에 답을 줍니다.
- "내 앱이 왜 이렇게 느리지?" 🐢 → CPU 사용량이 100%에 육박하며 허덕이고 있는지 확인할 수 있습니다.
- "자꾸 Pod가 죽었다 살아나요!" 👻 → 메모리 사용량이 한계(Limit)에 부딪혀 OOMKilled가 발생하는 건 아닌지 추적할 수 있습니다.
- "리소스 설정을 얼마나 해야 할지 모르겠어요." 🤔 → 실제 사용량을 보고 requests와 limits를 합리적으로 최적화하여 비용을 절약할 수 있습니다.
이 모든 마법은 Metrics-Server라는 보이지 않는 영웅 덕분입니다. Metrics-Server는 클러스터의 각 노드에서 실행되는 kubelet으로부터 CPU, 메모리 사용량 같은 메트릭(metric) 정보를 주기적으로 수집하여 kubectl top이 조회할 수 있도록 제공합니다.
💡 CKAD 시험 Tip! 실제 시험 환경에서는 Metrics-Server가 미리 설치되어 있으므로 바로 kubectl top 명령어를 사용할 수 있습니다. 안심하세요!
🚀 kubectl top 실전 처방전: 명령어 완벽 분석
이제 상황별로 kubectl top을 어떻게 사용하는지 자세히 살펴보겠습니다.
1. 클러스터 전체 건강 상태 체크: kubectl top node 🏥
가장 먼저 우리 클러스터를 구성하는 노드(서버)들이 전반적으로 건강한지 확인합니다. 특정 노드에만 부하가 몰리고 있는지 한눈에 파악할 수 있습니다.
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node-1 250m 12% 2800Mi 70%
node-2 980m 49% 1500Mi 37%
node-3 150m 7% 3200Mi 80%
- CPU(cores) / MEMORY(bytes): 현재 사용 중인 리소스의 절대적인 양입니다. (m = millicores, Mi = Mebibytes)
- CPU% / MEMORY%: 해당 노드가 가진 전체 리소스 대비 사용량의 비율입니다.
node-3의 메모리 사용량이 80%로 아슬아슬하네요! 새로운 파드를 스케줄링할 때 주의해야겠습니다.
2. 모든 파드 목록 보기: kubectl top pod 📋
이제 특정 네임스페이스 안에서 실행 중인 모든 파드들의 리소스 사용량을 확인해 봅시다. 클러스터의 '문제아'를 색출하는 가장 빠른 방법입니다.
# 현재 네임스페이스의 모든 파드 조회
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
frontend-app 150m 256Mi
backend-api 500m 1024Mi
db-primary 20m 512Mi
🔥 실전 꿀팁! 유용한 플래그들 🔥
- 모든 네임스페이스 조회 (-A, --all-namespaces): 네임스페이스에 상관없이 클러스터 전체에서 리소스를 가장 많이 쓰는 파드를 찾고 싶을 때 사용합니다.
$ kubectl top pod -A - 사용량 기준 정렬 (--sort-by): CKAD 시험에서 시간을 아껴주는 최고의 기능입니다. CPU나 메모리 사용량이 높은 순으로 정렬하여 범인을 즉시 찾을 수 있습니다.
# 메모리 사용량이 높은 순으로 모든 파드 정렬 $ kubectl top pod -A --sort-by=memory
3. 특정 파드 정밀 진단: kubectl top pod <pod-name> 👨⚕️
용의자를 특정했다면, 이제 그 파드만 집중적으로 관찰할 차례입니다.
$ kubectl top pod backend-api
NAME CPU(cores) MEMORY(bytes)
backend-api 505m 1026Mi
4. 멀티 컨테이너 파드 정밀 분석: --containers 🔬
하나의 파드 안에 여러 개의 컨테이너(예: 메인 앱 + 사이드카 로거)가 실행 중일 때, 어떤 컨테이너가 문제를 일으키는지 정확히 짚어내야 합니다.
$ kubectl top pod my-multicontainer-pod --containers
POD NAME CPU(cores) MEMORY(bytes)
my-multicontainer-pod main-app 450m 800Mi
my-multicontainer-pod sidecar-proxy 5m 50Mi
main-app 컨테이너가 리소스를 거의 다 사용하고 있었네요! 이처럼 --containers 옵션을 사용하면 분석의 정확도를 크게 높일 수 있습니다.
✨ 마치며: 리소스, 아는 만큼 최적화된다!
kubectl top은 단순히 현재 사용량을 보는 것에서 그치지 않습니다. 이 명령어로 얻은 객관적인 데이터를 통해 우리는 requests와 limits 설정을 검증하고 최적화할 수 있습니다.
- 측정된 사용량(top)이 limits에 근접하나요? → 리소스 부족으로 성능 저하 또는 OOMKilled가 발생할 수 있습니다. limits를 늘리는 것을 고려해야 합니다.
- 측정된 사용량(top)이 requests보다 훨씬 낮은가요? → 리소스를 낭비하고 있을 수 있습니다. requests를 줄여 클러스터의 효율성을 높일 수 있습니다.
이제 여러분은 kubectl logs로 애플리케이션의 목소리를 듣고, kubectl top으로 애플리케이션의 건강 상태를 측정하는 유능한 클러스터 주치의가 될 준비를 마쳤습니다.
태그: 쿠버네티스, kubectl, kubectl top, 모니터링, CKAD, 리소스 관리, k8s, 성능 튜닝
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 🚀 쿠버네티스(Kubernetes) 완벽 정복: 컨테이너 오케스트레이션의 지휘자를 만나다! (0) | 2025.09.03 |
|---|---|
| 🚀 쿠버네티스 대탐험: Context와 Namespace 완전 정복 가이드 (CKAD 필수!) (1) | 2025.09.03 |
| 👑 쿠버네티스의 숨겨진 왕관, CRD! CKAD 시험 정복을 위한 완벽 가이드 (0) | 2025.09.03 |
| 👮♂️ 우리 클러스터의 교통경찰! LimitRange와 ResourceQuota로 질서 잡기 (0) | 2025.09.03 |
| 💾 내 데이터는 소중하니까! 쿠버네티스 영구 저장소 (PV, PVC) 완전 정복 (CKAD 대비) (0) | 2025.09.03 |