kubectl 명령어 찾기
kubectl Command Finder
하고 싶은 일을 검색하면 정확한 kubectl 명령어를 찾아줍니다. 위험도 표시, 카테고리 필터, 치트시트 모드, 오늘의 kubectl 팁을 제공합니다.
명령어 속 <pod><namespace> 처럼 < > 로 감싼 부분은 실제 값으로 바꿔 쓰세요.
전체 89개 중 89개 표시 중
Pod가 왜 안 뜨는지 보고 싶어요
안전kubectl describe pod <pod>맨 아래 Events 섹션에 스케줄 실패, 이미지 풀 실패, 프로브 실패 같은 원인이 시간순으로 찍힙니다. Pod 문제의 8할은 여기서 답이 나와요.
컨테이너 로그를 실시간으로 보고 싶어요
안전kubectl logs -f <pod>tail -f처럼 로그를 스트리밍합니다. Deployment 전체를 보려면 kubectl logs -f deployment/<name>도 가능해요.
재시작되기 전, 죽은 컨테이너의 로그를 보고 싶어요
안전kubectl logs <pod> --previousCrashLoopBackOff일 때 현재 로그는 비어 있기 일쑤입니다. --previous로 직전에 죽은 컨테이너의 마지막 로그를 봐야 크래시 원인이 보여요.
컨테이너가 여러 개인 Pod에서 특정 컨테이너 로그만 보고 싶어요
안전kubectl logs <pod> -c <container>사이드카가 있는 Pod는 -c로 컨테이너를 지정해야 합니다. 모든 컨테이너를 한 번에 보려면 --all-containers=true를 쓰세요.
최근 로그만 잘라서 보고 싶어요
안전kubectl logs <pod> --since=1h --tail=100--since는 시간 기준(10m, 1h), --tail은 줄 수 기준으로 자릅니다. 로그가 수만 줄일 때 터미널이 터지는 것을 막아줘요.
클러스터 이벤트를 시간순으로 보고 싶어요
안전kubectl get events --sort-by='.lastTimestamp'기본 출력은 순서가 뒤죽박죽이라 --sort-by가 사실상 필수입니다. 특정 Pod만 보려면 --field-selector involvedObject.name=<pod>을 붙이세요.
Pod별 CPU/메모리 사용량을 보고 싶어요
안전kubectl top pod --containersmetrics-server가 설치되어 있어야 동작합니다. --containers를 붙이면 컨테이너 단위로 쪼개 보여줘서 사이드카가 리소스를 먹는지도 알 수 있어요.
노드별 리소스 사용량을 보고 싶어요
안전kubectl top node노드마다 CPU 코어/메모리 사용량과 비율을 보여줍니다. 특정 노드만 Pod가 안 뜨면 여기서 리소스 포화 여부부터 확인하세요.
모든 네임스페이스의 리소스를 한 번에 보고 싶어요
안전kubectl get pods -A-A는 --all-namespaces의 축약입니다. "분명 배포했는데 안 보인다" 싶으면 십중팔구 다른 네임스페이스에 있으니 -A로 먼저 찾으세요.
라벨로 원하는 Pod만 골라 보고 싶어요
안전kubectl get pods -l app=<name>-l(--selector)로 라벨이 일치하는 리소스만 필터링합니다. app=<name>,tier!=frontend처럼 콤마로 조건을 겹칠 수도 있어요.
Pod 상태 변화를 실시간으로 지켜보고 싶어요
안전kubectl get pods -w-w(--watch)는 상태가 바뀔 때마다 새 줄을 출력합니다. 화면을 통째로 갱신하고 싶다면 watch kubectl get pods처럼 리눅스 watch와 조합하세요.
Pod가 어느 노드에 떠 있고 IP가 뭔지 보고 싶어요
안전kubectl get pods -o wide-o wide는 기본 출력에 노드명, Pod IP, 예약된 노드 등을 추가합니다. 특정 노드에만 문제가 몰릴 때 분포 확인용으로 좋아요.
Pod 안에 들어가서 셸을 쓰고 싶어요
안전kubectl exec -it <pod> -- sh컨테이너 안에서 대화형 셸을 엽니다. bash가 설치된 이미지라면 -- bash가 편해요. 컨테이너가 여러 개면 -c <container>로 지정하세요.
Pod 안에서 명령어 하나만 실행하고 싶어요
안전kubectl exec <pod> -- env-it 없이 명령만 넘기면 결과만 받아옵니다. 환경변수 확인(env), 파일 확인(ls, cat) 같은 단발성 점검에 좋아요. -- 뒤가 컨테이너에서 실행됩니다.
셸이 없는 컨테이너를 임시 디버그 컨테이너로 조사하고 싶어요
안전kubectl debug -it <pod> --image=busybox --target=<container>distroless처럼 셸이 없는 이미지에 임시(ephemeral) 컨테이너를 붙입니다. --target으로 대상 컨테이너의 프로세스 네임스페이스를 공유해 ps로 프로세스도 볼 수 있어요.
노드 자체에 들어가서 디버깅하고 싶어요
주의kubectl debug node/<node> -it --image=busybox노드의 호스트 파일시스템이 /host에 마운트된 특권 Pod를 띄워줍니다. SSH 없이 노드의 로그나 설정을 확인할 수 있어요. 끝나면 생성된 디버그 Pod를 지워주세요.
Pod와 내 로컬 사이에 파일을 복사하고 싶어요
안전kubectl cp <namespace>/<pod>:<path> ./local-file컨테이너 안 파일을 로컬로, 반대로 로컬 파일을 컨테이너로 복사합니다. 컨테이너에 tar 바이너리가 있어야 동작한다는 점만 기억하세요.
Pod 하나만 다시 만들어지게 재시작하고 싶어요
주의kubectl delete pod <pod>Deployment/ReplicaSet이 관리하는 Pod라면 지워도 곧바로 새 Pod가 뜹니다. 사실상 "Pod 한 개 재시작"으로 쓰여요. 관리자 없는 단독 Pod는 그냥 사라지니 주의하세요.
테스트용 임시 Pod를 하나 띄우고 싶어요
안전kubectl run tmp --rm -it --image=busybox -- sh일회용 Pod를 띄우고 셸을 엽니다. --rm 덕분에 셸을 빠져나오면 Pod가 자동 삭제돼요. 클러스터 내부 네트워크나 DNS를 테스트할 때 가장 빠른 방법입니다.
실행 중인 컨테이너의 표준 출력에 붙고 싶어요
안전kubectl attach -it <pod>exec가 새 프로세스를 띄우는 반면 attach는 이미 실행 중인 메인 프로세스(PID 1)의 stdin/stdout에 붙습니다. 대화형 CLI 앱을 조작할 때 씁니다.
배포를 통째로 재시작하고 싶어요 (설정 다시 읽기 등)
안전kubectl rollout restart deployment/<name>Pod들을 롤링 방식으로 순차 교체합니다. 다운타임 없이 ConfigMap/Secret 변경을 다시 읽게 하거나, 이상 상태를 리셋할 때 가장 안전한 재시작 방법이에요.
YAML 수정 없이 이미지 태그만 바꿔 배포하고 싶어요
주의kubectl set image deployment/<name> <container>=<image>:<tag>지정한 컨테이너의 이미지만 교체하고 롤링 업데이트를 시작합니다. 빠른 핫픽스 배포에 편리하지만, GitOps를 쓰는 팀이라면 선언된 YAML과 어긋나니 주의하세요.
배포가 잘 진행되고 있는지 지켜보고 싶어요
안전kubectl rollout status deployment/<name>롤아웃이 끝날 때까지 진행 상황을 출력하고, 완료/실패 시 종료 코드로 알려줍니다. CI/CD 파이프라인에서 배포 성공 판정 단계로 넣기 좋아요.
지금까지의 배포 이력을 보고 싶어요
안전kubectl rollout history deployment/<name>리비전 목록을 보여줍니다. --revision=<n>을 붙이면 해당 리비전의 상세 스펙(이미지 등)까지 확인할 수 있어요. CHANGE-CAUSE를 채우려면 apply 시 주석을 남기세요.
방금 배포가 이상해서 이전 버전으로 되돌리고 싶어요
주의kubectl rollout undo deployment/<name>직전 리비전으로 롤백합니다. 특정 리비전으로 돌아가려면 --to-revision=<n>을 붙이세요. 응급 상황엔 최고지만, 롤백 후 Git의 매니페스트도 꼭 맞춰 놓아야 해요.
레플리카 수를 수동으로 늘리거나 줄이고 싶어요
주의kubectl scale deployment/<name> --replicas=<n>즉시 Pod 수를 조절합니다. --replicas=0으로 잠시 서비스를 내릴 수도 있어요. HPA가 붙어 있다면 곧 다시 조정해 버리니 HPA 설정을 함께 확인하세요.
롤아웃을 잠시 멈췄다가 다시 진행하고 싶어요
안전kubectl rollout pause deployment/<name>kubectl rollout resume deployment/<name>pause 중에는 스펙을 여러 번 고쳐도 롤아웃이 시작되지 않다가, resume 시 한 번에 반영됩니다. 여러 변경을 하나의 리비전으로 묶고 싶을 때 유용해요.
오토스케일러(HPA)가 잘 동작하는지 보고 싶어요
안전kubectl get hpa현재/목표 메트릭과 레플리카 수를 보여줍니다. TARGETS가 unknown이면 metrics-server 문제이거나 리소스 requests가 없는 경우가 대부분이에요. 자세히는 describe hpa로 보세요.
Deployment에 오토스케일링을 걸고 싶어요
안전kubectl autoscale deployment <name> --min=2 --max=10 --cpu-percent=80CPU 사용률 기준 HPA를 명령어 한 줄로 만듭니다. 동작하려면 컨테이너에 resources.requests.cpu가 설정되어 있어야 한다는 점이 함정 포인트예요.
YAML 파일의 변경 사항을 클러스터에 반영하고 싶어요
안전kubectl apply -f manifest.yaml선언형 관리의 기본 명령입니다. 리소스가 없으면 만들고, 있으면 차이만 병합해 갱신해요. 디렉터리 전체는 -f dir/, 하위까지는 -R을 붙입니다.
apply와 create 중 뭘 써야 할지 헷갈려요
안전kubectl create -f manifest.yamlcreate는 명령형으로 "새로 생성"만 하며 이미 있으면 에러가 납니다. 반복 반영이 필요한 운영 매니페스트는 apply, 일회성 생성이나 스크립트에서 중복 생성을 잡아내고 싶을 때는 create가 어울려요.
리소스를 병합 없이 YAML 그대로 통째로 교체하고 싶어요
주의kubectl replace -f manifest.yamlapply가 기존 값과 병합하는 것과 달리 replace는 리소스 전체를 파일 내용으로 덮어씁니다. 파일에 없는 필드는 날아가고, 리소스가 없으면 실패해요. --force는 삭제 후 재생성이라 더 위험합니다.
리소스를 에디터로 열어 바로 고치고 싶어요
주의kubectl edit deployment/<name>기본 에디터(KUBE_EDITOR)로 라이브 리소스를 열어 저장하면 즉시 반영됩니다. 응급 대응에는 빠르지만 Git에 남지 않는 스노우플레이크 변경이 되기 쉬우니, 조치 후 매니페스트에 꼭 반영하세요.
필드 하나만 콕 집어 바꾸고 싶어요
주의kubectl patch deployment <name> -p '{"spec":{"replicas":3}}'JSON 조각만 보내 특정 필드를 수정합니다. 에디터 없이 스크립트에서 자동화할 때 좋아요. 기본은 strategic merge patch이고, --type=json으로 JSON Patch 배열도 쓸 수 있습니다.
YAML을 처음부터 쓰기 싫어요. 뼈대를 생성해 주세요
안전kubectl create deployment <name> --image=<image> --dry-run=client -o yaml실제로 만들지 않고(--dry-run=client) 매니페스트만 출력합니다. > deploy.yaml로 저장해 뼈대로 쓰면 YAML을 손으로 짜는 것보다 훨씬 빠르고 오타도 없어요.
apply 하기 전에 뭐가 바뀌는지 미리 보고 싶어요
안전kubectl diff -f manifest.yaml라이브 상태와 파일의 차이를 diff 형식으로 보여줍니다. 배포 전 마지막 안전장치로 습관 들이면 "어, 이것까지 바뀌네?" 사고를 막을 수 있어요.
리소스에 라벨을 붙이거나 떼고 싶어요
안전kubectl label pod <pod> env=prodkubectl label pod <pod> env-key=value로 추가, key-(마이너스)로 제거합니다. 이미 있는 라벨을 바꿀 때는 --overwrite가 필요해요. 서비스 셀렉터에서 Pod를 잠시 빼는 트릭에도 쓰입니다.
YAML 파일로 만든 리소스를 한 번에 지우고 싶어요
주의kubectl delete -f manifest.yaml파일에 정의된 리소스를 모두 삭제합니다. 여러 리소스가 든 파일이라면 전부 사라지니, 지우기 전에 파일 내용을 한 번 훑어보는 습관을 들이세요.
클러스터 안의 서비스를 내 로컬에서 접속해 보고 싶어요
안전kubectl port-forward svc/<service> 8080:80로컬 8080 포트를 서비스의 80 포트로 터널링합니다. Ingress 없이도 localhost:8080으로 바로 테스트할 수 있어요. Pod 하나를 집으려면 svc/ 대신 Pod 이름을 쓰면 됩니다.
서비스에 실제로 연결된 Pod가 있는지 확인하고 싶어요
안전kubectl get endpoints <service>ENDPOINTS가 비어 있으면 셀렉터와 Pod 라벨이 안 맞거나 Pod가 Not Ready라는 뜻입니다. "서비스가 504를 뱉어요"의 단골 원인이라 네트워크 디버깅의 1순위 확인 항목이에요.
클러스터 안에서 DNS가 잘 풀리는지 확인하고 싶어요
안전kubectl run dnsutils --rm -it --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- nslookup <service>.<namespace>임시 Pod에서 nslookup으로 서비스 DNS를 조회합니다. 서비스 풀네임은 <service>.<namespace>.svc.cluster.local 형식이에요. 안 풀리면 CoreDNS Pod 상태부터 확인하세요.
클러스터 내부에서 서비스에 HTTP 요청을 날려보고 싶어요
안전kubectl run curl --rm -it --image=curlimages/curl -- shcurl이 든 임시 Pod에서 curl http://<service>.<namespace>로 내부 통신을 테스트합니다. NetworkPolicy나 서비스 설정 문제를 로컬 환경 변수 없이 순수하게 검증할 수 있어요.
Deployment 앞에 서비스를 빠르게 만들어 붙이고 싶어요
안전kubectl expose deployment <name> --port=80 --target-port=8080Deployment의 셀렉터를 그대로 물려받은 Service를 생성합니다. --type=NodePort나 LoadBalancer로 노출 방식도 정할 수 있어요. --dry-run=client -o yaml과 조합하면 YAML 뼈대 생성기로도 씁니다.
Ingress 설정과 연결된 호스트를 확인하고 싶어요
안전kubectl get ingresskubectl describe ingress <name>호스트, 경로, 백엔드 서비스 매핑을 보여줍니다. describe에서 Backends가 <none>이거나 주소가 비어 있으면 서비스 이름/포트 오타를 의심하세요.
통신이 막혀요. NetworkPolicy가 걸려 있는지 보고 싶어요
안전kubectl get networkpolicy -A갑자기 Pod 간 통신이 안 되면 NetworkPolicy가 기본 차단(deny-all)을 걸고 있는 경우가 많습니다. describe로 podSelector와 ingress/egress 규칙을 대조해 보세요.
PVC가 잘 붙었는지 상태를 확인하고 싶어요
안전kubectl get pvcSTATUS가 Bound면 정상, Pending이면 아직 볼륨을 못 받은 상태입니다. Pending 원인은 describe pvc의 Events에서 StorageClass 미존재, 용량 부족 등으로 확인할 수 있어요.
PVC가 Pending에서 안 넘어가는 이유를 알고 싶어요
안전kubectl describe pvc <pvc>Events에 "no persistent volumes available", "storageclass not found" 같은 구체적 사유가 찍힙니다. WaitForFirstConsumer 모드라면 Pod가 스케줄될 때까지 Pending이 정상이에요.
PV 목록과 어느 PVC에 바인딩됐는지 보고 싶어요
안전kubectl get pvPV는 클러스터 전역 리소스라 네임스페이스가 없습니다. CLAIM 컬럼으로 바인딩된 PVC를, RECLAIM POLICY로 PVC 삭제 시 데이터 운명(Retain/Delete)을 확인하세요.
사용 가능한 StorageClass와 기본값을 확인하고 싶어요
안전kubectl get storageclass이름 옆에 (default)가 붙은 것이 storageClassName을 생략했을 때 쓰이는 기본 클래스입니다. 기본값이 없으면 PVC가 조용히 Pending에 머무니 꼭 확인하세요.
노드 점검을 위해 특정 노드의 Pod를 모두 비우고 싶어요
위험kubectl drain <node> --ignore-daemonsets --delete-emptydir-data노드를 cordon 처리한 뒤 Pod들을 다른 노드로 쫓아냅니다. emptyDir 데이터는 삭제되고, PDB(PodDisruptionBudget)에 걸리면 중간에 멈출 수 있어요. 운영 트래픽 중이라면 여파를 반드시 먼저 계산하세요.
⚠️ 되돌리기 어렵거나 서비스에 영향을 줄 수 있는 명령어예요. 대상 클러스터와 네임스페이스를 실행 전에 꼭 확인하세요.
노드에 새 Pod가 스케줄되지 않게 막고 싶어요
안전kubectl cordon <node>노드를 SchedulingDisabled로 표시해 새 Pod 배치만 막습니다. 이미 떠 있는 Pod는 건드리지 않아서 drain보다 훨씬 안전한 첫 단계예요.
점검이 끝난 노드를 다시 스케줄 가능하게 풀고 싶어요
안전kubectl uncordon <node>cordon/drain으로 막았던 노드를 다시 스케줄 대상으로 되돌립니다. drain 후 재부팅했다면 uncordon을 잊는 순간 노드가 계속 놀게 되니 체크리스트에 꼭 넣으세요.
특정 노드에 taint를 걸어 일반 Pod를 못 오게 하고 싶어요
주의kubectl taint nodes <node> key=value:NoScheduletoleration이 없는 Pod는 이 노드에 스케줄되지 않습니다. GPU 노드나 전용 노드를 분리할 때 쓰는 표준 방법이에요. NoExecute를 쓰면 이미 떠 있는 Pod까지 쫓아내니 주의하세요.
노드에 걸린 taint를 제거하고 싶어요
안전kubectl taint nodes <node> key=value:NoSchedule-끝에 마이너스(-)를 붙이면 해당 taint가 제거됩니다. 어떤 taint가 걸려 있는지는 kubectl describe node의 Taints 항목에서 확인할 수 있어요.
노드의 상태와 리소스 할당 현황을 자세히 보고 싶어요
안전kubectl describe node <node>Conditions(MemoryPressure, DiskPressure 등), Taints, 그리고 Allocated resources에서 requests 합계를 보여줍니다. "리소스는 남는데 왜 못 뜨지?"의 답은 대부분 requests 초과 예약이에요.
내가 이 작업을 할 권한이 있는지 확인하고 싶어요
안전kubectl auth can-i create deployments -n <namespace>yes/no로 바로 답해줍니다. 전체 권한 목록은 kubectl auth can-i --list -n <namespace>로 확인할 수 있어요. Forbidden 에러가 났을 때 첫 번째로 두드려 볼 명령입니다.
다른 사용자/서비스어카운트의 권한을 대신 확인하고 싶어요
안전kubectl auth can-i list secrets --as=system:serviceaccount:<namespace>:<sa>--as로 특정 주체를 가장해 권한을 점검합니다. RBAC Role을 만든 뒤 실제로 의도대로 동작하는지 배포 전에 검증하는 필수 절차예요.
Secret을 명령어로 만들고 싶어요
주의kubectl create secret generic <name> --from-literal=password=<value>--from-literal로 키-값을, --from-file로 파일 내용을 담습니다. 셸 히스토리에 비밀값이 남을 수 있으니 운영에서는 --from-file이나 외부 시크릿 매니저를 권장해요.
Secret에 든 값을 디코딩해서 보고 싶어요
주의kubectl get secret <name> -o jsonpath='{.data.password}' | base64 -dSecret 데이터는 base64 인코딩일 뿐 암호화가 아닙니다. jsonpath로 키 하나를 뽑아 base64 -d로 풀면 원문이 보여요. 화면 공유 중에는 조심하세요.
ConfigMap을 파일이나 값으로 만들고 싶어요
안전kubectl create configmap <name> --from-file=config.properties파일 전체를 하나의 키로 담습니다. --from-literal=key=value로 개별 값도 추가할 수 있어요. 변경 후에는 Pod가 자동 반영하지 않는 경우가 많아 rollout restart가 필요합니다.
ConfigMap에 어떤 설정이 들어 있는지 보고 싶어요
안전kubectl get configmap <name> -o yamldata 섹션에서 실제 설정 내용을 확인합니다. Pod에 마운트된 값과 ConfigMap 원본이 다르면 마운트 이후 갱신 전파(최대 1분가량) 또는 subPath 마운트(갱신 안 됨)를 의심하세요.
서비스어카운트의 토큰을 발급받고 싶어요
주의kubectl create token <serviceaccount> -n <namespace>단기 만료 토큰을 즉석에서 발급합니다(k8s 1.24+ 표준 방식). CI나 외부 시스템에서 임시로 API를 호출할 때 시크릿을 영구 저장하는 것보다 안전해요.
다른 클러스터(컨텍스트)로 전환하고 싶어요
안전kubectl config use-context <context>kubeconfig에 등록된 컨텍스트를 전환합니다. 지금 어디에 붙어 있는지는 kubectl config current-context로 확인하세요. 운영/개발 클러스터를 헷갈리는 사고의 예방책이기도 합니다.
등록된 컨텍스트 목록을 보고 싶어요
안전kubectl config get-contexts현재 컨텍스트에 *가 표시됩니다. 컨텍스트별 클러스터, 사용자, 기본 네임스페이스까지 한 줄로 보여줘서 kubeconfig 정리 상태를 점검하기 좋아요.
매번 -n 붙이기 귀찮아요. 기본 네임스페이스를 바꾸고 싶어요
안전kubectl config set-context --current --namespace=<namespace>현재 컨텍스트의 기본 네임스페이스를 바꿉니다. 이후 -n 없이 친 명령이 모두 이 네임스페이스를 대상으로 하니, 운영 클러스터에서는 바꿔 둔 사실 자체를 잊지 않도록 주의하세요.
여러 kubeconfig 파일을 하나로 병합하고 싶어요
주의KUBECONFIG=~/.kube/config:~/new-cluster.yaml kubectl config view --flatten > ~/.kube/mergedKUBECONFIG에 콜론으로 파일들을 이어주면 view --flatten이 하나로 합쳐줍니다. 완성본을 확인한 뒤 ~/.kube/config로 교체하세요. 원본은 반드시 백업해 두는 것이 안전합니다.
이 클러스터에 어떤 리소스 종류가 있는지 전부 보고 싶어요
안전kubectl api-resources리소스 이름, 축약어(po, svc, deploy...), API 그룹, 네임스페이스 소속 여부를 보여줍니다. CRD 설치 후 새 리소스가 등록됐는지 확인할 때도 유용해요.
클러스터 API 서버 주소와 상태를 확인하고 싶어요
안전kubectl cluster-infoAPI 서버와 CoreDNS 엔드포인트를 보여줍니다. 연결 자체가 안 될 때 "내가 지금 어느 클러스터를 보고 있나"를 확인하는 첫 명령으로 좋아요.
YAML 필드에 뭘 써야 하는지 문서를 바로 보고 싶어요
안전kubectl explain deployment.spec.strategy --recursive리소스 스키마 문서를 터미널에서 바로 조회합니다. --recursive를 붙이면 하위 필드 트리를 통째로 보여줘서 브라우저 없이도 YAML 구조를 파악할 수 있어요.
지금 어느 클러스터/네임스페이스에 붙어 있는지 확인하고 싶어요
안전kubectl config current-context위험한 명령을 치기 전 습관처럼 확인하세요. 네임스페이스까지 보려면 kubectl config get-contexts에서 현재(*) 줄을 보면 됩니다. 프롬프트에 표시해 주는 kube-ps1 같은 도구도 좋아요.
CrashLoopBackOff의 원인을 찾고 싶어요
안전kubectl logs <pod> --previouskubectl describe pod <pod>순서가 중요합니다. 먼저 --previous로 죽기 직전 로그(앱 에러)를 보고, describe의 Events와 Last State(Exit Code, OOMKilled 여부)로 인프라 원인을 교차 확인하세요.
Pod가 Pending에서 안 넘어가는 이유를 알고 싶어요
안전kubectl describe pod <pod> | grep -A10 EventsEvents에 "Insufficient cpu/memory"(리소스 부족), "didn't match node selector"(노드 조건 불일치), "unbound PVC"(볼륨 문제) 같은 스케줄 실패 사유가 그대로 적혀 있습니다.
ImagePullBackOff가 왜 나는지 알고 싶어요
안전kubectl describe pod <pod>Events에서 원인이 갈립니다. "not found"면 이미지명/태그 오타, "unauthorized"면 imagePullSecrets 누락, 타임아웃이면 레지스트리 네트워크 문제예요. 노드에서 직접 pull해 보는 것도 좋은 분리 실험입니다.
컨테이너가 OOM으로 죽었는지 확인하고 싶어요
안전kubectl get pod <pod> -o jsonpath='{.status.containerStatuses[0].lastState.terminated.reason}'OOMKilled가 출력되면 메모리 limits를 초과해 커널이 죽인 겁니다. limits를 올리거나 앱의 메모리 사용을 줄여야 해요. Exit Code 137도 같은 신호입니다.
Terminating에서 멈춘 Pod를 강제로 지우고 싶어요
위험kubectl delete pod <pod> --force --grace-period=0API에서 즉시 제거하지만 노드에서 프로세스가 아직 살아 있을 수 있습니다. StatefulSet에서는 스플릿 브레인(동일 ID Pod 중복)을 부를 수 있는 최후의 수단이에요. 노드 상태와 finalizer부터 먼저 확인하세요.
⚠️ 되돌리기 어렵거나 서비스에 영향을 줄 수 있는 명령어예요. 대상 클러스터와 네임스페이스를 실행 전에 꼭 확인하세요.
Terminating에서 안 지워지는 네임스페이스를 정리하고 싶어요
위험kubectl get ns <namespace> -o json | jq '.spec.finalizers=[]' | kubectl replace --raw "/api/v1/namespaces/<namespace>/finalize" -f -finalizer를 비워 강제로 삭제를 끝냅니다. 다만 근본 원인은 대부분 응답 없는 APIService(kubectl get apiservices에서 False 확인)라서, 원인을 안 고치면 잔여 리소스가 유령처럼 남을 수 있어요.
⚠️ 되돌리기 어렵거나 서비스에 영향을 줄 수 있는 명령어예요. 대상 클러스터와 네임스페이스를 실행 전에 꼭 확인하세요.
삭제가 안 끝나는 리소스의 finalizer를 제거하고 싶어요
위험kubectl patch <resource> <name> -p '{"metadata":{"finalizers":[]}}' --type=mergefinalizer는 컨트롤러가 정리 작업을 끝냈다는 표식입니다. 강제로 비우면 삭제는 되지만 클라우드 볼륨, LB 같은 외부 자원이 고아로 남을 수 있으니 담당 컨트롤러가 왜 못 지웠는지 먼저 확인하세요.
⚠️ 되돌리기 어렵거나 서비스에 영향을 줄 수 있는 명령어예요. 대상 클러스터와 네임스페이스를 실행 전에 꼭 확인하세요.
컨트롤 플레인이 건강한지 확인하고 싶어요
안전kubectl get --raw='/readyz?verbose'구식 get componentstatuses는 deprecated라 이 방법이 표준입니다. etcd, 각 컨트롤러의 체크 항목별 ok 여부를 보여줘요. livez, healthz 엔드포인트도 같은 방식으로 조회할 수 있습니다.
어떤 Pod가 자꾸 재시작되는지 한눈에 보고 싶어요
안전kubectl get pods -A --sort-by='.status.containerStatuses[0].restartCount'재시작 횟수 순으로 정렬해 문제아를 바로 찾습니다. 맨 아래(가장 많은 재시작)부터 --previous 로그와 describe로 파고들면 돼요.
실행 중인 리소스의 YAML 전체를 추출하고 싶어요
안전kubectl get deployment <name> -o yaml라이브 상태를 YAML로 덤프합니다. status나 managedFields 같은 런타임 필드가 섞여 있으니, 재사용할 매니페스트로 쓰려면 해당 부분을 정리한 뒤 저장하세요.
출력에서 원하는 필드만 뽑아 스크립트에 쓰고 싶어요
안전kubectl get pods -o jsonpath='{.items[*].metadata.name}'JSONPath로 특정 필드만 추출합니다. range를 쓰면 줄바꿈 포함 반복 출력도 가능해요: '{range .items[*]}{.metadata.name}{"\n"}{end}'. 셸 스크립트 자동화의 핵심 도구입니다.
원하는 컬럼만 골라 표로 보고 싶어요
안전kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phasejsonpath보다 읽기 좋은 표 형태로 커스텀 뷰를 만듭니다. 자주 쓰는 조합은 셸 alias로 등록해 두면 나만의 대시보드가 돼요.
클러스터에 설치된 CRD(커스텀 리소스)를 보고 싶어요
안전kubectl get crdOperator들이 설치한 커스텀 리소스 정의 목록입니다. 특정 CRD의 인스턴스는 kubectl get <crd-name>으로, 스키마는 kubectl explain <crd-name>으로 조회하세요.
상태값 같은 필드 조건으로 리소스를 필터링하고 싶어요
안전kubectl get pods --field-selector=status.phase=Failed -A라벨이 아닌 리소스 필드로 필터링합니다. spec.nodeName=<node>로 특정 노드의 Pod만 보는 것도 단골 패턴이에요. 지원 필드가 제한적이라 안 되면 jsonpath로 우회합니다.
Evicted/Failed 상태 Pod 잔해를 한 번에 청소하고 싶어요
주의kubectl delete pods --field-selector=status.phase=Failed -A노드 압박으로 쫓겨난(Evicted) Pod 기록들이 목록을 어지럽힐 때 일괄 삭제합니다. 실행 중인 Pod는 Failed가 아니라 안전하지만, -A 범위이니 결과 목록을 한 번 확인하고 지우는 것을 추천해요.
Pod를 생성 시각 순으로 정렬해 보고 싶어요
안전kubectl get pods --sort-by='.metadata.creationTimestamp'가장 오래된 Pod부터 정렬됩니다. 최근에 뜬 Pod를 찾거나, 배포가 실제로 Pod를 교체했는지 확인할 때 유용해요. 메모리 사용 순 정렬은 top pod와 조합하세요.
kubectl이 실제로 어떤 API를 호출하는지 보고 싶어요
안전kubectl get pods -v=8-v=6~9로 요청 URL, 헤더, 응답 본문까지 단계별로 보여줍니다. kubectl 동작을 컨트롤러/스크립트 코드로 옮길 때 API 경로를 알아내는 최고의 학습 도구예요.
인증 없이 로컬에서 쿠버네티스 API를 직접 호출해 보고 싶어요
주의kubectl proxy --port=8001kubeconfig 인증을 대신 처리해 주는 로컬 프록시를 엽니다. curl localhost:8001/api/v1/namespaces처럼 REST API를 탐험할 수 있어요. 학습과 디버깅용으로만 쓰고 외부 노출은 금물입니다.
apiVersion에 뭘 써야 하는지 확인하고 싶어요
안전kubectl api-versions클러스터가 지원하는 API 그룹/버전 목록입니다. 클러스터 업그레이드 후 "no matches for kind" 에러가 나면 여기서 해당 버전이 사라졌는지 확인하세요.
위험도 안내
🟢 안전: 조회하거나 언제든 쉽게 되돌릴 수 있는 명령어
🟡 주의: 라이브 리소스를 바꾸거나 조건에 따라 부작용이 있는 명령어
🔴 위험: 서비스 중단이나 데이터 유실로 이어질 수 있는 명령어 — 실행 전 꼭 확인!