1) apply
$ kubectl apply -f {파일명 혹은 URL}
2) get
$ kubectl get {타입}
$ kubectl get {타입},{타입}
$ kubectl get all
$ kubectl get {타입} -o {원하는 포멧}
$ kubectl get {타입} -show-labels
- 이와 같은 방식으로 활용할 수 있다.
- 위에서 apply로 생성해둔 리소스를 바탕으로 실습해보자.
1. Pod 조회
- kubectl get pod

- kubectl은 영리해서 복수형 및 축약형도 다 알아먹는다.
- ex) kubectl get pods 혹은 kubectl get po
2. 여러 타입 조회
- kubectl get pod,service

- 3개 이상의 타입도 가능하다.
- ex) kubectl get pod,service,deployment
- service의 축약형은 svc, deployment는 deploy다.
- ex) kubectl get po,svc,deploy
3. 전체 타입 조회
- kubectl get all

- Pod, ReplicaSet, Deployment, Service, Job 까지 모든 컴포넌트를 조회한다.
4. 출력 포맷 변경
- kubectl get pod -o json

- 캡쳐 내용이 너무 길어서 적당히 생략했지만, 이처럼 -o 옵션을 사용하면 원하는 형태로 변경하여 볼 수 있다.
- yml과 wide 형식으로 보려면 아래와 같다.
- ex) kubectl get pod -o yaml
- ex) kubectl get pod -o wide
5. 레이블 확인
- kubectl get pod --show-labels

- 이외에도 다양한 옵션이 존재한다.
- 옵션은 필요할 때 공식문서를 통해 학습 및 적용하면 된다.
3) describe
$ kubectl describe {타입}/{리소스 이름}
$ kubectl describe {타입} {리소스 이름}
- 리소스의 상세한 상태를 확인할 수 있다.
- get으로 일단 리소스를 조회하여 리소스 이름을 확인한 뒤 적용해야한다.
1. 리소스 상세 조회
- kubectl describe pod/wordpress-mysql-5447bfc5b-n6gz2

- status, labels, ip, container, volumes 등 리소스에 대한 디테일한 확인이 가능하다.
- kubectl describe pod wordpress-mysql-5447bfc5b-n6gz2 형태도 같은 결과를 출력한다.
4) delete
$ kubectl delete {타입}/{리소스 이름}
$ kubectl delete {타입} {리소스 이름}
$ kubectl delete -f {리소스 파일명}
- 특정 리소스를 제거할 수 있다.
- 마찬가지로 get으로 일단 리소스를 조회하여 리소스 이름을 확인한 뒤 적용해야한다.
- kubectl delete -f {리소스 파일명}을 적용하면, 리소스 전체 제거할 수도 있다.
1. 리소스 제거
- kubectl delete pod/wordpress-mysql-5447bfc5b-n6gz2

- 제거되었다는 결과가 나왔음에도 get 조회 시에 남아있다. 이상하게 느껴지겠지만 pod를 제거해도 되살아나는 게 일반적이다.
- 이는 ReplicaSet 때문이다. ReplicaSet는 원본의 유실을 고려해서 최초 생성 시 여러개를 만들어두는 개념이다. 이게 pod의 개수를 유지해주는 역할을 한다.
- 추후 ReplicaSet에 대해서도 더 다룰 예정이다.
5) logs
$ kubectl logs [파드 이름]
$ kubectl logs -f [파드 이름]
$ kubectl logs [파드 이름] -c [컨테이너 이름]
- get 조회로 확인한 Pod명으로 로그 조회를 할 수 있다.
- 하나의 Pod에 여러 개의 컨테이너가 있는 경우는 -c 옵션으로 컨테이너를 지정해서 로그를 볼 수 있다.
- 실시간 로그를 보고 싶다면 -f 옵션을 이용하면 된다.
1. Pod 로그 조회
- kubectl logs wordpress-74757b6ff-6fhcm

- 로그 조회 결과이다.
- 로그를 보고 바로 터미널로 빠져나온다.
2. Pod 실시간 로그 조회
- kubectl logs -f wordpress-74757b6ff-6fhcm

- 실시간 로그 조회 결과이다.
- 터미널로 빠져나오지 않고 머무른다.
3. Pod 내 컨테이너 지정 로그 조회
- kubectl logs wordpress-74757b6ff-6fhcm -c wordpress

- logs 파드명 + c옵션 컨테이너명 을 순차로 입력해주면 된다.
- 참고로 해당 실습 pod엔 컨테이너가 하나 뿐이긴 했지만 2개 이상이어도 문제 없이 잘 작동한다.
6) exec
$ kubectl exec {파드 이름} -- {커맨드}
$ kubectl exec -it {파드 이름} -- {커맨드}
- 컨테이너에 명령어를 전달하는 역할이다. docker에서 사용되는 exec과 흡사하다.
- 당연한 얘기지만 get pod로 파드 이름부터 체크해야 명령어 전달이 가능하다.
- 주로 컨테이너에 접속하는 용도로 사용된다.
- 쉘로 접속하여 컨테이너 상태를 확인하는 경우에 -it 옵션을 사용하면 된다.
- 여러 개의 컨테이너가 있는 경우엔 -c 옵션으로 컨테이너를 지정할 수도 있다.
1. Pod 컨테이너 파일리스트 확인
- kubectl exec wordpress-74757b6ff-6fhcm -- ls

- 파드에 명령어를 전달하여, 파드가 가진 파일 목록을 체크하였다. docker exec과 정말로 별반 다를 게 없다.
2. Pod 컨테이너 접속
- kubectl exec -it wordpress-74757b6ff-6fhcm -- bash

- -it 옵션을 통해 집적 쉘로 접속해보았다.
- 접속 이후엔 ls만 입력해도 파일리스트 확인이 가능하다.
7) config
$ kubectl config {커맨드}
- kubectl은 여러 개의 쿠버네티스 클러스터를 context로 설정하고 필요에 따라 선택할 수 있다. (참고: minikube를 클러스터라고도 하고 minikube로 만드는 것도 클러스터라고 부른다.)
- 현재 어떤 컨텍스트로 설정되어 있는지 확인하고 원하는 컨텍스트를 지정할 수도 있다.
- 그밖에 다양한 커맨드가 있다.

- 위 캡쳐를 참고하여, kubectl config {커맨드} 형태로 사용하면 된다.
- 실습은 생략하기로 하겠다.
8) 기타 명령어
$ kubectl api-resources
$ kubectl explain pod
- kubectl api-resources: 전체 api 리소스 종류를 확인할 수 있다.
- kubectl explain pod: 특정 api 리소스 설명을 볼 수 있다.
- 이 밖에도 매우 다양한 kubectl 커맨드가 있으나, 전부 다룰 수는 없다. 필요에 따라 학습하고 적용하는 게 옳다.