Skip to Content
Infra & DevOpskubectl 실전 명령어 치트시트 (Kubernetes 클러스터 운영)
☁️ Infra & DevOps2019년 3월 6일

kubectl 실전 명령어 치트시트 (Kubernetes 클러스터 운영)

#kubernetes#k8s#kubectl#cheatsheet#devops

kubectl은 Kubernetes 클러스터를 제어하는 CLI 도구입니다. 초창기에는 명령어가 생소해서 하나씩 적어가며 익혔는데, 지금 보면 추억이 새록새록합니다. 자주 쓰는 명령어를 카테고리별로 정리합니다.


기본 조회

shell
# 노드 상태 확인 $ kubectl get nodes $ kubectl get nodes -o wide # IP, OS 등 상세 정보 포함 # 전체 Pod 목록 (특정 네임스페이스) $ kubectl get pods -n <namespace> $ kubectl get pods --all-namespaces # 전체 네임스페이스 # 특정 라벨의 Pod만 필터 $ kubectl get pods -l app=web-portal # 실시간 모니터링 (watch) $ kubectl get pods -w

Pod 상세 정보 & 로그

shell
# Pod 상세 이벤트 조회 (오류 디버깅 핵심!) $ kubectl describe pod <POD_NAME> $ kubectl describe pod <POD_NAME> -n <namespace> # 로그 출력 $ kubectl logs <POD_NAME> # 실시간 로그 스트리밍 (-f = follow) $ kubectl logs -f <POD_NAME> # 여러 컨테이너가 있는 Pod에서 특정 컨테이너 로그 $ kubectl logs <POD_NAME> -c <CONTAINER_NAME> # 이전에 죽은 컨테이너의 로그 (재시작 원인 분석) $ kubectl logs <POD_NAME> --previous # 최근 100줄만 출력 $ kubectl logs <POD_NAME> --tail=100

Pod 내부 접속 & 명령 실행

shell
# Pod 쉘 접속 (bash 또는 sh) $ kubectl exec -it <POD_NAME> -- /bin/bash $ kubectl exec -it <POD_NAME> -- /bin/sh # 특정 컨테이너 지정 $ kubectl exec -it <POD_NAME> -c <CONTAINER_NAME> -- /bin/bash # 단일 명령어 실행 (Cassandra nodetool 등) $ kubectl exec -it cassandra-0 -- nodetool status # 파일 복사 (로컬 ↔ Pod) $ kubectl cp <POD_NAME>:/path/to/file ./local-file $ kubectl cp ./local-file <POD_NAME>:/path/to/file

리소스 생성 / 수정 / 삭제

shell
# YAML로 리소스 생성 $ kubectl apply -f deployment.yaml # apply: 있으면 업데이트, 없으면 생성 $ kubectl create -f deployment.yaml # create: 이미 있으면 오류 # 여러 파일 한번에 (디렉터리 적용) $ kubectl apply -f ./manifests/ # 실시간 리소스 수정 (에디터 열림) $ kubectl edit deployment <DEPLOY_NAME> $ kubectl edit configmap coredns -n kube-system # 리소스 삭제 $ kubectl delete pod <POD_NAME> $ kubectl delete -f deployment.yaml # YAML 기반 삭제 # Pod 강제 삭제 (Terminating 상태 해제) $ kubectl delete pod <POD_NAME> --force --grace-period=0

Deployment 롤아웃 관리

shell
# 롤아웃 상태 확인 $ kubectl rollout status deployment/<DEPLOY_NAME> # 롤아웃 히스토리 조회 $ kubectl rollout history deployment/<DEPLOY_NAME> # 이전 버전으로 즉시 롤백 $ kubectl rollout undo deployment/<DEPLOY_NAME> # 특정 리비전으로 롤백 $ kubectl rollout undo deployment/<DEPLOY_NAME> --to-revision=2 # 이미지 버전 업데이트 (무중단 롤링 배포 시작) $ kubectl set image deployment/<DEPLOY_NAME> \ <CONTAINER_NAME>=myregistry/app:2.1 # Deployment 재시작 (Pod 순차 재기동) $ kubectl rollout restart deployment/<DEPLOY_NAME>

스케일링

shell
# 수동 스케일 (Pod 수 조정) $ kubectl scale deployment <DEPLOY_NAME> --replicas=5 # HPA (자동 스케일) 설정 $ kubectl autoscale deployment <DEPLOY_NAME> \ --cpu-percent=70 --min=2 --max=10 # HPA 상태 확인 $ kubectl get hpa

ConfigMap & Secret

shell
# ConfigMap 조회 $ kubectl get configmap $ kubectl describe configmap <NAME> # ConfigMap 수정 $ kubectl edit configmap <NAME> -n kube-system # Secret 조회 (Base64 인코딩 상태) $ kubectl get secret <NAME> -o yaml # Secret 값 디코딩하여 조회 $ kubectl get secret <NAME> \ -o jsonpath='{.data.password}' | base64 -d # 서비스 어카운트 토큰 추출 $ kubectl get secrets \ -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}" \ | base64 -d

네트워크 & 서비스

shell
# 서비스 목록 및 포트 확인 $ kubectl get svc $ kubectl get svc -o wide # 서비스 상세 정보 (엔드포인트 확인) $ kubectl describe svc <SERVICE_NAME> # 로컬에서 특정 Pod/Service로 포트 포워딩 (임시 접속 테스트) $ kubectl port-forward pod/<POD_NAME> 8080:8080 $ kubectl port-forward svc/<SERVICE_NAME> 8080:80 # 클러스터 내부 DNS 테스트 (임시 디버깅 Pod 실행) $ kubectl run debug --image=busybox --rm -it --restart=Never \ -- nslookup web-portal-svc

네임스페이스

shell
# 네임스페이스 목록 $ kubectl get namespaces # 특정 네임스페이스 리소스 전체 조회 $ kubectl get all -n <namespace> # 기본 네임스페이스 변경 (매번 -n 안 붙여도 되게) $ kubectl config set-context --current --namespace=<namespace>

리소스 사용량 확인

shell
# Node별 CPU/Memory 사용량 (metrics-server 필요) $ kubectl top nodes # Pod별 사용량 $ kubectl top pods $ kubectl top pods --sort-by=memory # 메모리 순 정렬 # 특정 컨테이너 리소스 제한 확인 $ kubectl describe pod <POD_NAME> | grep -A5 "Limits:\|Requests:"

자주 쓰는 플래그 요약

플래그의미
-n <namespace>네임스페이스 지정
-o wide추가 정보 포함 출력
-o yamlYAML 형식으로 출력
-o jsonpath='{...}'JSON 경로로 특정 값 추출
-l key=value라벨 셀렉터 필터
-w실시간 변화 감지 (watch)
--all-namespaces / -A전체 네임스페이스
--dry-run=client실제 적용 없이 검증만
Last updated on