쿠버네티스(Kubernetes) 클러스터 운영 및 앱 배포, 디버깅 시 일상적으로 자주 쓰이는 필수 kubectl 명령어 모음집입니다.


1. 클러스터 및 컨텍스트(Context) 정보 확인

컨텍스트 및 네임스페이스 설정

# 현재 연결된 클러스터 정보 확인
kubectl cluster-info

# Kubeconfig 컨텍스트 목록 조회
kubectl config get-contexts

# 현재 활성화된 컨텍스트 확인
kubectl config current-context

# 컨텍스트 전환
kubectl config use-context my-cluster-context

# 현재 컨텍스트의 기본 네임스페이스 변경
kubectl config set-context --current --namespace=my-namespace

2. 리소스 조회 및 상세 상태 확인 (Get & Describe)

기본 리소스 목록 조회 (kubectl get)

# 특정 네임스페이스의 포드(Pod) 목록 조회
kubectl get pods

# 모든 네임스페이스의 포드 조회 (-A 또는 --all-namespaces)
kubectl get pods -A

# IP, 노드 위치 등 추가 정보를 포함하여 조회 (-o wide)
kubectl get pods -o wide

# 다양한 리소스 목록 동시에 조회
kubectl get pods,svc,deploy -n default

# 모든 주요 리소스 요약 조회
kubectl get all -n default

# YAML 또는 JSON 형식으로 출력
kubectl get pod my-pod -o yaml
kubectl get deploy my-deploy -o json

주요 리소스 단축어 매핑

리소스 이름단축어설명
podspo파드
deploymentsdeploy디플로이먼트
servicessvc서비스
namespacesns네임스페이스
persistentvolumeclaimspvc영구 볼륨 요청
configmapscm컨피그맵
secretssecret시크릿

리소스 상세 정보 및 이벤트 분석 (kubectl describe)

# 포드 상세 정보 및 이벤트(Event) 확인 (배포 실패, OOM, ImagePullBackOff 원인 분석)
kubectl describe pod my-pod

# 노드 상세 정보 및 리소스 할당 현황 확인
kubectl describe node worker-node-1

# 서비스 엔드포인트 및 레이블 설정 상세 확인
kubectl describe svc my-service

3. 리소스 생성 / 수정 / 삭제 (Apply, Edit, Delete)

YAML 선언형 리소스 관리

# 매니페스트(YAML) 파일 적용/업데이트
kubectl apply -f deployment.yaml

# 디렉토리 내의 모든 YAML 파일 적용
kubectl apply -f ./manifests/

# 선언된 리소스 삭제
kubectl delete -f deployment.yaml

리소스 직접 수정 및 삭제

# 실행 중인 리소스의 YAML을 에디터로 즉시 수정
kubectl edit deployment my-deploy

# 특정 리소스 직접 삭제
kubectl delete pod my-pod
kubectl delete deployment my-deploy -n default

# 강제 포드 삭제 (Terminating 상태에 갇혔을 때)
kubectl delete pod my-pod --grace-period=0 --force

명령형(Imperative) 리소스 생성 (테스트용)

# 네임스페이스 생성
kubectl create namespace dev

# 빠른 테스트용 포드 생성
kubectl run nginx-test --image=nginx:alpine

# 빠른 디플로이먼트 생성
kubectl create deployment web-app --image=nginx --replicas=3

4. 디버깅 및 트러블슈팅 (Logging & Exec)

로그 확인 (kubectl logs)

# 포드 로그 조회
kubectl logs my-pod

# 실시간 로그 스트리밍 (-f)
kubectl logs -f my-pod

# 최근 100줄 출력 후 실시간 감시
kubectl logs --tail=100 -f my-pod

# 멀티 컨테이너 포드에서 특정 컨테이너 로그 지정 (-c)
kubectl logs -f my-pod -c app-container

# 이전(재시작 전 Crash 발생) 컨테이너 로그 확인 (--previous)
kubectl logs my-pod --previous

# 특정 라벨을 가진 모든 포드의 로그 합쳐서 확인 (-l)
kubectl logs -f -l app=web-app

컨테이너 내부 접속 및 명령 실행 (kubectl exec)

# 포드 내부 대화형 터미널 접속
kubectl exec -it my-pod -- /bin/bash
kubectl exec -it my-pod -- /bin/sh

# 접속 없이 명령 단발성 실행
kubectl exec my-pod -- env

포트 포워딩 (kubectl port-forward)

# 로컬 8080 포트를 포드의 80 포트로 바인딩하여 로컬 접근 테스트
kubectl port-forward pod/my-pod 8080:80

# 로컬 8080 포트를 서비스로 포워딩
kubectl port-forward svc/my-service 8080:80

자원 사용량 모니터링 (kubectl top)

# 노드별 CPU/메모리 사용량 확인 (Metrics Server 필요)
kubectl top nodes

# 포드별 CPU/메모리 사용량 확인
kubectl top pods -n default --sort-by=cpu

5. 디플로이먼트 & 스케일링 & 롤아웃 관리

스케일링 (스케일 인/아웃)

# 파드 개수 변경 (Replicas 조정)
kubectl scale deployment my-deploy --replicas=5

롤아웃(Rollout) 및 롤백(Rollback)

# 배포 진행 상태 확인
kubectl rollout status deployment/my-deploy

# 배포 이력(히스토리) 확인
kubectl rollout history deployment/my-deploy

# 이전 버전으로 배포 롤백
kubectl rollout undo deployment/my-deploy

# 특정 히스토리 버전을 지정하여 롤백
kubectl rollout undo deployment/my-deploy --to-revision=2

# 포드 일괄 재시작 (무중단 롤링 업데이트 재배포)
kubectl rollout restart deployment/my-deploy

6. 노드 점검 및 스케줄링 제어

# 노드에 스케줄링 중단 설정 (유지보수 모드)
kubectl cordon worker-node-1

# 노드 스케줄링 재개
kubectl uncordon worker-node-1

# 노드의 모든 파드를 다른 노드로 이주(Evict) 후 안전 비우기
kubectl drain worker-node-1 --ignore-daemonsets --delete-emptydir-data

7. 유용한 팁 & 템플릿 템플릿(Dry-run) 생성

YAML 템플릿 초안 빠르게 뽑아내기 (--dry-run=client -o yaml)

# 실행 없이 Pod 템플릿 YAML 출력
kubectl run my-pod --image=nginx --dry-run=client -o yaml > pod.yaml

# Deployment 템플릿 YAML 생성
kubectl create deployment my-app --image=nginx:alpine --replicas=3 --dry-run=client -o yaml > deploy.yaml

# Service 템플릿 YAML 생성
kubectl expose deployment my-app --port=80 --target-port=8080 --type=ClusterIP --dry-run=client -o yaml > svc.yaml

단축어 설정 (.bashrc 또는 .zshrc)

# kubectl 단축어 k 등록 및 자동완성 설정
alias k='kubectl'
complete -o default -F __start_kubectl k

추천 서드파티 도구

  • kubectx / kubens: 클러스터 컨텍스트 및 네임스페이스를 한 줄 명령어로 빠르게 전환하는 CLI 툴
  • k9s: 터미널 기반의 훌륭한 쿠버네티스 대시보드 UI 툴

마무리

쿠버네티스 리소스 트러블슈팅 시 kubectl get -> describe -> logs -> exec 흐름을 익혀두면 대부분의 장애 원인을 신속하게 파악할 수 있습니다!