Kubernetes(k8s)에서 kubectl 명령어 사용법 - 리소스 관리, 롤아웃 재시작, 디버깅 및 CI/CD 적용 updated_at: 2025-06-20 15:53

kubectl 명령어

kubectl apply

  • 변경사항만 적용: 기존 리소스의 설정을 수정하거나 추가할 때 유용합니다.
  • 선언적 업데이트: 리소스의 전체 정의를 제공하고 Kubernetes가 필요한 변경을 파악해 적용합니다.
kubectl apply -f sample-deployment.yaml

kubectl rollout restart

kubectl rollout restart deployment sample-deployment.yaml

apply vs rollout restart

항목 kubectl apply -f kubectl rollout restart
동작 조건 YAML 내용이 바뀌었을 때만 작동 무조건 강제 재시작
사용 목적 상태를 선언적으로 관리 상태는 그대로 두고 재시작만
변경 없이 재시작 가능? ❌ 불가능 ✅ 가능
ConfigMap 변경 반영? ✅ 단, Pod template에 마운트되어 있어야 함 ✅ 강제 재시작으로 반영 가능
실사용 예시 버전 변경, 리소스 수정 등 Secret/ConfigMap 수정 후 재시작 필요 시
Rolling Update 적용 방식 변경 시에만 적용 항상 Rolling Update로 Pod 재생성

실전예제

상황 어떤 명령어 사용
php 버전을 8.2 → 8.3으로 바꿨음 kubectl apply -f
ConfigMap만 바꿨는데 적용이 안 됨 kubectl rollout restart
디버깅 중 nginx만 재시작하고 싶음 kubectl rollout restart deployment nginx-phpfpm-deployment
YAML 정의를 GitOps처럼 선언적으로 유지 kubectl apply -f (주로 CI/CD에서 사용)

kubectl create

  • 새 리소스 생성: 존재하지 않는 새 리소스를 만드는 데 사용됩니다.
  • 명시적 생성: 명령어가 호출될 때 리소스가 생성됩니다.
kubectl create -f my-custom-nginx.yaml // yaml에 정의된 pod 생성

kubectl exec

kubectl exec -it <podname> -n namespace -- <command> -<arguments-as-per-command>
kubectl exec -it [pod name] -- /bin/bash // pod의 default container의 콘솔 접근
kubectl exec -it [pod name] -c [container name] -- /bin/bash // 1개 이상의 container가 pod 내에 있을 경우 각각의 container 접근법

주요옵션

옵션 설명
-c, --container 대상 컨테이너 지정 (Pod에 여러 개의 컨테이너가 있을 경우 필수)
-i, --stdin 표준 입력(STDIN)을 활성화 (예: bash에서 키보드 입력)
-t, --tty TTY를 할당 (터미널 인터페이스 제공)
--pod-running-timeout Pod이 준비될 때까지 기다리는 시간 (기본 1분)
--namespace 사용할 네임스페이스 설정 (기본은 default)
--context kubeconfig에서 사용할 context 지정
--kubeconfig 특정 kubeconfig 파일 사용
--quiet 실행 결과 출력 억제
--help 사용법 도움말 출력

kubectl delete

kubectl delete pod [pod name] // pod 삭제
kubectl delete --all pods --namespace=foo
kubectl delete deployment [deployment name]
kubectl delete svc [service name]
kubectl delete pvc [pvc name]
kubectl delete persistentvolumeclaim [pvc name]
kubectl delete pv [pv name]
kubectl delete statefulset [statefulset name]
kubectl delete clusterrolebinding [clusterrolebinding name]

kubectl describe

kubectl describe pod {POD NAME} -n {namespace} // 현재 pod의 상태를 보여준다.
kubectl describe svc {Service NAME}

kubectl get

kubectl get all // 일반적인 리소스(pod, svc, deployment, etc.)는 가져올 수 있습니다. (ConfigMap, PVC, Ingress, Secret 등은 포함하지 않습니다.)
kubectl get nodes
kubectl get pod [pod name] // pod 정보 출력
kubectl get pods // 생성된 pod list up
kubectl get pods -o wide // pods의 상세 리스트
kubectl get deployment
kubectl get configmaps
kubectl get services
kubectl get persistentvolume   
kubectl get pv
kubectl get persistentvolumeclaim
kubectl get pvc
kubectl get clusterrolebindings

kubectl logs

kubectl logs [pod name] // pod name에 대한 logs를 디스플레이
kubectl logs [pod name] --container [container name] // pod name에 포함된 container name의 log
kubectl logs [pod name] -c [container name]
kubectl logs [pod name] --previous --tail 10
kubectl logs deployment/[deployment name] // deployment 의 로그 디스플레이

kubectl port-forward

kubectl port-forward [pod name] 8888:80 //외부의 8888 포트를 컨테이너내의 80 포터로 변경 
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글