🔧 DevOps

kubectl

큐브컨트롤

Kubernetes CLI 도구. 클러스터 관리 명령어 실행.

상세 설명

kubectl(큐브컨트롤, 발음: 큐브-CTL 또는 큐브-커틀)은 Kubernetes 클러스터를 관리하는 공식 커맨드라인 도구입니다. API 서버와 통신하여 Pod, Service, Deployment 등 모든 Kubernetes 리소스를 생성, 조회, 수정, 삭제할 수 있습니다.

명령 구조는 kubectl [동사] [리소스] [이름] [옵션]입니다. 주요 동사로 get(조회), describe(상세정보), apply(적용), delete(삭제), logs(로그), exec(명령실행)가 있습니다. YAML 파일로 선언적 관리가 가능하며, --dry-run으로 실행 전 검증할 수 있습니다.

kubeconfig 파일(~/.kube/config)에 클러스터 접속 정보가 저장됩니다. context로 여러 클러스터를 관리하고, 네임스페이스로 리소스를 격리합니다. RBAC 권한에 따라 실행 가능한 명령이 제한됩니다.

실무에서는 kubectl get pods --watch로 실시간 상태 확인, kubectl logs -f로 로그 스트리밍, kubectl exec -it로 컨테이너 접속을 자주 사용합니다. alias k=kubectl 설정과 bash completion으로 생산성을 높입니다.

코드 예제

# 리소스 조회
kubectl get pods                     # Pod 목록
kubectl get pods -o wide             # 추가 정보 (IP, Node)
kubectl get pods -w                  # 실시간 변화 감시
kubectl get all -n production        # 특정 네임스페이스 전체 리소스

# 상세 정보 및 로그
kubectl describe pod my-pod          # Pod 상세 정보
kubectl logs my-pod -f               # 로그 스트리밍
kubectl logs my-pod -c nginx         # 특정 컨테이너 로그
kubectl logs -l app=web --tail=100   # 레이블로 여러 Pod 로그

# 리소스 생성/적용
kubectl apply -f deployment.yaml     # 선언적 적용
kubectl apply -f ./k8s/              # 디렉토리 전체 적용
kubectl create deployment nginx --image=nginx  # 명령형 생성
kubectl apply -f - <

실무에서 이렇게 말해요

시니어: "운영 클러스터 Pod가 CrashLoopBackOff인데, kubectl describe로 이벤트 확인해봐요."

주니어: "OOMKilled가 나오네요. 메모리 limit을 512Mi에서 1Gi로 올려야 할 것 같아요."

면접관: "kubectl apply와 kubectl create의 차이점은 무엇인가요?"

지원자: "create는 리소스가 없을 때만 생성하고, apply는 없으면 생성, 있으면 업데이트합니다. GitOps 환경에서는 선언적 관리를 위해 apply를 사용합니다."

리뷰어: "운영 환경에서 kubectl delete를 직접 실행하는 스크립트는 위험해요."

개발자: "ArgoCD로 관리하도록 수정하고, kubectl은 조회용으로만 제한하겠습니다."

주의사항

  • 운영 클러스터에서 delete/scale 명령 전 반드시 --dry-run으로 확인
  • 컨텍스트 확인 없이 명령 실행 금지 - 잘못된 클러스터 조작 위험
  • kubectl edit 보다 YAML 파일 수정 후 apply 권장 - 변경 이력 추적 가능
  • kubectx/kubens 도구로 클러스터/네임스페이스 전환을 안전하게 관리

더 배우기