Kubectl 기초
[ 개념 ]
- kubectl은 사용자가 쉽게 마스터와 통신할 수 있게 해주는 k8s 클라이언트 툴
- k8s 클러스터를 컨트롤하기 위한 명령툴
- k8s의
api서버
는 REST API로 통신하지만, 보다 쉽게 사용자가 k8s를 제어할 수 있게 도와준다
- 꼭 마스터 노드에 위치할 필요는 없다
[ Pod 생성 ]
[ 개요 ]
- Pod 및 Object를 생성하는 3가지 방법
kubectl run
kubectl create
kubectl apply
[ kubectl run ]
- command 형식 :
kubectl run <NAME> --image <IMAGE>
- 설명
명령형 스타일
의 단순 명령 / 1개의 단일 Pod를 생성
- 단점
- 1개의 단일 파드만 생성하는 사용의 제약이 존재
- 실행중인 오브젝트의 설정을 변경하려면 ?
kubectl edit
으로 설정 파일의 내용 변경 -> 실시간 반영?
kubectl replace
로 컨테이너를 덮어씌우기 -> 중단되는 시간이 생김
kubectl run mynginx --image nginx
[ kubectl create ]
- command 형식 :
kubectl create <Object 타입> [<서브 타입>] <NAME>
- 설명
명령형 스타일
/ 선언형 스타일
모두 가능한 명령
<서브 타입>
은 Service
Object의 ClusterIP
/ NodePort
같은 것을 의미
- 단점
- 명령형 커맨드 방식은 오브젝트 구성 manifest 파일을 기록하는 추가적인 수단이 필요 (관리)
- 실행중인 오브젝트의 설정을 변경하려면 ?
kubectl edit
으로 설정 파일의 내용 변경 -> 실시간 반영?
kubectl replace
로 컨테이너를 덮어씌우기 -> 중단되는 시간이 생김
kubectl create deployment nginx --image nginx
kubectl create -f nginx.yaml
kubectl replace -f nginx.yaml
[ kubectl apply ]
- command 형식 :
kubectl apply -f <FILE_NAME>
- 설명
선언형 오브젝트 구성
/ 정해진 manifest
파일의 규격으로 Pod 및 Object 생성
apply
선언형 명령 하나로 create
/ replace
/ scale
등의 명령형 명령의 역할을 수행 가능
=> 가장 선호되는 Object 관리 방식
apply
로 실행된 Pod 및 오브젝트는 수정이 가능
kubectl apply -f mynginx.yaml
kubectl apply -f https:://.../pods/simple-pod.yaml
[ 주의해야할 점 ]
[ Pod 조회 ]
kubectl get <Object 타입>
명령을 통해 Pod 및 Object 조회 가능
- Pod가 가질 수 있는 상태
Pending
: k8s 마스터에 의해 생성 명령은 전달되었지만, 아직 실행되지 않은 상태
ContainerCreating
: 특정 노드에 스케줄링되어 컨테이너를 생성중인 단계
Running
: Pod가 정상적으로 실행되고 있는 상태
Completed
: 계속 실행되는 프로세스가 아닌, 일회성으로 완료는 Pod의 완료를 의미
Error
: Pod에 문제가 생겨 에러가 발생한 상태
CrashLoopBackOff
: 지속적으로 에러 상태로 있어 crash가 반복되는 상태
kubectl get pod
kubectl get pod mynginx -o yaml
kubectl get pod -o wide
혹은
kubectl get pod -owide
kubectl get pod mynginx -n kube-system
kubectl get node master -o jsonpath="{.status.address[0].address}"
kubectl get node
kubectl get pod -n kube-system
kubectl cluster-info
[ 모든 리소스 조회 ]
- command 형식 :
kubectl api-resources
- 설명
- 존재하는 모든 리소스들을 출력
- 출력시 보이는
NAMESPACED
column
은 namespace 레벨
의 리소스인지의 여부
=> Pod
/ Service
/ Deployment
등은 namespace 레벨
의 리소스
kubectl api-resources --namespaced=true
[ Pod 상세정보 확인 ]
- command 형식 :
kubectl describe pod <NAME>
- 설명
- Pod 및 Object에 대한 리소스의 자세한 상태를 표시
kubectl get
과 유사하지만 Pod에 대한 Events 기록
까지 확인 가능
kubectl get
과 함께 디버깅 용도로 사용
kubectl describe pod mynginx
[ Pod의 컨테이너의 로그 확인 ]
- command 형식 :
kubectl logs <NAME>
- 설명 : Pod에 존재하는 컨테이너에 대한 로그를 출력하는 명령
kubectl logs -f mynginx
[ Pod의 컨테이너에 명령 전달 ]
- command 형식 :
kubectl exec <NAME> -- <CMD>
- 설명
- 실행중인 컨테이너에 명령을 전달할 때 사용
docker exec
명령과 유사하며, 구분자(--
)로 전달할 명령을 구분
kubectl exec mynginx -- apt-get update
kubectl exec -it mynginx -- bash
[ 컨테이너 및 호스트간 파일 복사 ]
- command 형식 :
kubectl cp <TARGET> <SOURCE>
- 설명
- 컨테이너 안의 파일 위치를 표현할 때는
<CONTAINER_NAME>:<PATH>
형식으로 표기
kubectl cp /etc/passwd mynginx:/tmp/passwd
[ Pod manifest 편집 & 업데이트 ]
- command 형식 :
kubectl edit pod <NAME>
- 설명
- 실행된 컨테이너의 정보를 수정
- vim과 같은 에디터가 열리며,
kubectl get pod -oyaml
로 확인한 Object의 manifest파일
을 수정할 수 있다
- 파일을 저장하면, 수정한 내용이 실제 컨테이너에 반영된다
kubectl edit pod mynginx
[ Pod 삭제 ]
- command 형식 :
kubectl delete <Object 타입> <NAME>
- 설명
kubectl delete pod mynginx
kubectl delete -f pod.yaml
kubectl delte pods,services -l <label-key>=<label-value>