[Kubernetes] 4.kubectl은 커맨드 라인 도구이다.

2 minute read

kubectl은 커맨드 라인 도구이다.

컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 도서를 읽고 정리한 내용입니다.

<kubenetes 기초 활용: Kubenetes 완벽 이해 1탄> 강의를 듣고 정리한 내용입니다.

kubectl

kubectl은 API 서버를 통해 쿠버네티스 클러스터에 명령을 내리고 제어한다.

바이너리 파일로 배포되기 때문에 어디든지 위치할 수 있다.

API 서버의 정보만 알고 있다면 어디서든 클러스터를 제어할 수 있다.

kubectl 은 kubeconfig 파일을 사용하여 클러스터의 선택과 클러스터의 API 서버와의 통신에 필요한 정보를 찾는다.

참고로, 클러스터에 대한 접근을 구성하는 데 사용되는 파일을 kubeconfig 파일이라 한다. 이는 구성 파일을 참조하는 일반적인 방법을 의미한다. kubeconfig라는 이름의 파일이 있다는 의미는 아니다.

기본적으로 kubectl은 $HOME/.kube 디렉터리에서 config라는 이름의 파일을 찾는다. 

하지만, KUBECONFIG 환경 변수를 설정하거나 -kubeconfig 플래그를 지정해서 다른 kubeconfig 파일을 사용할 수 있다. (ex. kubectl get nodes -kubeconfig /etc/kubernetes/admin.config)

kubectl 기본 명령어

pod 실행하기

kubectl run {pod name} --image {image name} --restart Never
# pod/{pod name} created

pod 조회하기

kubectl get pod {pod name}
# name ready status restarts age

yaml 정의서 확인하기

kubectl get pod {pod name} -oyaml

pod 상태 확인 (events 등)

kubectl describe pod {pod name}

pod 명령 전달하기

kubectl exec {pod name} -- apt update
kubectl exec {pod name} -- apt install -y wget
kubectl exec {pod name} -- wget localhost

로그 확인

kubectl logs {pod name}
kubectl logs {pod name} -f #tailing

‘로컬 호스트 - pod’ 간 파일 복사

kubectl exec {pod name} --ls -al /
kubectl cp {local file path} {pod name}:{path}
kubectl exec {pod name} --ls -al /
# local에 지정한 파일이 pod 안에 지정 경로로 복사된 것을 확인 

kubectl cp {pod name}:{path} {local path}
# pod 안에 지정한 파일이 local 경로로 복사된 것을 확인

pod 수정하기

kubectl edit pod {pod name}
# vim editer 실행, 실행중인 pod의 yaml 수정가능
kubectl get pod {pod name} -oyaml
# 변경사항 적용 확인

pod 삭제하기

kubectl delete pod {pod name}
# pod "{pod name}" deleted

네임스페이스

kubectl get pod --namespace kube-system # -n kube-system
# pod 생성/조회 시 -n 옵션을 주지 않으면 'default' 네임스페이스 사용됨

라벨 부여하기

kubectl get node
# name status roles age version
kubectl label node master color=red
# node/master labeled
kubectl get node master -oyaml

kubectl 고급 명령어 팁

모든 것이 다 리소스

kubectl get <resource> # namespace, node, pod, service
kubectl api-resources
# name shortnames apigroup namespaced kind

특정 field 값 추출

kubectl run {pod name} --image {image name} --restart Never
kubectl get pod
kubectl get pod {pod name} -o jsonpath="{ .spec.containers[0].image }"

자동 완성

echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

사용자 인증 파일

kubectl config view # vim ~/.kube/config

쿠버네티스 클러스터에서 client 서버에서 마스터 서버로 요청을 보내려면 ip 주소 및 인증 정보가 client 서버에 필요하다.

인증 정보의 경로는 ~/.kube/config 이다.

  • 사용자 인증 파일 예시
apiVerson: v1
kind: Config
clusters:
- cluster:
		certificate-authority-data: <base64-certificate>
		server: https://127.0.0.1:6443 # kubernetes default port
 name: default
users:
- name: default
	user:
		password: flkaje345j2l43m3kjl423j4lk2j34k
		username: admin
contexts:
- context:
		cluster: default
		user: default
  name: default
current-context: default # 여러개의 user/cluster 일 때 context 선택가능

클러스터 상태 체크

kubectl cluster-info

Cheat sheet

https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/


Reference