kubectl은 쿠버네티스 클러스터에 명령을 내리는 CLI(command line interface)입니다.
kubectl 문법
terminal window에서 아래와 같은 명령어로 kubectl을 동작 가능합니다.
kubectl [COMMAND] [TYPE] [NAME] [FLAGS]
- COMMAND : create, get, describe와 같이 하나 혹은 여러개의 리소스에 대한 operation 종류를 선언합니다.
- TYPE : resource type(설명 바로가기)에 대해 선언합니다. 리소스 타입은 case-sensitive하고 아래와 같이 선언 가능합니다.
$ kubectl get pod pod1
$ kubectl get pods pod1
$ kubectl get po pod1
- NAME : 특정 리소스의 이름을 선언합니다. 이름은 case-sensitive합니다. 만약 모든 리소스에 대한 내용을 보고싶다면 아래와 같이 선언합니다.
$ kubectl get pods
만약 여러 리소스들에 대해 한번에 명령을 내리고 싶다면 아래와 같이 선언하면 됩니다.
(1) 똑같은 operation을 여러 같은 type의 리소스에 명령할 경우 : TYPE1 name1 name2 ...
$ kubectl get pod example-pod1 example-pod
(2) 똑같은 operation을 각기 다른 type의 리소스에 명령할 경우 : TYPE1/name1 TYPE1/name2 TYPE2/name3 ...
$ kubectl get pod/example-pod1 replicationcontroller/example-rc1
(3) 똑같은 operation을 여러 다른 file의 리소스에 명령할 경우 : -f file1 -f file2 ...
$ kubectl get pod -f ./pod.yaml
- FLAGS : 추가적인 option을 선언합니다.
명령어[COMMAND] 종류
kubectl의 명령어 종류와 문법을 간략히 설명합니다.
추가적으로 더 자세한 내용은 kubectl 레퍼런스(바로가기)를 살펴보세요.
명령어 |
문법 | 설명 |
---|---|---|
annotate |
kubectl annotate (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] |
하나 혹은 여러 리소스에 주석을 추가/업데이트 |
api-versions |
kubectl api-versions [flags] |
사용가능한 API version 조회 |
apply |
kubectl apply -f FILENAME [flags] |
변경된 리소스 수정 적용하기 |
attach |
kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
현재 실행중인 컨테이너에 접속 혹은 output stream 확인 |
autoscale |
kubectl autoscale (-f FILENAME \| TYPE NAME \| TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] |
RC(replication controller)을 활용하여 pod auto scale 기능 활성화 |
cluster-info |
kubectl cluster-info [flags] |
쿠버네티스 클러스터에 정보조회 |
config |
kubectl config SUBCOMMAND [flags] |
kubeconfig 파일 수정 |
create |
kubectl create -f FILENAME [flags] |
리소스 file 생성 |
delete |
kubectl delete (-f FILENAME \| TYPE [NAME \| /NAME \| -l label \| --all]) [flags] |
생성(활성화된) 리소스 제거 |
describe |
kubectl describe (-f FILENAME \| TYPE [NAME_PREFIX \| /NAME \| -l label]) [flags] |
리소스 상태 조회 |
edit |
kubectl edit (-f FILENAME \| TYPE NAME \| TYPE/NAME) [flags] |
리소스에 대해 수정 및 적용 |
exec |
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] |
pod 내부의 컨테이너에 명령어 날리기 |
explain |
kubectl explain [--include-extended-apis=true] [--recursive=false] [flags] |
리소스(pod, node, service) 에 대한 documentation 확인 |
expose |
kubectl expose (-f FILENAME \| TYPE NAME \| TYPE/NAME) [--port=port] [--protocol=TCP\|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=external-ip-of-service] [--type=type] [flags] |
rc, service, pod 조회(?) |
get |
kubectl get (-f FILENAME \| TYPE [NAME \| /NAME \| -l label]) [--watch] [--sort-by=FIELD] [[-o \| --output]=OUTPUT_FORMAT] [flags] |
리소스 리스트 조회 |
label |
kubectl label (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] |
리소스 label 업데이트 혹은 추가기능 |
logs |
kubectl logs POD [-c CONTAINER] [--follow] [flags] |
pod 내부 container 로그확인 |
patch |
kubectl patch (-f FILENAME \| TYPE NAME \| TYPE/NAME) --patch PATCH [flags] |
리소스의 일부 attribute를 수정, 적용 |
port-forward |
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
포트포워딩 기능 |
proxy |
kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] |
쿠버네티스에 프록시 설정 |
replace |
kubectl replace -f FILENAME |
리소스 재구성(새로 적용) |
rolling-update |
kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE \| -f NEW_CONTROLLER_SPEC) [flags] |
롤링 업데이트 수행 기능 |
run |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] |
클러스터에 특정 이미지 run |
scale |
kubectl scale (-f FILENAME \| TYPE NAME \| TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] |
RC의 replication 갯수 업데이트 |
stop |
kubectl stop |
더 이상 사용하지 않음 kubectl delete 사용! . |
version |
kubectl version [--client] [flags] |
쿠버네티스 버젼 확인 |
리소스[RESOURCE] 종류
kubectl에 적용 가능한 쿠버네티스 리소스 종류와 단축어 리스트 입니다.
리소스 종류 | 단축어 |
---|---|
apiservices |
|
certificatesigningrequests |
csr |
clusters |
|
clusterrolebindings |
|
clusterroles |
|
componentstatuses |
cs |
configmaps |
cm |
controllerrevisions |
|
cronjobs |
|
customresourcedefinition |
crd |
daemonsets |
ds |
deployments |
deploy |
endpoints |
ep |
events |
ev |
horizontalpodautoscalers |
hpa |
ingresses |
ing |
jobs |
|
limitranges |
limits |
namespaces |
ns |
networkpolicies |
netpol |
nodes |
no |
persistentvolumeclaims |
pvc |
persistentvolumes |
pv |
poddisruptionbudget |
pdb |
podpreset |
|
pods |
po |
podsecuritypolicies |
psp |
podtemplates |
|
replicasets |
rs |
replicationcontrollers |
rc |
resourcequotas |
quota |
rolebindings |
|
roles |
|
secrets |
|
serviceaccounts |
sa |
services |
svc |
statefulsets |
|
storageclasses |
Output 옵션
kubectl으로 얻은 여러 정보들을 file로 저장하기를 원할 수 있다. 이때 아래와 같은 옵션으로 추출 가능합니다.
kubectl [command] [TYPE] [NAME] -o=<output_format>
output_format으로 아래와 같은 format들을 지원.
Output 포맷 |
설명 |
---|---|
-o=custom-columns=<spec> |
comma로 구분가능한 custom형식의 table을 조회 |
-o=custom-columns-file=<filename> |
comma로 구분가능한 custom형식의 table을 file로 저장 |
-o=json |
json 형식의 API obejct로 저장 |
-o=jsonpath=<template> |
jsonpath 형식으로 조회 |
-o=jsonpath-file=<filename> |
jsonpath 형식으로 file로 저장 |
-o=name |
리소스 이름만 조회 |
-o=wide |
pod, node 이름 등 추가적인 정보 모두 조회 |
-o=yaml |
yaml 형식의 API object로 저장 |
output 옵션 예제
$ kubectl get pod web-pod-13je7 -o=yaml
kubectl 예제
kubectl create
// example-service.yaml 파일이름의 서비스를 생성합니다.
$ kubectl create -f example-service.yaml
// example-controller.yaml 파일이름의 RC를 생성합니다.
$ kubectl create -f example-controller.yaml
kubectl get
// pod list를 출력
$ kubectl get pods
// pod list(+ 추가적인 정보 node 이름 등)를 출력
$ kubectl get pods -o wide
// 특정 <rc-name>의 정보를 출력
$ kubectl get replicationcontroller <rc-name>
// 모든 rc, service들 정보를 출력
$ kubectl get rc,services
// 모든 ds(daemon sets)에 대한 정보를 출력(uninitialized ds도 포함)
$ kubectl get ds --include-uninitialized
// 특정 node(server01)에 배포된 pod 정보를 출력
$ kubectl get pods --field-selector=spec.nodeName=server01
kubectl describe
// 특정 <node-name>의 node 정보 출력
$ kubectl describe nodes <node-name>
// 특정 <pod-name>의 pod 정보 출력
$ kubectl describe pods/<pod-name>
// 특정 <rc-name>의 rc가 제어하는 pod들 정보 출력
$ kubectl describe pods <rc-name>
// 모든 pod 정보 출력(uninitialized pod은 제외)
$ kubectl describe pods --include-uninitialized=false
kubectl delete
// pod.yaml로 선언된 pod들을 제거
$ kubectl delete -f pod.yaml
// 특정 <label-name>이 정의된 pod, service들 제거
$ kubectl delete pods,services -l name=<label-name>
// 특정 <label-name>이 정의된 pod, service들 제거(uninitialized pod, service 포함)
$ kubectl delete pods,services -l name=<label-name> --include-uninitialized
// 모든 pod
$ kubectl delete pods --all
kubectl exec
// 특정 <pod-name>을 가진 pod의 첫번째 container에 'date' 라는 명령어 호출
$ kubectl exec <pod-name> date
// 특정 <pod-name>을 가진 pod의 특정 <container-name>이라는 이름의 container에 'date' 라는 명령어 호출
$ kubectl exec <pod-name> -c <container-name> date
// 특정 <pod-name>을 가진 pod의 첫번째 container에 bash shell실행
$ kubectl exec -ti <pod-name> /bin/bash
kubectl logs
// 특정 <pod-name> 이름을 가진 pod의 로그 조회
$ kubectl logs <pod-name>
// 특정 <pod-name> 이름을 가진 pod의 로그 tail -f 조회
$ kubectl logs -f <pod-name>
출처 : 쿠버네티스 kubectl overview - https://kubernetes.io/docs/reference/kubectl/overview/
'DevOps > 쿠버네티스' 카테고리의 다른 글
쿠버네티스, 물리장비에 올릴까? 가상장비에 올릴까? 머신별 장단점 알아보기. (250) | 2019.04.18 |
---|---|
Elasticsearch와 Kibana, filebeat 를 활용한 쿠버네티스 로깅 아키텍쳐 (1067) | 2018.08.29 |
쿠버네티스 Multi-container pod 종류 및 예제 (931) | 2018.07.08 |
쿠버네티스 로그 아키텍쳐 개요 및 방법 (1257) | 2018.07.05 |
쿠버네티스 RBAC(Role-based Access Control) 상세 설명 및 예제 (1234) | 2018.06.26 |
[쿠버네티스 기초]spring boot rest application POD 배포하기(part2) (1069) | 2018.06.26 |