신입 개발자를 위한 쿠버네티스 명령어 가이드
소개
쿠버네티스(Kubernetes, 종종 K8s로 축약)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈소스 시스템입니다. 신입 개발자로서 쿠버네티스 환경에서 작업하게 된다면, kubectl
이라는 강력한 커맨드 라인 인터페이스(CLI) 도구를 자주 사용하게 될 것입니다. 이 가이드는 신입 개발자가 알아야 할 필수적인 kubectl
명령어들을 상세히 설명하여 쿠버네티스 클러스터와의 상호작용을 돕고자 합니다.
kubectl
기본 설정 및 도움말
설치 확인 및 버전 정보
쿠버네티스 클러스터와 통신하기 전에 kubectl
이 올바르게 설치되고 구성되었는지 확인하는 것이 중요합니다.
-
클라이언트 및 서버 버전 확인:
kubectl version
이 명령어는
kubectl
클라이언트와 쿠버네티스 API 서버의 버전을 보여줍니다.--short
플래그를 추가하면 간략한 버전 정보만 볼 수 있습니다.kubectl version --short
설정 확인
kubectl
은 ~/.kube/config
파일에 저장된 설정을 사용하여 클러스터에 연결합니다.
-
현재 설정 보기:
kubectl config view
-
현재 컨텍스트 확인:
kubectl config current-context
-
모든 컨텍스트 나열:
kubectl config get-contexts
-
컨텍스트 변경:
kubectl config use-context <context-name>
명령어 도움말
kubectl
은 자체적으로 매우 유용한 도움말 기능을 제공합니다.
-
일반 도움말:
kubectl --help
-
특정 명령어 도움말:
kubectl <command> --help
예를 들어,
get
명령어에 대한 도움말을 보려면 다음을 실행합니다.kubectl get --help
클러스터 정보 확인
-
클러스터 정보 보기:
kubectl cluster-info
이 명령어는 마스터 노드 및 클러스터 내 주요 서비스들의 주소를 보여줍니다.
-
클러스터 이벤트 보기:
kubectl get events
클러스터에서 발생하는 다양한 이벤트를 시간순으로 볼 수 있어 문제 해결에 유용합니다.
네임스페이스(Namespace) 관리
네임스페이스는 단일 클러스터 내에서 리소스를 격리하는 방법입니다.
-
모든 네임스페이스 나열:
kubectl get namespaces
또는 축약형으로
ns
를 사용할 수 있습니다.kubectl get ns
-
특정 네임스페이스의 리소스 보기:
--namespace
또는-n
플래그를 사용합니다.kubectl get pods --namespace <namespace-name> kubectl get pods -n <namespace-name>
-
기본 네임스페이스 변경: 현재 컨텍스트의 기본 네임스페이스를 변경하여 매번
-n
플래그를 입력하지 않도록 할 수 있습니다.kubectl config set-context --current --namespace=<namespace-name>
기본 리소스 조회 (kubectl get
)
kubectl get
명령어는 가장 자주 사용되는 명령어 중 하나로, 다양한 쿠버네티스 리소스의 목록을 조회할 수 있습니다.
-
노드(Node) 목록 보기:
kubectl get nodes
클러스터에 있는 모든 워커 노드의 상태를 보여줍니다.
-o wide
옵션을 추가하면 더 자세한 정보를 볼 수 있습니다.kubectl get nodes -o wide
-
파드(Pod) 목록 보기:
kubectl get pods
현재 네임스페이스의 모든 파드를 보여줍니다. 모든 네임스페이스의 파드를 보려면
-A
또는--all-namespaces
플래그를 사용합니다.kubectl get pods -A kubectl get pods --all-namespaces
특정 파드에 대한 자세한 정보를 YAML 또는 JSON 형식으로 보려면
-o yaml
또는-o json
을 사용합니다.kubectl get pod <pod-name> -o yaml
-
서비스(Service) 목록 보기:
kubectl get services
또는 축약형으로
svc
를 사용할 수 있습니다.kubectl get svc
-
디플로이먼트(Deployment) 목록 보기:
kubectl get deployments
또는 축약형으로
deploy
를 사용할 수 있습니다.kubectl get deploy
-
스테이트풀셋(StatefulSet) 목록 보기:
kubectl get statefulsets
또는 축약형으로
sts
를 사용할 수 있습니다.kubectl get sts
-
데몬셋(DaemonSet) 목록 보기:
kubectl get daemonsets
또는 축약형으로
ds
를 사용할 수 있습니다.kubectl get ds
-
컨피그맵(ConfigMap) 및 시크릿(Secret) 목록 보기:
kubectl get configmaps kubectl get secrets
축약형은 각각
cm
과secret
입니다. -
여러 리소스 동시 조회:
kubectl get pods,services kubectl get all # 주요 리소스를 한번에 보여주지만, 모든 것을 의미하진 않음
리소스 상세 정보 확인 (kubectl describe
)
kubectl describe
명령어는 특정 리소스에 대한 상세한 정보를 보여줍니다. 이벤트, 상태, 설정 등을 포함하여 문제 해결에 매우 유용합니다.
-
파드 상세 정보:
kubectl describe pod <pod-name>
예를 들어, 파드가 왜
Pending
상태인지, 어떤 이벤트가 발생했는지 등을 확인할 수 있습니다. -
노드 상세 정보:
kubectl describe node <node-name>
노드의 현재 상태, 할당된 리소스, 실행 중인 파드 목록 등을 볼 수 있습니다.
-
디플로이먼트 상세 정보:
kubectl describe deployment <deployment-name>
파드 로그 확인 (kubectl logs
)
애플리케이션의 동작을 이해하고 문제를 진단하는 데 필수적인 명령어입니다.
-
파드 로그 보기:
kubectl logs <pod-name>
-
실시간 로그 스트리밍 (Follow):
-f
또는--follow
플래그를 사용합니다.kubectl logs -f <pod-name>
-
이전 컨테이너 로그 보기 (Previous): 파드가 재시작된 경우,
-p
또는--previous
플래그로 이전 컨테이너의 로그를 볼 수 있습니다.kubectl logs -p <pod-name>
-
특정 컨테이너 로그 보기 (Multi-container Pods): 파드 내에 여러 컨테이너가 있는 경우,
-c
또는--container
플래그로 특정 컨테이너를 지정해야 합니다.kubectl logs <pod-name> -c <container-name>
-
최근 N줄 로그 보기:
--tail
플래그를 사용합니다.kubectl logs <pod-name> --tail=50
파드 내 컨테이너 접근 (kubectl exec
)
실행 중인 컨테이너 내부로 들어가거나 명령을 실행할 수 있습니다.
-
컨테이너에 셸(Shell) 실행:
-i
(stdin) 와-t
(tty) 플래그를 함께 사용하여 인터랙티브 셸을 실행합니다.kubectl exec -it <pod-name> -- /bin/bash
만약
/bin/bash
가 없다면/bin/sh
을 시도해 보세요.kubectl exec -it <pod-name> -- /bin/sh
-
컨테이너에 단일 명령어 실행:
kubectl exec <pod-name> -- <command>
예를 들어, 컨테이너 내의 환경 변수를 보려면:
kubectl exec <pod-name> -- env
-
특정 컨테이너에 명령어 실행 (Multi-container Pods):
-c
플래그를 사용합니다.kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
리소스 생성 및 수정 (kubectl apply
, kubectl create
, kubectl edit
)
쿠버네티스 리소스는 주로 YAML 또는 JSON 형식의 매니페스트 파일을 통해 정의되고 관리됩니다.
-
파일로부터 리소스 생성 또는 업데이트 (
apply
):kubectl apply
는 선언적 방식의 명령어로, 파일에 정의된 상태를 클러스터에 적용합니다. 리소스가 없으면 생성하고, 있으면 업데이트합니다. 가장 권장되는 방식입니다.kubectl apply -f <filename.yaml> kubectl apply -f <directory/>
-
파일로부터 리소스 생성 (
create
):kubectl create
는 명령적 방식의 명령어로, 리소스를 새로 생성합니다. 이미 리소스가 존재하면 오류가 발생합니다.kubectl create -f <filename.yaml>
간단한 리소스는 직접 명령어로 생성할 수도 있습니다.
kubectl create deployment <deployment-name> --image=<image-name> kubectl create service clusterip <service-name> --tcp=80:8080
-
실행 중인 리소스 수정 (
edit
):kubectl edit <resource-type>/<resource-name>
예를 들어, 디플로이먼트를 수정하려면:
kubectl edit deployment/<deployment-name>
이 명령어는 기본 편집기(보통
vi
)로 리소스의 YAML 정의를 열어주며, 저장 시 변경 사항이 적용됩니다.
리소스 삭제 (kubectl delete
)
-
파일로부터 리소스 삭제:
kubectl delete -f <filename.yaml>
-
타입과 이름으로 리소스 삭제:
kubectl delete <resource-type> <resource-name>
예를 들어, 특정 파드를 삭제하려면:
kubectl delete pod <pod-name>
디플로이먼트를 삭제하려면:
kubectl delete deployment <deployment-name>
디플로이먼트를 삭제하면 관련된 파드들도 함께 삭제됩니다.
-
여러 리소스 동시 삭제:
kubectl delete pod <pod1-name> <pod2-name> kubectl delete pods,services --all # 현재 네임스페이스의 모든 파드와 서비스 삭제 (주의!)
디플로이먼트 관리
디플로이먼트는 애플리케이션의 선언적 업데이트를 관리합니다.
-
디플로이먼트 확장/축소 (Scale):
kubectl scale deployment <deployment-name> --replicas=<count>
예를 들어,
my-app
디플로이먼트의 파드 수를 3개로 조절하려면:kubectl scale deployment my-app --replicas=3
-
롤아웃 상태 확인:
kubectl rollout status deployment/<deployment-name>
배포가 성공적으로 완료될 때까지 상태를 모니터링합니다.
-
롤아웃 히스토리 보기:
kubectl rollout history deployment/<deployment-name>
-
롤백 (Rollback): 문제가 발생했을 때 이전 버전으로 되돌릴 수 있습니다.
# 이전 버전으로 롤백 kubectl rollout undo deployment/<deployment-name> # 특정 리비전으로 롤백 kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number>
-
롤아웃 일시정지 및 재개:
kubectl rollout pause deployment/<deployment-name> kubectl rollout resume deployment/<deployment-name>
포트 포워딩 (kubectl port-forward
)
로컬 머신의 포트를 파드 또는 서비스의 포트로 전달하여, 외부에서 직접 접근할 수 없는 내부 서비스를 테스트하거나 디버깅할 때 유용합니다.
-
파드로 포트 포워딩:
kubectl port-forward pod/<pod-name> <local-port>:<pod-port>
예를 들어, 로컬의 8080 포트를
my-pod
의 80 포트로 전달:kubectl port-forward pod/my-pod 8080:80
이제 브라우저에서
http://localhost:8080
으로 접근하면my-pod
의 80 포트로 연결됩니다. -
서비스로 포트 포워딩:
kubectl port-forward service/<service-name> <local-port>:<service-port>
-
디플로이먼트의 파드로 포트 포워딩: 디플로이먼트가 관리하는 파드 중 하나로 포워딩합니다.
kubectl port-forward deployment/<deployment-name> <local-port>:<target-port>
레이블(Label) 및 어노테이션(Annotation) 관리
레이블은 리소스를 식별하고 선택하는 데 사용되는 키-값 쌍입니다. 어노테이션은 비식별 메타데이터를 추가하는 데 사용됩니다.
-
리소스에 레이블 추가/업데이트:
--overwrite
플래그는 기존 레이블이 있을 경우 덮어씁니다.kubectl label <resource-type> <resource-name> <label-key>=<label-value> --overwrite
예:
kubectl label pod my-pod environment=production --overwrite
-
레이블로 리소스 조회:
-l
또는--selector
플래그를 사용합니다.kubectl get pods -l environment=production kubectl get pods -l 'app=nginx,tier=frontend'
-
레이블 삭제: 레이블 키 뒤에
-
를 붙입니다.kubectl label <resource-type> <resource-name> <label-key>-
예:
kubectl label pod my-pod environment-
-
리소스에 어노테이션 추가/업데이트:
kubectl annotate <resource-type> <resource-name> <annotation-key>=<annotation-value> --overwrite
유용한 팁 및 추가 명령어
-
kubectl
자동 완성 설정: 셸 환경에 따라kubectl completion <shell>
명령어로 자동 완성 스크립트를 생성하고 설정할 수 있습니다. 이는 생산성을 크게 향상시킵니다. (예:kubectl completion bash
) -
출력 형식 변경 (
-o
):-o wide
,-o yaml
,-o json
,-o custom-columns
,-o jsonpath
등 다양한 출력 형식을 지원합니다.kubectl get pods -o wide kubectl get pod <pod-name> -o yaml kubectl get nodes -o custom-columns=NAME:.metadata.name,OS-IMAGE:.status.nodeInfo.osImage
-
리소스 사용량 확인 (
kubectl top
): 메트릭 서버(Metrics Server)가 클러스터에 설치되어 있어야 합니다.# 노드 리소스 사용량 kubectl top node # 파드 리소스 사용량 kubectl top pod kubectl top pod -n <namespace-name>
-
API 리소스 목록 보기:
kubectl api-resources
클러스터에서 사용 가능한 모든 API 리소스 유형과 축약형, API 그룹, 네임스페이스 여부 등을 보여줍니다.
-
API 버전 정보 보기:
kubectl api-versions
사용 가능한 API 그룹과 버전 목록을 보여줍니다.
마무리
이 가이드에서 소개된 kubectl
명령어들은 쿠버네티스를 사용하는 신입 개발자에게 훌륭한 출발점이 될 것입니다. 각 명령어의 다양한 옵션과 하위 명령어들을 --help
플래그를 통해 탐색하며 익숙해지는 것이 중요합니다. 쿠버네티스는 방대하고 강력한 시스템이므로, 꾸준한 학습과 실습을 통해 전문성을 키워나가시길 바랍니다.