노트

kubectl 디버깅 치트시트

kubectl Debugging Cheat Sheet

인프라#k8s#debugging · 연결된 개념 4개

쉽게 말하면

kubectl은 클러스터를 진찰하는 청진기 같아요. 내 Pod가 살아 있는지, 왜 쓰러졌는지를 상태, 이벤트, 로그 순으로 짚어 보고, 필요하면 다시 띄우거나 이전 버전으로 돌려요.

비유가 깨지는 곳 청진기와 달리 엉뚱한 환자를 진찰하기 쉬워요. -n을 빼면 default namespace만 보고, 다른 클러스터 컨텍스트가 골라진 줄 모르고 명령을 칠 수 있으니 kubectl config current-context로 먼저 확인해요.

kubectl은 쿠버네티스 클러스터를 조회·조작하는 CLI(Command-Line Interface)다. 앱 개발자가 가장 자주 쓰는 건 "내 Pod가 떠 있나, 왜 죽었나"를 확인하는 명령들이다.

조회와 로그

kubectl get pods -n prod -o wide       # 상태, 재시작 횟수, 노드
kubectl get pods -w                    # 배포 중 변화 지켜보기
kubectl describe pod <pod> -n prod     # 이벤트: 왜 Pending인지, 왜 재시작했는지
kubectl logs -f <pod> --tail=100
kubectl logs <pod> --previous          # 방금 죽은 컨테이너의 마지막 로그

안으로 들어가기와 연결

kubectl exec -it <pod> -- sh
kubectl port-forward <pod> 3000:3000   # localhost:3000 → Pod

배포

kubectl apply -f deployment.yaml
kubectl rollout status deployment/web
kubectl rollout restart deployment/web  # Pod를 하나씩 새로 교체
kubectl rollout undo deployment/web     # 이전 버전으로

Pod 상태 읽기

상태뜻먼저 볼 것
Pending배치할 노드를 못 찾음describe 이벤트(리소스 부족, 볼륨)
CrashLoopBackOff뜨자마자 죽기를 반복logs --previous, 설정·환경변수
OOMKilled메모리 limit 초과limit, 메모리 누수
ImagePullBackOff이미지를 못 받음태그 오타, 레지스트리 권한

흔한 실수

  • -n을 빼면 default namespace만 본다. "내 Pod가 안 보여요"의 단골 원인이다. -A는 전체
  • 컨텍스트(클러스터)를 잘못 고른 채 명령을 친다. kubectl config current-context로 확인한다

504가 나면 Pod가 모두 Running인지 → describe 이벤트 → 앱 로그 순으로 좁힌다. 범위를 좁혀 가는 습관은 디버깅 문제 정의 5단계과 최소 재현, 개념은 쿠버네티스 핵심 개념를 본다.

출처: kubectl 빠른 참조: 리소스 조회 · 실행 중인 Pod 다루기 · Pod 단계

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • GitOps

    GitOps는 "환경이 어떤 상태여야 하는가"를 전부 git 저장소에 선언해 두고, git에 적힌 것을 유일한 진실(single source of truth)로 삼아 실제 환경을 맞추는 운영 방식이다. 서버에 직접 손대지 않고, 바꾸고 싶으면 git을 고친다.

  • 운영 Node 프로세스의 메모리 누수 찾기

    살아 있는 Node 서버에 inspector를 붙이고, 힙 스냅샷 두 장을 비교해 무엇이 쌓이는지, retainer로 누가 붙잡고 있는지 찾는 절차.

  • GitLab CI/CD 파이프라인

    GitLab CI/CD(Continuous Integration/Continuous Delivery)는 저장소 루트의 .gitlab-ci.yml에 적은 파이프라인을 커밋·머지 때마다 실행하는 기능이다. 실제 작업은 GitLab 서버가 아니라 따로 등록한 러너(runner)가 수행한다.

  • git bisect로 원인 커밋 찾기

    잘 되던 커밋과 깨진 커밋 사이를 이진 탐색해 버그를 만든 커밋을 찾는 git 명령.

  • 컨테이너 네트워킹

    컨테이너는 각자 격리된 네트워크를 가지므로, 서로 통신하려면 같은 도커 네트워크에 붙인다. 같은 사용자 정의 네트워크(user-defined network) 안에서는 도커 내장 DNS(Domain Name System)가 컨테이너 이름(또는 별칭)을 IP로 풀어 주어, IP 대신 이름으로 접속한다.

보기 옵션