☸️

쿠버네티스 & GitOps 명령어 치트시트

이 트랙 29개 모듈의 핵심 명령어·단축키 343를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.

343개 명령 · 29개 모듈
명령어/단축키용도자주 쓰는 예
docker ps / docker ps -a실행 중·전체(종료 포함) 컨테이너 확인docker ps -a로 Exited·Exit Code 확인
docker run -d --restart=always재시작 정책으로 컨테이너 실행--restart=on-failure:5 / --memory="512m"
docker start죽은 컨테이너 수동 재시작Docker 단독은 자동 복구가 없어 수동
docker inspect컨테이너 상세(재시작 횟수 등)docker inspect <c> | grep RestartCount
docker logs컨테이너 로그로 종료 원인 파악docker logs --tail 50 <c>
dmesg커널 OOM 로그 확인dmesg | grep -i "out of memory"
docker-compose up -d소규모는 컴포즈로 충분서비스 2~3개·서버 1대 단계
docker rm -f컨테이너 강제 정리docker rm -f web-1 web-2 web-3
kubectl create deploymentK8s 선언적 배포·자동 복구... nginx --image=nginx:alpine --replicas=3
kubectl apply -fYAML로 원하는 상태 선언kubectl apply -f deployment.yaml
kubectl get deployment선언 상태 반영 확인READY 3/3이면 정상
kubectl logs <pod> --previousCrashLoopBackOff 원인(이전 로그)크래시 직전 컨테이너 로그 확인
명령어/단축키용도자주 쓰는 예
kubectl cluster-infoAPI Server 주소·구동 확인클러스터 접속 첫 점검
kubectl get nodes노드 Ready 상태 확인kubectl get nodes -o wide (IP·버전까지)
kubectl get pods -n kube-system컨트롤 플레인 컴포넌트 상태... | grep etcd / ... | grep kube-proxy
kubectl get componentstatusesscheduler·controller·etcd 헬스 요약kubectl get cs (축약)
kubectl describe pod <pod>스케줄 실패 원인(이벤트) 확인... | grep -A10 Events
kubectl describe node <node>노드 Conditions·할당 리소스 확인... | grep -A5 "Allocated resources"
kubectl logs -n kube-system <pod>죽은 컴포넌트 로그 확인... --tail=20 / CrashLoop 시 --previous
kubectl get events최근 클러스터 이벤트 시간순kubectl get events --sort-by='.lastTimestamp' | tail -20
kubectl get pod <pod> -o wide배치 노드·Pod IP 확인스케줄링 결과 검증
kubectl config current-context조작 대상 클러스터 확인위험 명령 전 컨텍스트 점검
systemctl status kubelet노드 에이전트(kubelet) 상태journalctl -u kubelet -n 50 --no-pager (로그)
crictl ps노드에서 컨테이너 직접 확인crictl logs <id> (kubelet 우회 디버깅)
etcdctl endpoint healthetcd 응답·건강 확인ETCDCTL_API=3 etcdctl snapshot save backup.db (백업)
minikube status로컬 클러스터 구동 확인minikube start (꺼졌으면 기동)
명령어/단축키용도자주 쓰는 예
kubectl get리소스 목록·상태(진단 시작점)kubectl get pods -A -o wide, -l app=nginx, -w(watch)
kubectl get -o출력 형식 조정·필드 추출-o yaml, -o jsonpath='{.items[*].metadata.name}', -o custom-columns=...
kubectl describeEvents·Conditions로 원인 파악kubectl describe pod X | grep -A15 Events
kubectl logs앱 stdout/stderr 확인kubectl logs -f X --tail=100, --since=1h
kubectl logs --previous크래시 직전 로그(CrashLoopBackOff)kubectl logs X --previous
kubectl exec -it실행 중 컨테이너 셸 접속kubectl exec -it X -- sh (bash 없을 때), -c <container>
kubectl exec -- (단일)셸 없이 명령 실행kubectl exec X -- env | grep DB, -- nc -zv postgres 5432
kubectl apply / create선언적 관리 / 일회성 생성kubectl apply -f pod.yaml (create는 존재 시 AlreadyExists)
--dry-run=client -o yaml배포 없이 YAML 템플릿 생성kubectl run app --image=nginx --dry-run=client -o yaml > app.yaml
kubectl config컨텍스트·기본 네임스페이스 변경kubectl config set-context --current --namespace=production
-n / -A네임스페이스 지정 / 전체kubectl get pods -n kube-system, kubectl get pods -A | grep X
명령어/단축키용도자주 쓰는 예
kubectl get podsSTATUS·READY·RESTARTS 한눈에kubectl get pods -w (상태 전환 실시간 관찰)
kubectl describe podEvents·Exit Code·재시작 이유kubectl describe pod X | grep -A15 Events
kubectl logs앱이 왜 죽는지 확인kubectl logs X --previous (죽기 전 로그, 원인 90%)
kubectl logs --since최근 로그만 좁혀 보기kubectl logs X --since=5m
kubectl exec살아있는 컨테이너 내부 진입kubectl exec -it X -- sh
kubectl debugCrashLoop 파드를 복제해 디버깅kubectl debug -it X --copy-to=dbg --set-image=app=alpine -- sleep infinity
kubectl rollout statusDeployment 롤아웃 완료 확인kubectl rollout status deployment/X
kubectl run임시 파드로 상태 재현kubectl run t --image=alpine --command -- sh -c 'exit 1'
kubectl delete pod실습 파드 정리kubectl delete pod X --ignore-not-found
Exit Code 읽기종료 원인 판별1=앱 에러 · 137=OOM/SIGKILL · 143=SIGTERM
-w (watch)상태 변화 실시간 추적kubectl get pods -n <ns> -w
명령어/단축키용도자주 쓰는 예
kubectl create deploymentDeployment 즉시 생성... my-app --image=nginx:alpine --replicas=3
kubectl get deployment,replicaset,pod3계층 구조 한눈에 확인READY·UP-TO-DATE·AVAILABLE 비교
kubectl set image deployment/이미지 교체(롤링 업데이트 시작)kubectl set image deployment/my-app nginx=nginx:1.25
kubectl rollout status롤아웃 진행·완료 확인... deployment/my-app --timeout=5m
kubectl rollout history배포 리비전 이력 확인... --revision=2 (특정 리비전 상세)
kubectl rollout undo이전/특정 버전으로 롤백... deployment/my-app --to-revision=1
kubectl scale deployment/레플리카 수 조정kubectl scale deployment/my-app --replicas=5
kubectl annotate ... change-cause배포 이력에 사유 기록kubernetes.io/change-cause="JIRA-1234"
kubectl apply --dry-run=server적용 전 서버 검증실제 반영 없이 유효성만 확인
kubectl diff -fGit YAML과 클러스터 차이 비교kubectl diff -f deployment.yaml
kubectl get pods -w롤링 교체 과정 실시간 관찰-l app=web-app -w (Terminating↔Running)
kubectl describe deploymentConditions·이벤트 확인정체 시 ProgressDeadlineExceeded 확인
kubectl describe podPending 원인(스케줄 실패) 확인EventsFailedScheduling/Insufficient cpu
kubectl logs -l라벨로 파드 로그 일괄 확인kubectl logs -l app=my-app --tail=20
kubectl delete pod파드 삭제로 자가복구 확인ReplicaSet이 즉시 새 파드 생성
명령어/단축키용도자주 쓰는 예
kubectl get svc타입·CLUSTER-IP·EXTERNAL-IP·포트 확인kubectl get svc -o wide · LoadBalancer는 -w로 IP 대기
kubectl get endpoints실제 연결된 파드 IP 목록kubectl get endpoints my-svc (<none>=selector 불일치)
kubectl describe svcSelector·TargetPort 확인kubectl describe svc X | grep Selector
kubectl get pods --show-labels파드 라벨 vs Selector 대조kubectl get pods --show-labels
kubectl expose deployment서비스 빠르게 생성kubectl expose deploy X --type=NodePort --port=80 --target-port=8080
kubectl get nodes -o wideNodePort 접근용 노드 IP 확인kubectl get nodes -o wide (INTERNAL-IP)
kubectl run … nslookup서비스 DNS 해석 테스트kubectl run t --image=busybox --rm -it -- nslookup my-svc.<ns>
kubectl run … curl클러스터 내부 접속 테스트kubectl run t --image=curlimages/curl --rm -it -- curl http://my-svc
kubectl exec … ss파드가 실제 리스닝하는 포트 확인kubectl exec -it X -- ss -tlnp
minikube service / tunnel로컬 LB/NodePort 접근minikube service X --url · minikube tunnel
명령어/단축키용도자주 쓰는 예
kubectl get ingressADDRESS·HOSTS·CLASS 확인kubectl get ingress -n ingress-lab (ADDRESS 비면 LB 미할당)
kubectl describe ingress규칙·백엔드·TLS 매핑 확인kubectl describe ingress my-ingress (Backends에 svc:port)
kubectl get endpoints백엔드 Service 실엔드포인트kubectl get endpoints api-service (비어 있으면 502 원인)
kubectl logs (controller)nginx upstream 오류 추적kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -f
kubectl get pods -n ingress-nginx컨트롤러 파드 Running 확인kubectl get pods -n ingress-nginx
kubectl get ingressclass사용 가능한 클래스 확인kubectl get ingressclass (spec.ingressClassName에 지정)
kubectl create secret tlsTLS 인증서 Secret 생성kubectl create secret tls app-tls --key tls.key --cert tls.crt
kubectl exec -- ss -tlnp파드 리슨 포트 확인(probe 진단)kubectl exec -it api-app-xxx -- ss -tlnp
kubectl rollout restart백엔드 재배포로 endpoints 재등록kubectl rollout restart deploy/api-app -n ingress-lab
curl -k / -v격리된 자체서명 테스트·리다이렉트 확인테스트 전용 curl -k; 운영은 curl --cacert <verified-ca>
명령어/단축키용도자주 쓰는 예
kubectl create configmap설정값으로 ConfigMap 생성... app-config --from-literal=LOG_LEVEL=info
kubectl create configmap --from-file설정 파일 통째로 저장... nginx-config --from-file=nginx.conf
kubectl create secret generic민감값으로 Secret 생성... db-secret --from-literal=DB_PASSWORD=...
kubectl create secret tlsTLS 인증서 Secret 생성... --cert=tls.crt --key=tls.key
kubectl get configmap -o yamldata 섹션 키-값 검증kubectl get cm app-config -o yaml (cm 축약)
kubectl get secret -o jsonpathSecret 값 디코딩 확인... -o jsonpath='{.data.DB_PASSWORD}' | base64 -d
base64 / base64 -dBase64 인코딩·디코딩(암호화 아님)echo -n 'pw' | base64 / echo '...' | base64 -d
kubectl describe secret값 노출 없이 키·크기 확인Data: X bytes로 마스킹됨
kubectl exec ... -- env파드에 주입된 환경변수 확인... -- env | grep DB / printenv DB_PASSWORD
kubectl exec ... -- ls -la볼륨 마운트 파일·권한 확인... -- ls -la /etc/secrets (0400 확인)
kubectl apply --dry-run=client적용 전 매니페스트 생성... --dry-run=client -o yaml | kubectl apply -f -
kubectl rollout restart환경변수 갱신 위해 파드 재시작kubectl rollout restart deployment/db-app
kubectl rollout status롤아웃 완료 확인kubectl rollout status deployment/db-app
kubectl auth can-iSecret 접근 권한(RBAC) 확인kubectl auth can-i get secret
kubectl edit configmapConfigMap 즉시 수정kubectl edit cm app-config -n config-lab
명령어/단축키용도자주 쓰는 예
kubectl get pv,pvcSTATUS(Available/Bound/Released/Pending) 확인kubectl get pv,pvc -n storage-lab
kubectl describe pvcPending 원인(Events) 확인kubectl describe pvc my-pvc -n storage-lab(no PV / storageclass not found)
kubectl get storageclass기본 StorageClass·프로비저너 확인kubectl get storageclass((default) 표시)
kubectl describe pod | grep Volumes파드의 볼륨 마운트 확인kubectl describe pod <pod> -n <ns> | grep -A10 Volumes
kubectl get volumeattachment볼륨이 어느 노드에 attach됐는지 확인kubectl get volumeattachment | grep <pv-name>
kubectl describe pod | grep Multi-Attachattach 단계 교착 확인kubectl describe pod <new-pod> -n <ns> | grep -A3 Multi-Attach
kubectl patch pv(claimRef=null)Released PV를 Available로 재사용kubectl patch pv my-pv-001 -p '{"spec":{"claimRef":null}}'
kubectl patch pvc(storage)PVC 용량 확장(allowVolumeExpansion 필요)kubectl patch pvc <name> -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
kubectl delete pvc/pv스토리지 삭제(reclaimPolicy 주의)kubectl delete pvc my-pvc -n storage-lab
kubectl wait --for=condition=Ready파드 Ready 대기 후 검증kubectl wait pod pvc-test-pod -n storage-lab --for=condition=Ready --timeout=60s
kubectl exec -- cat재생성 후 데이터 보존 확인kubectl exec pvc-test-pod -n storage-lab -- cat /data/test.txt
kubectl get nodesMulti-Attach 시 이전 노드 NotReady 확인kubectl get nodes
명령어/단축키용도자주 쓰는 예
kubectl get ns네임스페이스 목록·STATUS 확인kubectl get ns --show-labels(env/team 레이블)
kubectl create/delete namespace네임스페이스 생성·삭제kubectl delete namespace dev(안의 모든 리소스도 삭제)
kubectl get ... -n / -A특정/전체 네임스페이스 리소스 조회kubectl get pods -A(= --all-namespaces)
kubectl config set-context기본 네임스페이스 변경(매번 -n 생략)kubectl config set-context --current --namespace=development
kubectl config view --minify현재 컨텍스트의 기본 네임스페이스 확인kubectl config view --minify | grep namespace
kubectl describe resourcequota네임스페이스 총량 Used/Hard 확인kubectl describe resourcequota dev-quota -n development
kubectl describe limitrange컨테이너 기본값·min/max 확인kubectl describe limitrange dev-limits -n development
kubectl api-resources네임스페이스 범위 vs 클러스터 범위 구분kubectl api-resources --namespaced=true
크로스 네임스페이스 DNS다른 네임스페이스 서비스 접근curl http://api-service.production.svc.cluster.local
kubectl run ... -- nslookup서비스 DNS 해석 테스트kubectl run dns-test --image=busybox -it --rm -- nslookup api-service.production
kubectl get ns -o json | jqTerminating 멈춤 시 finalizer·조건 확인kubectl get ns team-a -o json | jq '.status.conditions'
kubectl get apiservice삭제 교착 유발하는 죽은 확장 API 탐지kubectl get apiservice | grep -v True
명령어/단축키용도자주 쓰는 예
kubectl top pod실제 CPU/메모리 사용량 측정kubectl top pod --sort-by=memory · kubectl top pods -A
kubectl top node노드 여유 자원 확인kubectl top nodes
kubectl describe node노드 Allocatable·예약된 requests 확인kubectl describe node X | grep -A5 Allocated
kubectl describe podlimits·requests·종료 사유 확인kubectl describe pod X | grep -A5 "Last State" (OOMKilled)
kubectl get pod -o jsonpathQoS 클래스 확인kubectl get pod X -o jsonpath='{.status.qosClass}'
kubectl get pods -o custom-columnsQoS 일괄 조회... -o custom-columns='NAME:.metadata.name,QOS:.status.qosClass'
kubectl set resourcesrequests/limits 즉시 수정kubectl set resources deploy/X --requests=cpu=100m,memory=256Mi --limits=cpu=500m,memory=768Mi
kubectl describe resourcequota사용량 vs 할당량 대조kubectl describe resourcequota team-quota -n <ns>
kubectl get pod -wOOMKilled→CrashLoop 전환 관찰kubectl get pod memory-stress -w
cat .../cpu.statCPU 스로틀 카운터 확인nr_throttled·throttled_time이 늘면 CFS 스로틀
Exit Code 137OOMKilled 판별describeReason: OOMKilled + Exit Code: 137
명령어/단축키용도자주 쓰는 예
kubectl autoscale빠르게 HPA 생성kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10
kubectl get hpaTARGETS(현재/목표)·REPLICAS 확인kubectl get hpa -n hpa-demo (unknown이면 metrics/requests 문제)
kubectl describe hpa스케일 이벤트·실패 원인kubectl describe hpa php-apache | grep -A5 Events
kubectl top노드·파드 실제 사용량kubectl top nodes, kubectl top pods -A
kubectl set resourcesrequests/limits 설정(HPA 전제)kubectl set resources deploy/api --requests=cpu=200m,memory=256Mi
kubectl rollout statusmetrics-server 기동 대기kubectl rollout status deploy/metrics-server -n kube-system
kubectl patch deploymentmetrics-server TLS 검증 끄기(로컬)... --type=json -p='[{"op":"add",...,"value":"--kubelet-insecure-tls"}]'
watch kubectl get hpa스케일 동작 실시간 관찰watch kubectl get hpa php-apache-hpa -n hpa-demo
kubectl get pods -w파드 증감 실시간 추적kubectl get pods -n hpa-demo -w
kubectl apply -f (autoscaling/v2)behavior 등 세밀 HPA(GitOps)kubectl apply -f api-hpa.yaml (scaleUp/scaleDown 커스텀)
명령어/단축키용도자주 쓰는 예
kubectl describe podProbe 설정·실패 사유 확인kubectl describe pod X | grep -A10 Liveness
kubectl get eventsProbe 실패 이벤트 추적kubectl get events --sort-by=.lastTimestamp | grep -i unhealthy
kubectl get endpointsReadiness 통과 파드만 조회kubectl get endpoints web-app-svc
kubectl get pod -o wideREADY 컬럼으로 준비 상태 확인kubectl get pod -o wide (0/1이면 readiness 미통과)
kubectl rollout restartProbe 추가 후 롤링 재기동kubectl rollout restart deployment/api
kubectl patch deployment실행 중 Probe 주입kubectl patch deploy api --type=json -p='[{"op":"add", ...readinessProbe...}]'
kubectl get ... -o jsonpathProbe 설정 유무 확인... -o jsonpath='{.spec.template.spec.containers[0].readinessProbe}' (null=미설정)
kubectl top podCPU 스로틀로 인한 오탐 확인kubectl top pod X (limit 근처면 프로브 timeout 의심)
watch kubectl get endpoints롤아웃 중 엔드포인트 변화 관찰watch kubectl get endpoints api-svc
kubectl describe pod (재시작)재시작 사유·Exit Code 확인... | grep -A1 "Last State" (143/137=kubelet이 종료)
명령어/단축키용도자주 쓰는 예
kubectl get nodes -o wide노드 목록·IP 확인(DaemonSet 대상)kubectl get nodes --show-labels (레이블까지)
kubectl get daemonsetDaemonSet DESIRED/CURRENT 비교DESIRED=노드 수여야 정상, 불일치 시 describe ds
kubectl label nodenodeSelector 대상 노드 지정kubectl label node worker-1 ssd=true
kubectl get pods -o wide파드가 어느 노드에 떴는지... -l app=fluentd -o wide
kubectl get pods -w생성 순서 실시간 관찰(0→1→2)StatefulSet 순차 기동 확인
kubectl get statefulsetStatefulSet 상태 확인READY 수가 replicas와 같은지
kubectl scale statefulset스케일 업·다운(역순 삭제)kubectl scale statefulset mysql --replicas=5
kubectl set image statefulset/이미지 롤링 업데이트kubectl set image statefulset/mysql mysql=mysql:8.0.36
kubectl patch statefulsetpartition 카나리 업데이트 설정... -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":2}}}}'
kubectl get pvc파드별 독립 PVC Bound 확인data-mysql-0 등 ordinal별 PVC
kubectl describe pvcPVC Pending 원인(이벤트) 확인... | grep -A10 Events (StorageClass 없음 등)
kubectl get storageclass사용 가능한 StorageClass 확인비어 있으면 동적 프로비저닝 불가
kubectl run --rm -it -- nslookupHeadless Service DNS 확인nslookup mysql-0.mysql.<ns>.svc.cluster.local
kubectl get endpoints -o yamlnot-Ready 주소 게시 여부 진단publishNotReadyAddresses 필요 여부 확인
명령어/단축키용도자주 쓰는 예
kubectl auth can-i특정 동작 허용 여부(yes/no)kubectl auth can-i create pods --as=system:serviceaccount:ci:ci-sa -n production
kubectl auth can-i --list주체의 전체 실효 권한 나열kubectl auth can-i --list --as=system:serviceaccount:ci:ci-sa -n production
kubectl auth can-i '*' '*'내 권한 전체 범위 확인kubectl auth can-i '*' '*' --all-namespaces
kubectl get rolebinding바인딩 존재·주체 매핑 조회kubectl get rolebinding,clusterrolebinding -A | grep <sa>
kubectl describe rolebinding바인딩의 subjects·roleRef 확인kubectl describe rolebinding X -n <ns>
kubectl describe clusterrole빌트인 롤의 권한 내용 확인kubectl describe clusterrole view (읽기 전용)
kubectl create rolebinding빌트인 ClusterRole 재사용kubectl create rolebinding ro --clusterrole=view --serviceaccount=<ns>:<sa>
kubectl create serviceaccount전용 SA 생성kubectl create serviceaccount ci-sa -n ci
kubectl get clusterroles재사용할 빌트인 롤 탐색kubectl get clusterroles | grep -v system
kubectl get ns --show-labels어드미션(PodSecurity) 경계 확인kubectl get ns production --show-labels
명령어/단축키용도자주 쓰는 예
kubectl get saServiceAccount 목록 조회kubectl get sa -n <ns>
kubectl create serviceaccount전용 SA 생성kubectl create serviceaccount deployment-scaler -n <ns>
kubectl create tokenSA 토큰 수동 발급(디버깅)kubectl create token <sa> -n <ns> --duration=24h
kubectl auth can-i --asSA 실효 권한 확인kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns>
kubectl run --serviceaccountSA 지정해 파드 실행kubectl run p --image=curlimages/curl --serviceaccount=<sa> --command -- sleep 3600
kubectl exec … ls토큰 마운트 여부 확인kubectl exec -it X -- ls /var/run/secrets/kubernetes.io/serviceaccount/
env | grep AWS_ROLE_ARNIRSA 웹훅 주입 여부 확인값이 없으면 파드 재생성 필요(주입은 생성 시점에만)
aws sts get-caller-identityIRSA 역할 assume 검증kubectl exec -it X -- aws sts get-caller-identity (Arn 확인)
kubectl rollout restartannotation 후 웹훅 재주입kubectl rollout restart deployment/X
JWT exp 디코딩토큰 만료 확인(401)… token | cut -d. -f2 | base64 -dexp 확인
명령어/단축키용도자주 쓰는 예
kubectl get netpol적용된 정책 목록 확인kubectl get networkpolicy -A(전 네임스페이스)
kubectl describe netpolPodSelector·허용 규칙 확인kubectl describe networkpolicy payment-service-policy -n production
kubectl get netpol -o yamlfrom/to 배열 구조(-개수=AND/OR) 진단kubectl get networkpolicy <name> -o yaml(from 밑 - 수 세기)
kubectl get pods -n kube-system | grepNetworkPolicy 지원 CNI 확인kubectl get pods -n kube-system | grep -E 'calico|cilium|weave'
kubectl exec -- curl --max-time허용/차단 연결 테스트kubectl exec -it <pod> -- curl http://payment:8080 --max-time 5(timeout=차단)
kubectl exec -- nc -zv포트 단위 연결 테스트kubectl exec -it frontend -- nc -zv db 5432 --wait 5
kubectl exec -- nslookupEgress 정책 후 DNS(53) 허용 확인kubectl exec -it <pod> -- nslookup order-service.production
kubectl label namespacenamespaceSelector용 레이블 부여kubectl label namespace netpol-demo env=demo
kubectl get namespace --show-labelsnamespaceSelector 매칭 레이블 확인kubectl get namespace --show-labels
kubectl describe pod | grep Labels파드 레이블로 적용 정책 수동 매칭kubectl describe pod payment-pod -n production | grep -A5 Labels
명령어/단축키용도자주 쓰는 예
kubectl create pdbPDB 빠르게 생성kubectl create pdb web-pdb --selector=app=web --min-available=2 -n pdb-demo
kubectl get pdbALLOWED DISRUPTIONS 값 확인kubectl get pdb -A(0이면 drain 차단 상태)
kubectl describe pdb예산 산수(Current/Desired Healthy) 확인kubectl describe pdb web-pdb | grep -E "Allowed disruptions|Current|Desired"
kubectl get pdb -w드레인 중 ALLOWED 변화 추적kubectl get pdb payment-pdb -n pdb-demo -w
kubectl drain노드 유지보수(Eviction API)kubectl drain node-3 --ignore-daemonsets --delete-emptydir-data --timeout=5m
kubectl drain --dry-run실제 evict 전 영향 미리 보기kubectl drain node-2 --ignore-daemonsets --dry-run
--disable-evictionPDB 무시 강제 드레인(비권장)교착 긴급 해소 최후 수단
kubectl scale deployment레플리카 조정으로 예산 경계 관찰kubectl scale deployment/web --replicas=2 -n pdb-demo
kubectl get pods -o wide | grep파드 노드 분산·같은 노드 집중 확인kubectl get pods -n <ns> -o wide | grep payment
kubectl get pods -l <selector>unready(READY 0/1) 파드로 예산 잠김 확인kubectl get pods -l app=web -n pdb-demo
kubectl get pdb -A | grep -v N/A업그레이드 전 ALLOWED=0 항목 사전 점검kubectl get pdb -A | grep -v "N/A"
kubectl get events --sort-by동시 evict된 파드 사후 분석kubectl get events -n production --sort-by='.lastTimestamp' | tail -20
명령어/단축키용도자주 쓰는 예
kubectl get nodes --show-labelsaffinity 작성 전 노드 레이블 확인kubectl get nodes --show-labels | grep accelerator
kubectl label node노드 레이블 추가·제거kubectl label node gpu-1 accelerator=nvidia-gpu(제거는 disk-)
kubectl taint node전용 노드 격리(Taint 추가)kubectl taint node gpu-1 dedicated=gpu:NoSchedule
kubectl taint node ...-Taint 제거(끝에 -)kubectl taint node node-1 maintenance=true:NoSchedule-
kubectl describe node | grep Taints노드의 Taint 확인kubectl describe node gpu-1 | grep -A3 Taints
kubectl get pod -o wide파드가 배치된 NODE 확인kubectl get pods -l app=ml-inference -o wide
kubectl describe pod (Events)Pending 원인(FailedScheduling) 확인kubectl describe pod <pod> | grep -A10 Events
kubectl get pod -o yaml | grep affinityaffinity 키 오타 진단kubectl get pod <pod> -o yaml | grep -A20 affinity
kubectl get nodes -o json | jqaffinity 매칭 노드 사전 검증jq '.items[] | select(.metadata.labels.accelerator!=null) | .metadata.name'
kubectl rollout restart수정 후 파드 재배치kubectl rollout restart deployment ml-inference
kubectl top nodes선호 zone 혼잡도(Score 밀림) 확인kubectl top nodes
kube-scheduler 로그preferred 무시 시 노드별 점수 확인kubectl -n kube-system logs kube-scheduler-<node> | grep -i score
명령어/단축키용도자주 쓰는 예
kubectl get vpaVPA 오브젝트 조회kubectl get vpa -n <ns>
kubectl describe vpa추천값(Target/Lower/Upper) 확인kubectl describe vpa X | grep -A10 Recommendation
kubectl top pods --containers컨테이너별 실사용량 확인kubectl top pods -l app=X --containers
kubectl patch vpa --type=mergeupdateMode 전환kubectl patch vpa X --type=merge -p '{"spec":{"updatePolicy":{"updateMode":"Initial"}}}'
kubectl patch deployment --type=json추천값 수동 반영requests/limits를 Target 값으로 replace
kubectl set resourcesrequests/limits 조정kubectl set resources deploy/X --requests=cpu=75m,memory=250Mi --limits=cpu=200m,memory=500Mi
kubectl get pdbeviction 차단(무동작) 확인kubectl get pdb -n <ns> (ALLOWED DISRUPTIONS 0=봉쇄)
kubectl get pod -o jsonpath실제 반영된 requests 확인... -o jsonpath='{.spec.containers[0].resources.requests}'
kubectl describe podVPA Evicted 이벤트 확인kubectl describe pod X | grep -A5 Events
kubectl logs vpa-updaterevict 시도 추적kubectl logs -n kube-system -l app=vpa-updater | grep -i evict
updateModeOff/Initial/Auto 선택Off(추천만) · Initial(생성 시) · Auto(지속·재시작)
명령어/단축키용도자주 쓰는 예
helm repo add / update차트 저장소 등록·갱신helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
helm search repo / hub등록 저장소·ArtifactHub 검색helm search repo redis, helm search hub prometheus
helm show values오버라이드 가능한 기본값 확인helm show values bitnami/redis | head -50
helm upgrade --install없으면 설치·있으면 업그레이드(멱등, CI 표준)helm upgrade --install api ./chart -f prod.yaml --atomic --timeout 5m
--set / -f개별 값 / 파일로 values 오버라이드--set auth.enabled=false, -f redis-values-dev.yaml
--create-namespace릴리스 대상 네임스페이스 자동 생성helm upgrade --install app ./chart -n prod --create-namespace
helm list -n릴리스 목록·STATUS 확인helm list -n monitoring (deployed/failed/pending)
helm history릴리스 리비전 이력helm history myapp -n production (롤백 대상 특정)
helm get values리비전별 적용된 values 확인helm get values myapp -n production --revision=2
helm rollback특정 리비전으로 즉시 복구helm rollback myapp 2 -n production
helm template / lint배포 없이 렌더링·문법 검증helm template rel ./chart -f prod.yaml, helm lint ./chart
helm package / push패키징·OCI 레지스트리 배포helm package ./chart && helm push chart-0.1.0.tgz oci://ghcr.io/org/charts
명령어/단축키용도자주 쓰는 예
helm create차트 골격 생성helm create my-webapp
helm lint차트 문법·구조 검증helm lint ./my-webapp (0 failed면 정상)
helm template클러스터 없이 로컬 렌더링helm template rel ./chart --set image.tag=v2 | grep image:
helm template --show-only특정 템플릿만 렌더helm template rel ./chart --show-only templates/deployment.yaml
helm template --debug렌더 전처리까지 출력(디버깅)helm template rel ./chart --debug 2>&1 | head -50
helm install --dry-run실제 배포 없이 설치 검증helm install my-webapp ./chart -n dev --dry-run
helm dependency updateChart.yaml의 서브차트 다운로드helm dependency update ./my-webapp (charts/에 tgz 생성)
helm upgrade --atomic실패 시 자동 롤백helm upgrade my-webapp ./chart --set image.tag=$SHA --atomic --timeout 5m
includenamed template 호출(pipeline 가능)include "my-webapp.labels" . | nindent 4
toYamlvalues 구조체를 YAML로 직렬화toYaml .Values.resources | nindent 12
required필수 값 없으면 오류로 렌더 중단required "image.tag는 필수" .Values.image.tag
default값이 없을 때 기본값.Values.replicaCount | default 1
nindent / indent줄바꿈+들여쓰기 / 들여쓰기만nindent 4 (앞 줄바꿈 포함, 주로 사용)
명령어/단축키용도자주 쓰는 예
kubectl apply -f crd-*.yamlCRD(새 리소스 타입) 등록적용 후 kubectl get crd <name>으로 확인
kubectl get crd등록된 CRD 목록·상세kubectl get crd | grep cert-manager.io
kubectl wait --for=condition=EstablishedCRD 준비(사용 가능) 대기kubectl wait crd/webapps... --for=condition=Established --timeout=30s
kubectl api-resources새 리소스 kubectl 등록 확인kubectl api-resources | grep <group>
kubectl api-versions등록된 API group/version 확인kubectl api-versions | grep platform
kubectl get <cr>커스텀 리소스 목록(축약형)kubectl get wa -n crd-lab (shortName)
kubectl describe <cr>커스텀 리소스 spec·status 확인kubectl describe webapp frontend
kubectl get <cr> -o yaml전체 필드 원본 확인... -o jsonpath='{.spec.scope}' (특정 필드)
kubectl patch --subresource=statusController처럼 status만 갱신... --type=merge -p '{"status":{"phase":"Running"}}'
kubectl patch --type=mergespec 필드 부분 수정... -p '{"spec":{"replicas":3}}'
kubectl edit <cr>커스텀 리소스 직접 편집kubectl edit webapp frontend
kubectl delete <cr>커스텀 리소스 삭제Terminating이면 finalizer 확인
kubectl get crd -o yaml | grep conditionsCRD Established 여부 진단Established: False면 스키마 오류
kubectl get <cr> -o jsonpath (finalizers)Terminating 원인 진단... -o jsonpath='{.metadata.finalizers}'
명령어/단축키용도자주 쓰는 예
helm install <operator>Operator 배포helm install postgres-operator postgres-operator-charts/postgres-operator -n operator-lab
kubectl get crd | grepOperator가 등록한 CRD 확인kubectl get crd | grep acid.zalan.do
kubectl get <cr>커스텀 리소스 상태(STATUS/PODS) 확인kubectl get postgresql -n operator-lab
kubectl get all | grep -vOperator가 생성한 하위 리소스 확인kubectl get all -n operator-lab | grep -v postgres-operator
kubectl logs -l app=<operator>Reconcile 에러 확인(진단 1순위)kubectl logs -n operator-lab -l app.kubernetes.io/name=postgres-operator --since=5m
kubectl get events --sort-by리소스 생성 실패 이유 확인kubectl get events -n operator-lab --sort-by=.creationTimestamp | tail -20
-o jsonpath(generation 비교)Operator가 최신 spec 반영했는지 확인metadata.generationstatus.observedGeneration이면 미반영
kubectl describe <cr>status·Events로 막힌 지점 파악kubectl describe postgresql my-postgres-cluster -n operator-lab
kubectl auth can-i .../statusOperator RBAC(status 업데이트) 점검kubectl auth can-i update postgresql/status --as=system:serviceaccount:operator-lab:postgres-operator
kubectl get secret -o jsonpathOperator 자동 생성 인증정보 추출kubectl get secret <cred> -o jsonpath='{.data.password}' | base64 -d
kubectl delete pod장애 시뮬레이션(자동 failover 관찰)kubectl delete pod my-postgres-cluster-0 -n operator-lab
kubectl get pods -wReconcile로 파드 생성/승격 실시간 관찰kubectl get pods -n operator-lab -w
명령어/단축키용도자주 쓰는 예
helm install kube-prometheus-stackPrometheus+Grafana+Alertmanager 일괄 배포--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
kubectl get pods -n monitoring스택 파드 Running/READY 확인prometheus StatefulSet은 2/2가 정상
kubectl port-forwardPrometheus·Grafana UI 로컬 접속kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090
kubectl get prometheus -o yamlserviceMonitorSelector 레이블 확인kubectl get prometheus -n monitoring -o yaml | grep -A10 serviceMonitorSelector
kubectl get servicemonitor -o jsonpathselector·port 이름 대조kubectl get servicemonitor sample-app -o jsonpath='{.spec.selector}'
kubectl patch servicemonitor레이블/selector 불일치 즉시 수정kubectl patch servicemonitor sample-app --type=merge -p '{"metadata":{"labels":{"release":"kube-prometheus-stack"}}}'
kubectl get svc --show-labelsService 레이블이 selector와 맞는지 확인kubectl get svc sample-app -n default --show-labels
Prometheus UI /targetsscrape 타겟 UP/DOWN·에러 확인/service-discovery(발견/드롭)·/config(변환 결과) 순으로
PromQL rate()Counter의 초당 변화율rate(http_requests_total{status=~"5.."}[5m])
PromQL histogram_quantile()히스토그램 분위수(P99)histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
PromQL 집계레이블 기준 합·상위 Nsum(rate(...)[5m]) by (service) · topk(5, ...)
curl .../api/v1/queryUI 없이 쿼리 결과 조회curl -sg 'http://localhost:9090/api/v1/query?query=rate(http_requests_total[1m])'
명령어/단축키용도자주 쓰는 예
kubectl logs -l app=promtail수집기 로그로 1차 진단kubectl logs -n monitoring -l app=promtail --tail=200 | grep -E "status=429|rate limit"
kubectl get daemonsetPromtail 노드별 배포 상태(DESIRED=READY)kubectl get ds loki-promtail -n monitoring
kubectl describe daemonsethostPath 마운트·tolerations 확인kubectl describe ds loki-promtail -n monitoring
kubectl port-forwardGrafana·Loki API 로컬 접속kubectl port-forward svc/loki-grafana -n monitoring 3000:80
kubectl get secret -o jsonpathGrafana admin 패스워드 추출kubectl get secret loki-grafana -n monitoring -o jsonpath='{.data.admin-password}' | base64 -d
curl .../loki/api/v1/labelsLoki에 수집된 레이블 확인curl -s http://localhost:3100/loki/api/v1/labels | jq '.data'
curl .../metrics | grep버려진 로그(rate limit) 지표 확정curl -s http://localhost:3100/metrics | grep loki_discarded_samples_total
LogQL 레이블 셀렉터인덱싱된 레이블로 스트림 선택{namespace="production", app="payment"}
LogQL 라인 필터스트림 내 문자열 검색(grep){app="nginx"} |= "ERROR" · != "health" · |~ "timeout|refused"
LogQL 파서·포맷JSON 파싱 후 필드 추출·정렬{app="payment"} | json | line_format "{{.level}} {{.message}}"
LogQL 메트릭 쿼리로그에서 초당 rate·건수 집계sum(rate({namespace=~".+"} |= "ERROR" [5m])) by (namespace) · count_over_time({...}[1h])
kubectl auth can-iPromtail RBAC(파드 메타데이터 read) 점검kubectl auth can-i list pods --as=system:serviceaccount:monitoring:loki-promtail
명령어/단축키용도자주 쓰는 예
istioctl install컨트롤 플레인 설치(프로파일)istioctl install --set profile=demo -y
istioctl x precheck설치 전 클러스터 호환성 점검istioctl x precheck
istioctl authn tls-check서비스 간 mTLS 상태(STRICT/CONFLICT)istioctl authn tls-check payment.prod svc.prod.svc.cluster.local
istioctl proxy-configEnvoy 실제 설정 덤프(route/cluster/endpoint)istioctl proxy-config route <pod>.<ns>, istioctl proxy-config cluster <pod>.<ns>
istioctl dashboardKiali·Prometheus 대시보드 열기istioctl dashboard kiali
kubectl label namespace네임스페이스 자동 사이드카 주입kubectl label namespace default istio-injection=enabled
kubectl get pod -o jsonpath사이드카(istio-proxy) 주입 확인kubectl get pod X -o jsonpath='{.spec.containers[*].name}'app istio-proxy
kubectl logs -c istio-proxyEnvoy 접근 로그·에러코드 확인kubectl logs <pod> -c istio-proxy | grep -E 'UF|URX|NR'
kubectl apply -f (PeerAuth/DR/VS)mTLS·subset·가중치 라우팅 적용kubectl apply -f peer-auth-strict.yaml
kubectl patch virtualservice카나리 트래픽 가중치 조정kubectl patch virtualservice payment-vs --type=json -p='[...]'
명령어/단축키용도자주 쓰는 예
argocd app listApplication 목록·SYNC 상태SYNC=OutOfSync면 diff로 원인 확인
argocd app getApplication 상세·동기화 상태... --show-operation (sync 실패 사유)
argocd app diffGit과 클러스터 매니페스트 차이차이 없는데 미반영이면 가변 태그 함정 의심
argocd app sync수동 즉시 동기화... --revision abc1234 (특정 커밋) / --dry-run
argocd app rollback이전 성공 배포로 복원argocd app history로 ID 확인 후 rollback <id>
argocd app history배포 이력·리비전 확인롤백 대상 ID·커밋 SHA 파악
argocd app delete --cascade앱+리소스 함께 삭제종속 리소스까지 정리
argocd repo add프라이빗 Git 자격증명 등록--ssh-private-key-path / --username --password
kubectl apply -f install.yaml -n argocdArgoCD 설치kubectl create namespace argocd 먼저
kubectl wait --for=condition=available컨트롤러 배포 대기... deployment/argocd-server -n argocd --timeout=300s
kubectl get secret ... | base64 -d초기 admin 비밀번호 확인argocd-initial-admin-secret의 password
kubectl port-forwardArgoCD UI 로컬 접근kubectl port-forward svc/argocd-server -n argocd 8080:443
kubectl auth can-iArgoCD SA의 배포 권한 진단--as=system:serviceaccount:argocd:argocd-application-controller
kubectl get pod -o jsonpath파드 실제 image·imageID 대조Synced인데 옛 이미지일 때 다이제스트 비교
git revert / git logGitOps 롤백·배포 이력git revert <sha> --no-edit && git push
명령어/단축키용도자주 쓰는 예
kubectl get pods이상 상태 파드 빠른 필터kubectl get pods -A --field-selector=status.phase!=Running
kubectl describe podEvents·Last State에서 원인 단서kubectl describe pod X | grep -A5 'Last State' (OOMKilled/Exit Code)
kubectl logs --previous크래시 직전 컨테이너 로그kubectl logs X --previous | tail -30
kubectl get events이벤트 시간순·경고만 필터kubectl get events -A --sort-by=.lastTimestamp, --field-selector type=Warning
kubectl top노드·파드 실제 자원 사용kubectl top nodes, kubectl top pod X --containers
kubectl debug (pod)재시작 없이 디버그 컨테이너 부착kubectl debug X -it --image=nicolaka/netshoot --target=app
kubectl debug node/노드 파일시스템·디스크 진단kubectl debug node/worker-1 -it --image=busybox -- df -h
kubectl get pod -o jsonpathExit Code 직접 추출... -o jsonpath='{.status.containerStatuses[0].lastState.terminated.exitCode}'
kubectl drain / cordon노드 격리·유지보수kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data
kubectl get nodes / describe node노드 NotReady·컨디션 확인kubectl describe nodes | grep -A5 Conditions:
kubectl delete pod --force죽은 노드의 Terminating 파드 제거kubectl delete pod X --force --grace-period=0 (노드 사망 확인 후만)