☸️
쿠버네티스 & 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 deployment | K8s 선언적 배포·자동 복구 | ... nginx --image=nginx:alpine --replicas=3 |
kubectl apply -f | YAML로 원하는 상태 선언 | kubectl apply -f deployment.yaml |
kubectl get deployment | 선언 상태 반영 확인 | READY 3/3이면 정상 |
kubectl logs <pod> --previous | CrashLoopBackOff 원인(이전 로그) | 크래시 직전 컨테이너 로그 확인 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl cluster-info | API Server 주소·구동 확인 | 클러스터 접속 첫 점검 |
kubectl get nodes | 노드 Ready 상태 확인 | kubectl get nodes -o wide (IP·버전까지) |
kubectl get pods -n kube-system | 컨트롤 플레인 컴포넌트 상태 | ... | grep etcd / ... | grep kube-proxy |
kubectl get componentstatuses | scheduler·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 health | etcd 응답·건강 확인 | 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 describe | Events·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 pods | STATUS·READY·RESTARTS 한눈에 | kubectl get pods -w (상태 전환 실시간 관찰) |
kubectl describe pod | Events·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 debug | CrashLoop 파드를 복제해 디버깅 | kubectl debug -it X --copy-to=dbg --set-image=app=alpine -- sleep infinity |
kubectl rollout status | Deployment 롤아웃 완료 확인 | 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 deployment | Deployment 즉시 생성 | ... my-app --image=nginx:alpine --replicas=3 |
kubectl get deployment,replicaset,pod | 3계층 구조 한눈에 확인 | 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 -f | Git YAML과 클러스터 차이 비교 | kubectl diff -f deployment.yaml |
kubectl get pods -w | 롤링 교체 과정 실시간 관찰 | -l app=web-app -w (Terminating↔Running) |
kubectl describe deployment | Conditions·이벤트 확인 | 정체 시 ProgressDeadlineExceeded 확인 |
kubectl describe pod | Pending 원인(스케줄 실패) 확인 | Events의 FailedScheduling/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 svc | Selector·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 wide | NodePort 접근용 노드 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 ingress | ADDRESS·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 tls | TLS 인증서 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 tls | TLS 인증서 Secret 생성 | ... --cert=tls.crt --key=tls.key |
kubectl get configmap -o yaml | data 섹션 키-값 검증 | kubectl get cm app-config -o yaml (cm 축약) |
kubectl get secret -o jsonpath | Secret 값 디코딩 확인 | ... -o jsonpath='{.data.DB_PASSWORD}' | base64 -d |
base64 / base64 -d | Base64 인코딩·디코딩(암호화 아님) | 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-i | Secret 접근 권한(RBAC) 확인 | kubectl auth can-i get secret |
kubectl edit configmap | ConfigMap 즉시 수정 | kubectl edit cm app-config -n config-lab |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl get pv,pvc | STATUS(Available/Bound/Released/Pending) 확인 | kubectl get pv,pvc -n storage-lab |
kubectl describe pvc | Pending 원인(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-Attach | attach 단계 교착 확인 | 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 nodes | Multi-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 | jq | Terminating 멈춤 시 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 pod | limits·requests·종료 사유 확인 | kubectl describe pod X | grep -A5 "Last State" (OOMKilled) |
kubectl get pod -o jsonpath | QoS 클래스 확인 | kubectl get pod X -o jsonpath='{.status.qosClass}' |
kubectl get pods -o custom-columns | QoS 일괄 조회 | ... -o custom-columns='NAME:.metadata.name,QOS:.status.qosClass' |
kubectl set resources | requests/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 -w | OOMKilled→CrashLoop 전환 관찰 | kubectl get pod memory-stress -w |
cat .../cpu.stat | CPU 스로틀 카운터 확인 | nr_throttled·throttled_time이 늘면 CFS 스로틀 |
| Exit Code 137 | OOMKilled 판별 | describe의 Reason: OOMKilled + Exit Code: 137 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl autoscale | 빠르게 HPA 생성 | kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10 |
kubectl get hpa | TARGETS(현재/목표)·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 resources | requests/limits 설정(HPA 전제) | kubectl set resources deploy/api --requests=cpu=200m,memory=256Mi |
kubectl rollout status | metrics-server 기동 대기 | kubectl rollout status deploy/metrics-server -n kube-system |
kubectl patch deployment | metrics-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 pod | Probe 설정·실패 사유 확인 | kubectl describe pod X | grep -A10 Liveness |
kubectl get events | Probe 실패 이벤트 추적 | kubectl get events --sort-by=.lastTimestamp | grep -i unhealthy |
kubectl get endpoints | Readiness 통과 파드만 조회 | kubectl get endpoints web-app-svc |
kubectl get pod -o wide | READY 컬럼으로 준비 상태 확인 | kubectl get pod -o wide (0/1이면 readiness 미통과) |
kubectl rollout restart | Probe 추가 후 롤링 재기동 | kubectl rollout restart deployment/api |
kubectl patch deployment | 실행 중 Probe 주입 | kubectl patch deploy api --type=json -p='[{"op":"add", ...readinessProbe...}]' |
kubectl get ... -o jsonpath | Probe 설정 유무 확인 | ... -o jsonpath='{.spec.template.spec.containers[0].readinessProbe}' (null=미설정) |
kubectl top pod | CPU 스로틀로 인한 오탐 확인 | 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 daemonset | DaemonSet DESIRED/CURRENT 비교 | DESIRED=노드 수여야 정상, 불일치 시 describe ds |
kubectl label node | nodeSelector 대상 노드 지정 | 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 statefulset | StatefulSet 상태 확인 | 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 statefulset | partition 카나리 업데이트 설정 | ... -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":2}}}}' |
kubectl get pvc | 파드별 독립 PVC Bound 확인 | data-mysql-0 등 ordinal별 PVC |
kubectl describe pvc | PVC Pending 원인(이벤트) 확인 | ... | grep -A10 Events (StorageClass 없음 등) |
kubectl get storageclass | 사용 가능한 StorageClass 확인 | 비어 있으면 동적 프로비저닝 불가 |
kubectl run --rm -it -- nslookup | Headless Service DNS 확인 | nslookup mysql-0.mysql.<ns>.svc.cluster.local |
kubectl get endpoints -o yaml | not-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 sa | ServiceAccount 목록 조회 | kubectl get sa -n <ns> |
kubectl create serviceaccount | 전용 SA 생성 | kubectl create serviceaccount deployment-scaler -n <ns> |
kubectl create token | SA 토큰 수동 발급(디버깅) | kubectl create token <sa> -n <ns> --duration=24h |
kubectl auth can-i --as | SA 실효 권한 확인 | kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns> |
kubectl run --serviceaccount | SA 지정해 파드 실행 | 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_ARN | IRSA 웹훅 주입 여부 확인 | 값이 없으면 파드 재생성 필요(주입은 생성 시점에만) |
aws sts get-caller-identity | IRSA 역할 assume 검증 | kubectl exec -it X -- aws sts get-caller-identity (Arn 확인) |
kubectl rollout restart | annotation 후 웹훅 재주입 | kubectl rollout restart deployment/X |
JWT exp 디코딩 | 토큰 만료 확인(401) | … token | cut -d. -f2 | base64 -d 후 exp 확인 |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl get netpol | 적용된 정책 목록 확인 | kubectl get networkpolicy -A(전 네임스페이스) |
kubectl describe netpol | PodSelector·허용 규칙 확인 | kubectl describe networkpolicy payment-service-policy -n production |
kubectl get netpol -o yaml | from/to 배열 구조(-개수=AND/OR) 진단 | kubectl get networkpolicy <name> -o yaml(from 밑 - 수 세기) |
kubectl get pods -n kube-system | grep | NetworkPolicy 지원 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 -- nslookup | Egress 정책 후 DNS(53) 허용 확인 | kubectl exec -it <pod> -- nslookup order-service.production |
kubectl label namespace | namespaceSelector용 레이블 부여 | kubectl label namespace netpol-demo env=demo |
kubectl get namespace --show-labels | namespaceSelector 매칭 레이블 확인 | kubectl get namespace --show-labels |
kubectl describe pod | grep Labels | 파드 레이블로 적용 정책 수동 매칭 | kubectl describe pod payment-pod -n production | grep -A5 Labels |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl create pdb | PDB 빠르게 생성 | kubectl create pdb web-pdb --selector=app=web --min-available=2 -n pdb-demo |
kubectl get pdb | ALLOWED 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-eviction | PDB 무시 강제 드레인(비권장) | 교착 긴급 해소 최후 수단 |
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-labels | affinity 작성 전 노드 레이블 확인 | 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 affinity | affinity 키 오타 진단 | kubectl get pod <pod> -o yaml | grep -A20 affinity |
kubectl get nodes -o json | jq | affinity 매칭 노드 사전 검증 | 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 vpa | VPA 오브젝트 조회 | 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=merge | updateMode 전환 | kubectl patch vpa X --type=merge -p '{"spec":{"updatePolicy":{"updateMode":"Initial"}}}' |
kubectl patch deployment --type=json | 추천값 수동 반영 | requests/limits를 Target 값으로 replace |
kubectl set resources | requests/limits 조정 | kubectl set resources deploy/X --requests=cpu=75m,memory=250Mi --limits=cpu=200m,memory=500Mi |
kubectl get pdb | eviction 차단(무동작) 확인 | kubectl get pdb -n <ns> (ALLOWED DISRUPTIONS 0=봉쇄) |
kubectl get pod -o jsonpath | 실제 반영된 requests 확인 | ... -o jsonpath='{.spec.containers[0].resources.requests}' |
kubectl describe pod | VPA Evicted 이벤트 확인 | kubectl describe pod X | grep -A5 Events |
kubectl logs vpa-updater | evict 시도 추적 | kubectl logs -n kube-system -l app=vpa-updater | grep -i evict |
updateMode | Off/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 update | Chart.yaml의 서브차트 다운로드 | helm dependency update ./my-webapp (charts/에 tgz 생성) |
helm upgrade --atomic | 실패 시 자동 롤백 | helm upgrade my-webapp ./chart --set image.tag=$SHA --atomic --timeout 5m |
include | named template 호출(pipeline 가능) | include "my-webapp.labels" . | nindent 4 |
toYaml | values 구조체를 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-*.yaml | CRD(새 리소스 타입) 등록 | 적용 후 kubectl get crd <name>으로 확인 |
kubectl get crd | 등록된 CRD 목록·상세 | kubectl get crd | grep cert-manager.io |
kubectl wait --for=condition=Established | CRD 준비(사용 가능) 대기 | 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=status | Controller처럼 status만 갱신 | ... --type=merge -p '{"status":{"phase":"Running"}}' |
kubectl patch --type=merge | spec 필드 부분 수정 | ... -p '{"spec":{"replicas":3}}' |
kubectl edit <cr> | 커스텀 리소스 직접 편집 | kubectl edit webapp frontend |
kubectl delete <cr> | 커스텀 리소스 삭제 | Terminating이면 finalizer 확인 |
kubectl get crd -o yaml | grep conditions | CRD 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 | grep | Operator가 등록한 CRD 확인 | kubectl get crd | grep acid.zalan.do |
kubectl get <cr> | 커스텀 리소스 상태(STATUS/PODS) 확인 | kubectl get postgresql -n operator-lab |
kubectl get all | grep -v | Operator가 생성한 하위 리소스 확인 | 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.generation ≠ status.observedGeneration이면 미반영 |
kubectl describe <cr> | status·Events로 막힌 지점 파악 | kubectl describe postgresql my-postgres-cluster -n operator-lab |
kubectl auth can-i .../status | Operator RBAC(status 업데이트) 점검 | kubectl auth can-i update postgresql/status --as=system:serviceaccount:operator-lab:postgres-operator |
kubectl get secret -o jsonpath | Operator 자동 생성 인증정보 추출 | 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 -w | Reconcile로 파드 생성/승격 실시간 관찰 | kubectl get pods -n operator-lab -w |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
helm install kube-prometheus-stack | Prometheus+Grafana+Alertmanager 일괄 배포 | --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false |
kubectl get pods -n monitoring | 스택 파드 Running/READY 확인 | prometheus StatefulSet은 2/2가 정상 |
kubectl port-forward | Prometheus·Grafana UI 로컬 접속 | kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090 |
kubectl get prometheus -o yaml | serviceMonitorSelector 레이블 확인 | kubectl get prometheus -n monitoring -o yaml | grep -A10 serviceMonitorSelector |
kubectl get servicemonitor -o jsonpath | selector·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-labels | Service 레이블이 selector와 맞는지 확인 | kubectl get svc sample-app -n default --show-labels |
Prometheus UI /targets | scrape 타겟 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 집계 | 레이블 기준 합·상위 N | sum(rate(...)[5m]) by (service) · topk(5, ...) |
curl .../api/v1/query | UI 없이 쿼리 결과 조회 | 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 daemonset | Promtail 노드별 배포 상태(DESIRED=READY) | kubectl get ds loki-promtail -n monitoring |
kubectl describe daemonset | hostPath 마운트·tolerations 확인 | kubectl describe ds loki-promtail -n monitoring |
kubectl port-forward | Grafana·Loki API 로컬 접속 | kubectl port-forward svc/loki-grafana -n monitoring 3000:80 |
kubectl get secret -o jsonpath | Grafana admin 패스워드 추출 | kubectl get secret loki-grafana -n monitoring -o jsonpath='{.data.admin-password}' | base64 -d |
curl .../loki/api/v1/labels | Loki에 수집된 레이블 확인 | 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-i | Promtail 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-config | Envoy 실제 설정 덤프(route/cluster/endpoint) | istioctl proxy-config route <pod>.<ns>, istioctl proxy-config cluster <pod>.<ns> |
istioctl dashboard | Kiali·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-proxy | Envoy 접근 로그·에러코드 확인 | 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 list | Application 목록·SYNC 상태 | SYNC=OutOfSync면 diff로 원인 확인 |
argocd app get | Application 상세·동기화 상태 | ... --show-operation (sync 실패 사유) |
argocd app diff | Git과 클러스터 매니페스트 차이 | 차이 없는데 미반영이면 가변 태그 함정 의심 |
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 argocd | ArgoCD 설치 | 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-forward | ArgoCD UI 로컬 접근 | kubectl port-forward svc/argocd-server -n argocd 8080:443 |
kubectl auth can-i | ArgoCD SA의 배포 권한 진단 | --as=system:serviceaccount:argocd:argocd-application-controller |
kubectl get pod -o jsonpath | 파드 실제 image·imageID 대조 | Synced인데 옛 이미지일 때 다이제스트 비교 |
git revert / git log | GitOps 롤백·배포 이력 | git revert <sha> --no-edit && git push |
| 명령어/단축키 | 용도 | 자주 쓰는 예 |
|---|---|---|
kubectl get pods | 이상 상태 파드 빠른 필터 | kubectl get pods -A --field-selector=status.phase!=Running |
kubectl describe pod | Events·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 jsonpath | Exit 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 (노드 사망 확인 후만) |