Kubernetes

[Kubernetes] kubectl 명령어 정리

daeunnniii 2022. 4. 8. 14:55
728x90
반응형

 

1. kubectl 개요

Kubectl은 쿠버네티스 클러스터를 제어하기 위한 커맨드 라인 도구이다.

kubectl 은 config 파일을 $HOME/.kube 에서 찾을 수 있다.

KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 설정하여 다른 kubeconfig 파일을 지정할 수 있다.

* 참고: 클러스터에 대한 접근을 구성하는 데 사용되는 파일을 kubeconfig 파일 이라 한다. kubeconfig 파일들을 사용하여 클러스터, 사용자, 네임스페이스 및 인증 메커니즘에 대한 정보를 관리할 수 있다.


2. kubectl 구문

kubectl 명령어의 형태는 기본적으로 다음과 같다.

kubectl [command] [TYPE] [NAME] [flags]

command: 하나 이상의 리소스에서 수행하려는 동작을 지정한다.

ex1) create: 생성

ex2) get: 정보 확인

ex3) describe: 자세한 상태 정보

ex4) delete: 삭제

TYPE: 리소스 타입(pod, service)을 지정한다. 리소스 타입은 대소문자를 구분하지 않으며 단수형, 복수형 또는 약어 형식을 지정할 수 있다. 예를 들어, 다음의 명령은 동일한 출력 결과를 생성한다.

kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

NAME: 리소스 이름을 지정한다. 이름은 대소문자를 구분한다. 이름을 생략하면, 모든 리소스에 대한 세부 사항이 표시된다.

ex) kubectl get pods

여러 리소스에 대한 작업을 수행할 때, 타입 및 이름별로 각 리소스를 지정하거나 하나 이상의 파일을 지정할 수 있다.

   • 타입 및 이름으로 리소스를 지정하려면 다음을 참고한다.

       1) 리소스가 모두 동일한 타입인 경우 리소스를 그룹화하려면 다음을 사용한다.

         TYPE1 name1 name2 name<#>
         ex) kubectl get pod example-pod1 example-pod2

       2) 여러 리소스 타입을 개별적으로 지정하려면 다음을 사용한다.

       TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>

       ex) kubectl get pod/example-pod1 replicationcontroller/example-rc1

 

    • 하나 이상의 파일로 리소스를 지정하려면 다음을 사용한다: -f file1 -f file2 -f file<#>

       - YAML이 특히 구성 파일에 대해 더 사용자 친화적이므로, JSON 대신 YAML을 사용한다.

       ex) kubectl get -f ./pod.yaml

 

flags: 선택적 플래그를 지정한다. 예를 들어, -s 또는 --server 플래그를 사용하여 쿠버네티스 API 서버의 주소와 포트를 지정할 수 있다.

 

 

3. Kubectl 명령어 정리

명령어 구문 설명
alpha kubectl alpha SUBCOMMAND [flags] 쿠버네티스 클러스터에서 기본적으로 활성화되어 있지 않은 알파 기능의 사용할 수 있는 명령을 나열한다.
annotate kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] 하나 이상의 리소스 어노테이션을 추가하거나 업데이트한다.
api-resources kubectl api-resources [flags] 사용 가능한 API 리소스를 나열한다.
api-versions kubectl api-versions [flags] 사용 가능한 API 버전을 나열한다.
apply kubectl apply -f FILENAME [flags] 파일이나 표준입력(stdin)으로부터 리소스에 구성 변경 사항을 적용한다. FILENAME에 yaml 파일을 작성하여 리소스를 생성한다.
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] 실행 중인 컨테이너에 연결하여 출력 스트림을 보거나 표준입력을 통해 컨테이너와 상호 작용한다.
auth kubectl auth [flags] [options] 승인을 검사한다.
autoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] Replication Controller에서 관리하는 Pod 집합을 자동으로 조정한다.
certificate kubectl certificate SUBCOMMAND [options] 인증서 리소스를 수정한다.
cluster-info kubectl cluster-info [flags] 클러스터의 마스터와 서비스에 대한 엔드포인트 정보를 표시한다.
completion kubectl completion SHELL [options] 지정된 셸(bash 또는 zsh)에 대한 셸 완성 코드를 출력한다.
config kubectl config SUBCOMMAND [flags] kubeconfig 파일을 수정한다. 세부 사항은 개별 하위 명령을 참고한다.
convert kubectl convert -f FILENAME [options] 다른 API 버전 간에 구성 파일을 변환한다. YAML 및 JSON 형식이 모두 허용된다. 참고 - kubectl-convert 플러그인을 설치해야 한다.
cordon kubectl cordon NODE [options] 노드를 스케줄 불가능(unschedulable)으로 표시한다.
cp kubectl cp <file-spec-src> <file-spec-dest> [options] 컨테이너에서 그리고 컨테이너로 파일 및 디렉터리를 복사한다.
create kubectl create -f FILENAME [flags] 파일이나 표준입력에서 하나 이상의 리소스를 생성한다.
delete kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] 파일, 표준입력 또는 레이블 셀렉터, 이름, 리소스 셀렉터 또는 리소스를 지정하여 리소스를 삭제한다.
ex) kubectl delete -f nginx-pod.yml
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 하나 이상의 리소스의 자세한 상태를 표시한다.
ex) kubectl describe pods [pod name] -n [namespace]
diff kubectl diff -f FILENAME [flags] 라이브 구성에 대해 파일이나 표준입력의 차이점을 출력한다.
drain kubectl drain NODE [options] 유지 보수를 준비 중인 노드를 드레인한다.
edit kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 기본 편집기를 사용하여 서버에서 하나 이상의 리소스 정의를 편집하고 업데이트한다.
ex) kubectl edit [pods/svc/deploy] [pod name] -n [namespace]
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] Pod에 직접 접근하여 Pod의 컨테이너에 대해 명령을 실행한다.
ex) kubectl exec -it my-nginx-pod bash
explain kubectl explain [--recursive=false] [flags] Pod, Node, Service 등의 다양한 리소스에 대한 문서를 출력한다.
expose kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] Replication Controller, Service 또는 Pod를 새로운 쿠버네티스 서비스로 노출한다.
get kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] 하나 이상의 리소스를 나열한다.
-o wide를 추가하면 더 많은 정보를 얻을 수 있다.
kustomize kubectl kustomize <dir> [flags] [options] kustomization.yaml 파일의 지시 사항에서 생성된 API 리소스 집합을 나열한다. 인수는 파일을 포함하는 디렉터리의 경로이거나, 리포지터리 루트와 관련하여 경로 접미사가 동일한 git 리포지터리 URL이어야 한다.
label kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] 하나 이상의 리소스 레이블을 추가하거나 업데이트한다.
logs kubectl logs POD [-c CONTAINER] [--follow] [flags] Pod의 컨테이너에 대한 로그를 출력한다.
ex) kubectl logs my-nginx-pod
options kubectl options 모든 명령에 적용되는 전역 커맨드 라인 옵션을 나열한다.
patch kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] 전략적 병합 패치 프로세스를 사용하여 리소스의 하나 이상의 필드를 업데이트한다.
plugin kubectl plugin [flags] [options] 플러그인과 상호 작용하기 위한 유틸리티를 제공한다.
port-forward kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] 하나 이상의 로컬 포트를 Pod로 전달한다.
proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] 쿠버네티스 API 서버에 프록시를 실행한다.
replace kubectl replace -f FILENAME 파일 또는 표준입력에서 리소스를 교체한다.
rollout kubectl rollout SUBCOMMAND [options] 리소스의 롤아웃을 관리한다. 유효한 리소스 타입에는 디플로이먼트(deployment), 데몬셋(daemonset)과 스테이트풀셋(statefulset)이 포함된다.
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client|none] [--overrides=inline-json] [flags] 클러스터에 지정된 이미지를 가지고 pod를 생성한다.
* kubernetes v1.18 이상은 run 명령어가 Pod을 만들지만 v1.17 이하는 Deployment를 만든다!
scale kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] 지정된 Replication Controller의 크기를 업데이트한다.
set kubectl set SUBCOMMAND [options] 애플리케이션 리소스를 구성한다.
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] 하나 이상의 노드에서 테인트(taint)를 업데이트한다.
top kubectl top [flags] [options] 리소스(CPU/메모리/스토리지) 사용량을 표시한다.
uncordon kubectl uncordon NODE [options] 노드를 스케줄 가능(schedulable)으로 표시한다.
version kubectl version [--client] [flags] 클라이언트와 서버에서 실행 중인 쿠버네티스 버전을 표시한다.
wait kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] 실험(experimental) 기능: 하나 이상의 리소스에서 특정 조건을 기다린다.

더 자세한 설명은 아래 링크에서 참고:

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

 

Kubectl Reference Docs

 

kubernetes.io

 

4. Output 옵션

kubectl으로부터 얻은 정보를 출력하거나, 파일 형태의 output으로 저장할 수 있다.

kubectl [command] [TYPE] [NAME] -o <output_format>

kubectl 명령에 따라, 다음과 같은 출력 형식이 지원된다.

 

출력 형식 설명
-o custom-columns=<spec> 쉼표로 구분된 사용자 정의 목록을 사용하여 테이블을 출력
-o custom-columns-file=<filename> 쉼표로 구분된 사용자 정의 목록을 사용하여 테이블을 <filename> 파일로 저장
-o json JSON 형식의 API object로 저장
-o jsonpath=<template> jsonpath 표현식에 정의된 필드를 출력
-o jsonpath-file=<filename> jsonpath 표현식에 정의된 필드를 <filename> 파일로 저장
-o name 리소스 이름만 출력
-o wide 추가 정보가 포함된 일반 텍스트 형식으로 출력. pod의 경우, node 이름이 포함된다.
-o yaml YAML 형식의 API 오브젝트를 출력

 

ex1) 다음 명령은 단일 파드에 대한 세부 정보를 YAML 형식의 오브젝트로 출력한다.

kubectl get pod web-pod-13je7 -o yaml

ex2) 사용자 정의 목록을 사용하여 원하는 세부 정보만 테이블에 출력한다.

kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

 

 

Kubectl 명령어 예시

kubectl apply

# example-service.yaml에 정의한 내용을 기반으로 서비스를 생성
kubectl apply -f example-service.yaml

# example-service.yaml에 정의한 내용을 기반으로 replication controller를 생성
kubectl apply -f example-controller.yaml

# <directory> 디렉터리 내의 .yaml, .yml 또는 .json 파일에 정의된 내용을 기반으로 객체 생성
kubectl apply -f <directory>

 

kubectl create

// example-service.yaml 파일이름의 서비스를 생성
$ kubectl create -f example-service.yaml

// example-controller.yaml 파일이름의 RC를 생성
$ kubectl create -f example-controller.yaml

 

kubectl get

// pod list를 출력
$ kubectl get pods

// pod list(+ 추가적인 정보 node 이름 등)를 출력
$ kubectl get pods -o wide

// 특정 <rc-name>의 정보를 출력
$ kubectl get replicationcontroller <rc-name>

// 모든 rc, service들 정보를 출력
$ kubectl get rc,services

// 모든 ds(daemon sets)에 대한 정보를 출력(uninitialized ds도 포함)
$ kubectl get ds --include-uninitialized

// 특정 node(server01)에 배포된 pod 정보를 출력
$ kubectl get pods --field-selector=spec.nodeName=server01

 

kubectl describe

// 특정 <node-name>의 node 정보 출력
$ kubectl describe nodes <node-name>

// 특정 <pod-name>의 pod 정보 출력
$ kubectl describe pods/<pod-name>

// 특정 <rc-name>의 rc가 제어하는 pod들 정보 출력
$ kubectl describe pods <rc-name>

// 모든 pod 정보 출력(uninitialized pod은 제외)
$ kubectl describe pods --include-uninitialized=false

 

kubectl delete

// pod.yaml로 선언된 pod들을 제거
$ kubectl delete -f pod.yaml

// 특정 <label-name>이 정의된 pod, service들 제거
$ kubectl delete pods,services -l name=<label-name>

// 특정 <label-name>이 정의된 pod, service들 제거(uninitialized pod, service 포함)
$ kubectl delete pods,services -l name=<label-name> --include-uninitialized

// 모든 pod 
$ kubectl delete pods --all

 

 

kubectl exec

// 특정 <pod-name>을 가진 pod의 첫번째 container에 'date' 라는 명령어 호출
$ kubectl exec <pod-name> date

// 특정 <pod-name>을 가진 pod의 특정 <container-name>이라는 이름의 container에 'date' 라는 명령어 호출
$ kubectl exec <pod-name> -c <container-name> date

// 특정 <pod-name>을 가진 pod의 첫번째 container에 bash shell실행 
$ kubectl exec -ti <pod-name> /bin/bash

 

kubectl logs

// 특정 <pod-name> 이름을 가진 pod의 로그 조회
$ kubectl logs <pod-name>

// 특정 <pod-name> 이름을 가진 pod의 로그 tail -f 조회
$ kubectl logs -f <pod-name>

 

추가. kubectl create와 kubectl apply 명령어 차이

command object가 존재하지 않을 경우 object가 이미 존재할 경우
create 새로운 object가 생성 ERROR
apply 새로운 object가 생성 object를 구성
(부분적인 spec을 받아들인다.)
replace ERROR obejct가 삭제된 뒤 새롭게 생성

 

 

 

 

 

참고: https://kubernetes.io/ko/docs/reference/kubectl/overview/

728x90
반응형