쿠버네티스 시작하기(6) - 쿠버네티스 기본 명령어
kubectl은 쿠버네티스 클러스터에서 명령을 내리는 CLI(Command Line Interface)다. 이번 장에서는 쿠버네티스를 운영할 때 가장 많이 쓰이는 kubectl 기본 명령어에 대해서 정리를 할 것이다. 만약 쿠버네티스의 기본 명령어에 대해서 이미 알고 있거나, 실습을 통해서 차근차근히 배워 나가고 싶다면 이번 장은 Skip해도 괜찮을 것 같다.
1. kubectl 기본 문법
kubectl 의 기본 문법은 아래와 같다.
# kubectl [COMMAND] [TYPE] [NAME] [FLAGS]
2. [COMMAND]
하나 혹은 여러 리소스에 대한 Operation을 입력한다.
COMMAND | 설명 | 사용 방법 |
create | 파일이나 stdin으로 리소스 생성 | kubectl create -f FILENAME |
get | 하나 혹은 그 이상의 리소스 정보를 보여준다. | kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] |
run | 클러스터에 특정 이미지 run | run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] |
expose | 특정 리소스를 서비스로 노출. 기본 타입은 ClusterIP이고 쿠버네티스 내부에서만 접근 가능하며, LoadBalancer나 NodePort로 지정하면 외부에서 접근 가능하다 | expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] |
delete | 리소스를 삭제한다 | delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) |
apply | 파일이나 stdin으로 리소스 적용 | apply (-f FILENAME | -k DIRECTORY) |
describe | 특정 리소스나 리소스그룹의 정보를 상세히 보여준다 | describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) |
exec | 컨테이너 안에서 특정 명령어를 실행한다 | exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] |
logs | pod나 특정 리소스의 컨테이너 로그를 출력한다 | logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] |
taint | 한개 혹은 그 이상의 노드의 taint를 변경한다 | taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N |
api-resources | 쿠버네티스 전체 리소스 타입을 출력한다 | |
... | ... | ... |
3 [TYPE]
리소스 타입을 입력한다.
Type | 단축어 |
apiservices | |
certificatesigningrequests | |
clusterrolebindings | |
clusterroles | |
componentstatuses | cs |
configmaps | cm |
controllerrevisions | |
cronjobs | |
customresourcedefinition | crd |
daemonsets | ds |
deployments | deploy |
endpoints | ep |
events | ev |
horizontalpodautoscalers | hpa |
ingresses | ing |
jobs | |
limitranges | |
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 | |
secret | |
serviceaccounts | sa |
services | svc |
statefulsets | |
storageclasses |
4. [NAME]
특정 리소스의 이름을 입력한다. 만약 모든 리소스의 정보를 보고 싶으면 NAME을 선언하지 않으면 된다.
# kubectl get pods
만약 2개 이상의 리소스 정보를 보고 싶으면 리소스 이름을 차례로 입력하면 된다. 예를들면 kube-proxy-jlfwr kube-proxy-p59m8 -n kube-system 두개 리소스 정보를 조회한다면 아래와 같이 입력하면 된다.
# kubectl get pods kube-proxy-jlfwr kube-proxy-p59m8 -n kube-system
만약 여러개의 리소스에 명령어를 적용할 경우 리소스타입/리소스명을 차례로 입력하면 된다. 예를들면 kube-system ㅜnamespaces내에 있는 pods인 kube-proxy-jlfwr과 services인 kube-dns를 조회할 경우 아래와 같이 입력하면 된다.
# kubectl get pods/kube-proxy-jlfwr services/kube-dns -n kube-system
만약 여러개의 파일에 명령어를 적용할 경우 -f 옵션과 파일명을 차례로 입력하면 된다. 예를들면 test.yaml 파일과 test2.yaml파일에 apply 명령어를 적용할 경우 아래와 같이 입력하면 된다.
# kubectl apply -f test.yaml -f test2.yaml
5. [FLAGS]
추가적인 옵션을 입력한다.
FLAG | 설명 |
--all-namespaces | 전체 namespaces |
-n [namespaces명] | 특정 namespaces |
-o wide | pod, node명 등 추가적인 정보 모두 출력 |
-o name | 리소스 이름만 출력 |
-o json | json 형식으로 출력 |
-o yaml | yaml 형식으로 출력 |
예제 :
# kubectl get pods -n kube-system
# kubectl get pods --all-namespace
# kubectl get pods --all-namespaces -o wide
# kubectl get pods --all-namespaces -o yaml
참고
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
https://blog.voidmainvoid.net/146