[Kubernetes] 4.kubectl은 커맨드 라인 도구이다.
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
- <kubenetes 기초 활용: Kubenetes 완벽 이해 1탄 by code.presso() 커피고래님 강의>
- 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 (https://github.com/sysnet4admin/_Book_k8sInfra)
- Kubernetes Docs (https://kubernetes.io/ko/docs)