kubectl 기본 명령어
💾 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
만약 도커 커맨드 라인 도구에 익숙하다면 링크를 통해 간단히 비교할 수 있습니다.
댓글남기기