--- title: kubectl 치트 시트 content_type: concept card: name: reference weight: 30 --- 이 페이지는 일반적으로 사용하는 `kubectl` 커맨드와 플래그에 대한 목록을 포함한다. ## Kubectl 자동 완성 ### BASH ```bash source <(kubectl completion bash) # bash-completion 패키지를 먼저 설치한 후, bash의 자동 완성을 현재 셸에 설정한다 echo "source <(kubectl completion bash)" >> ~/.bashrc # 자동 완성을 bash 셸에 영구적으로 추가한다 ``` 또한, `kubectl`의 의미로 사용되는 약칭을 사용할 수 있다. ```bash alias k=kubectl complete -F __start_kubectl k ``` ### ZSH ```bash source <(kubectl completion zsh) # 현재 셸에 zsh의 자동 완성 설정 echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 자동 완성을 zsh 셸에 영구적으로 추가한다. ``` ## Kubectl 컨텍스트와 설정 `kubectl`이 통신하고 설정 정보를 수정하는 쿠버네티스 클러스터를 지정한다. 설정 파일에 대한 자세한 정보는 [kubeconfig를 이용한 클러스터 간 인증](/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) 문서를 참고한다. ```bash kubectl config view # 병합된 kubeconfig 설정을 표시한다. # 동시에 여러 kubeconfig 파일을 사용하고 병합된 구성을 확인한다 KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view # e2e 사용자의 암호를 확인한다 kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' kubectl config view -o jsonpath='{.users[].name}' # 첫 번째 사용자 출력 kubectl config view -o jsonpath='{.users[*].name}' # 사용자 리스트 조회 kubectl config get-contexts # 컨텍스트 리스트 출력 kubectl config current-context # 현재 컨텍스트 출력 kubectl config use-context my-cluster-name # my-cluster-name를 기본 컨텍스트로 설정 # 기본 인증을 지원하는 새로운 사용자를 kubeconf에 추가한다 kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword # 해당 컨텍스트에서 모든 후속 kubectl 커맨드에 대한 네임스페이스를 영구적으로 저장한다 kubectl config set-context --current --namespace=ggckad-s2 # 특정 사용자와 네임스페이스를 사용하는 컨텍스트 설정 kubectl config set-context gce --user=cluster-admin --namespace=foo \ && kubectl config use-context gce kubectl config unset users.foo # foo 사용자 삭제 ``` ## Kubectl apply `apply`는 쿠버네티스 리소스를 정의하는 파일을 통해 애플리케이션을 관리한다. `kubectl apply`를 실행하여 클러스터에 리소스를 생성하고 업데이트한다. 이것은 프로덕션 환경에서 쿠버네티스 애플리케이션을 관리할 때 권장된다. [Kubectl Book](https://kubectl.docs.kubernetes.io)을 참고한다. ## 오브젝트 생성 쿠버네티스 매니페스트는 JSON이나 YAML로 정의된다. 파일 확장자는 `.yaml` , `.yml`, `.json` 이 사용된다. ```bash 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로부터 리소스(들) 생성 kubectl create deployment nginx --image=nginx # nginx 단일 인스턴스를 시작 kubectl explain pods # 파드 매니페스트 문서를 조회 # stdin으로 다수의 YAML 오브젝트 생성 cat < pod.yaml kubectl attach my-pod -i # 실행중인 컨테이너에 연결 kubectl port-forward my-pod 5000:6000 # 로컬 머신의 5000번 포트를 리스닝하고, my-pod의 6000번 포트로 전달 kubectl exec my-pod -- ls / # 기존 파드에서 명령 실행(한 개 컨테이너 경우) kubectl exec my-pod -c my-container -- ls / # 기존 파드에서 명령 실행(멀티-컨테이너 경우) kubectl top pod POD_NAME --containers # 특정 파드와 해당 컨테이너에 대한 메트릭 표시 ``` ## 노드, 클러스터와 상호 작용 ```bash kubectl cordon my-node # my-node를 스케줄링할 수 없도록 표기 kubectl drain my-node # 유지 보수를 위해서 my-node를 준비 상태로 비움 kubectl uncordon my-node # my-node를 스케줄링할 수 있도록 표기 kubectl top node my-node # 주어진 노드에 대한 메트릭 표시 kubectl cluster-info # 마스터 및 서비스의 주소 표시 kubectl cluster-info dump # 현재 클러스터 상태를 stdout으로 덤프 kubectl cluster-info dump --output-directory=/path/to/cluster-state # 현재 클러스터 상태를 /path/to/cluster-state으로 덤프 # key와 effect가 있는 테인트(taint)가 이미 존재하면, 그 값이 지정된 대로 대체된다. kubectl taint nodes foo dedicated=special-user:NoSchedule ``` ### 리소스 타입 단축명, [API 그룹](/ko/docs/concepts/overview/kubernetes-api/#api-그룹)과 함께 지원되는 모든 리소스 유형들, 그것들의 [네임스페이스](/ko/docs/concepts/overview/working-with-objects/namespaces)와 [종류(Kind)](/ko/docs/concepts/overview/working-with-objects/kubernetes-objects)를 나열: ```bash kubectl api-resources ``` API 리소스를 탐색하기 위한 다른 작업: ```bash 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 그룹의 모든 리소스 ``` ### 출력 형식 지정 특정 형식으로 터미널 창에 세부 사항을 출력하려면, 지원되는 `kubectl` 명령에 `-o` (또는 `--output`) 플래그를 추가한다. 출력 형식 | 세부 사항 --------------| ----------- `-o=custom-columns=<명세>` | 쉼표로 구분된 사용자 정의 열 목록을 사용하여 테이블 출력 `-o=custom-columns-file=<파일명>` | `<파일명>`파일에서 사용자 정의 열 템플릿을 사용하여 테이블 출력 `-o=json` | JSON 형식의 API 오브젝트 출력 `-o=jsonpath=<템플릿>` | [jsonpath](/docs/reference/kubectl/jsonpath) 표현식에 정의된 필드 출력 `-o=jsonpath-file=<파일명>` | <파일명> 파일에서 [jsonpath](/docs/reference/kubectl/jsonpath) 표현식에 정의된 필드 출력 `-o=name` | 리소스 명만 출력하고 그 외에는 출력하지 않음 `-o=wide` | 추가 정보가 포함된 일반-텍스트 형식으로 출력하고, 파드의 경우 노드 명이 포함 `-o=yaml` | YAML 형식의 API 오브젝트 출력 `-o=custom-columns` 의 사용 예시: ```bash # 클러스터에서 실행 중인 모든 이미지 kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image' # "k8s.gcr.io/coredns:1.6.2" 를 제외한 모든 이미지 kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image' # 이름에 관계없이 메타데이터 아래의 모든 필드 kubectl get pods -A -o=custom-columns='DATA:metadata.*' ``` 더 많은 예제는 kubectl [참조 문서](/ko/docs/reference/kubectl/overview/#custom-columns)를 참고한다. ### Kubectl 출력 로그 상세 레벨(verbosity)과 디버깅 Kubectl 로그 상세 레벨(verbosity)은 `-v` 또는`--v` 플래그와 로그 레벨을 나타내는 정수로 제어된다. 일반적인 쿠버네티스 로깅 규칙과 관련 로그 레벨이 [여기](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)에 설명되어 있다. 로그 레벨 | 세부 사항 --------------| ----------- `--v=0` | 일반적으로 클러스터 운영자(operator)에게 *항상* 보여지게 하기에는 유용함. `--v=1` | 자세한 정보를 원하지 않는 경우, 적절한 기본 로그 수준. `--v=2` | 서비스와 시스템의 중요한 변화와 관련이있는 중요한 로그 메시지에 대한 유용한 정상 상태 정보. 이는 대부분의 시스템에서 권장되는 기본 로그 수준이다. `--v=3` | 변경 사항에 대한 확장 정보. `--v=4` | 디버그 수준 상세화. `--v=6` | 요청한 리소스를 표시. `--v=7` | HTTP 요청 헤더를 표시. `--v=8` | HTTP 요청 내용을 표시. `--v=9` | 내용을 잘라 내지 않고 HTTP 요청 내용을 표시. ## {{% heading "whatsnext" %}} * [kubectl 개요](/ko/docs/reference/kubectl/overview/)를 읽고 [JsonPath](/docs/reference/kubectl/jsonpath)에 대해 배워보자. * [kubectl](/docs/reference/kubectl/kubectl/) 옵션을 참고한다. * 재사용 스크립트에서 kubectl 사용 방법을 이해하기 위해 [kubectl 사용법](/docs/reference/kubectl/conventions/)을 참고한다. * 더 많은 커뮤니티 [kubectl 치트시트](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)를 확인한다.