💾 kubectl 기본명령어를 정리한 내용입니다.


apply

원하는 리소스의 상태를 YAML로 작성하고 apply 명렁어로 선언합니다.

kubectl apply -f [파일명 또는 URL]
kubectl apply -f ./my-manifest.yaml        # 리소스(들) 생성
kubectl apply -f ./my1.yaml -f ./my2.yaml  # 여러 파일로 부터 생성
kubectl apply -f ./dir                     # dir 내 모든 매니페스트 파일에서 리소스(들) 생성 
kubectl apply -f https://git.io/vPieo      # url로부터 리소스(들) 생성



get

리소스 목록 보기. 출력 형태를 변경할 수 있는 -o와 레이블을 확인할 수 있는 --show-labels를 함께 사용할 수 있습니다.

kubectl get [TYPE]
# 기본 출력을 위한 Get 커맨드
kubectl get services                      # 네임스페이스 내 모든 서비스의 목록 조회
kubectl get pods --all-namespaces         # 모든 네임스페이스 내 모든 파드의 목록 조회
kubectl get pods -o wide                  # 해당하는 네임스페이스 내 모든 파드의 상세 목록 조회
kubectl get deployment my-dep             # 특정 디플로이먼트의 목록 조회
kubectl get pods                          # 네임스페이스 내 모든 파드의 목록 조회
kubectl get pod my-pod -o yaml            # 파드의 YAML 조회



describe

쿠버네티스에 선언된 리소스의 상세한 상태를 확인합니다. 특정 리소스의 상태가 궁금하거나 생성이 실패한 이유를 확인할 때 주로 사용합니다.

kubectl describe [TYPE]/[NAME] 또는 [TYPE] [NAME]
kubectl get pod                                 # Pod 조회로 이름 검색
kubectl describe pod/wordpress-5f59577d4d-8t2dg # 조회한 이름으로 상세 확인



delete

쿠버네티스에 선언된 리소스를 제거합니다.

kubectl delete [TYPE]/[NAME] 또는 [TYPE] [NAME]
kubectl get pod                                # Pod 조회로 이름 검색
kubectl delete pod/wordpress-5f59577d4d-8t2dg  # 조회한 Pod 제거
kubectl delete deploy deploymentname -n namespacename



logs

컨테이너의 로그를 확인합니다. 실시간 로그를 보고 싶다면 -f 옵션을 이용합니다. 하나의 Pod에 여러 개의 컨테이너가 있는 경우는 -c 옵션으로 컨테이너를 지정해야 합니다.

kubectl logs [POD_NAME]
kubectl get pod                              # Pod 조회로 이름 검색
kubectl logs wordpress-5f59577d4d-8t2dg      # 조회한 Pod 로그조회
kubectl logs -f wordpress-5f59577d4d-8t2dg   # 실시간 로그 보기
kubectl logs my-pod -c my-container          # 멀티-컨테이너 경우



exec

컨테이너에 명령어를 전달합니다. 쉘로 접속하여 컨테이너 상태를 확인하는 경우에 -it 옵션을 사용합니다. 여러 개의 컨테이너가 있는 경우엔 -c 옵션으로 컨테이너를 지정합니다.

kubectl exec [-it] [POD_NAME] -- [COMMAND]
kubectl get pod                                        # Pod 조회로 이름 검색
kubectl exec -it wordpress-5f59577d4d-8t2dg -- bash    # 조회한 Pod의 컨테이너에 접속
kubectl exec my-pod -c my-container -- ls /            # 멀티-컨테이너 경우



config

kubectl이 통신하고 설정 정보를 수정하는 쿠버네티스 클러스터를 지정합니다.

kubectl config get-contexts             # 컨텍스트 리스트 출력
kubectl config current-context          # 현재 컨텍스트 확인
kubectl config use-context minikube     # 기본 컨텍스트로 설정



api-resources

API 리소스를 탐색합니다.

kubectl api-resources                        # 전체 오브젝트 종류 확인
kubectl api-resources --namespaced=true      # 네임스페이스를 가지는 모든 리소스
kubectl api-resources --namespaced=false     # 네임스페이스를 가지지 않는 모든 리소스
kubectl api-resources -o name                # 모든 리소스의 단순한 (리소스 이름만) 출력
kubectl api-resources -o wide                # 모든 리소스의 확장된 ("wide"로 알려진) 출력
kubectl api-resources --verbs=list,get       # "list"와 "get"의 요청 동사를 지원하는 모든 리소스 출력
kubectl api-resources --api-group=extensions # "extensions" API 그룹의 모든 리소스



explain

특정 오브젝트 설명을 확인합니다.

kubectl explain pods           # 파드 매니페스트 문서를 조회



cp

로컬에서 컨테이너로, 컨테이너에서 로컬로 파일과 디렉터리를 복사합니다.

kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir            # 로컬 디렉토리 /tmp/foo_dir 를 현재 네임스페이스의 my-pod 파드 안의 /tmp/bar_dir 로 복사
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container    # 로컬 파일 /tmp/foo 를 my-pod 파드의 my-container 컨테이너 안의 /tmp/bar 로 복사
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar       # 로컬 파일 /tmp/foo 를 my-namespace 네임스페이스의 my-pod 파드 안의 /tmp/bar 로 복사
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar       # my-namespace 네임스페이스의 my-pod 파드 안의 파일 /tmp/foo 를 로컬의 /tmp/bar 로 복사



출력 형식 지정

특정 형식으로 터미널 창에 세부사항을 출력하려면, kubectl 명령에 -o (또는 --output) 플래그를 추가합니다.

출력 형식 세부 사항
-o=custom-columns=<명세> 쉼표로 구분된 사용자 정의 열 목록을 사용하여 테이블 출력
-o=custom-columns-file=<파일명> <파일명>파일에서 사용자 정의 열 템플릿을 사용하여 테이블 출력
-o=json JSON 형식의 API 오브젝트 출력
-o=jsonpath=<템플릿> https://kubernetes.io/ko/docs/reference/kubectl/jsonpath 표현식에 정의된 필드 출력
-o=jsonpath-file=<파일명> <파일명> 파일에서 https://kubernetes.io/ko/docs/reference/kubectl/jsonpath 표현식에 정의된 필드 출력
-o=name 리소스 명만 출력하고 그 외에는 출력하지 않음
-o=wide 추가 정보가 포함된 일반-텍스트 형식으로 출력하고, 파드의 경우 노드 명이 포함
-o=yaml YAML 형식의 API 오브젝트 출력

사용방법

$ kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file
|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns
|custom-columns-file|wide] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]
# 클러스터에서 실행 중인 모든 이미지
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'

# `default` 네임스페이스의 모든 이미지를 파드별로 그룹지어 출력
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"

 # "registry.k8s.io/coredns:1.6.2" 를 제외한 모든 이미지
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="registry.k8s.io/coredns:1.6.2")].image'

# 이름에 관계없이 메타데이터 아래의 모든 필드
kubectl get pods -A -o=custom-columns='DATA:metadata.*'

도커 사용자를 위한 kubectl
만약 도커 커맨드 라인 도구에 익숙하다면 링크를 통해 간단히 비교할 수 있습니다.




참고사이트

댓글남기기