[Kubernetes] kubectl 기본 명령어 정리

kubectl이란?

kubectl은 쿠버네티스 클러스터를 제어하기 위한 CLI툴이다. kubectl의 많은 명령어들 중에서도 가장 기본적인 명령어 몇 가지를 알아보자.

apply (리소스 생성)

리소스가 정의된 YAML 파일을 이용해 쿠버네티스에 리소스를 생성한다. 파일뿐만 아니라 URL도 입력 가능하다. 많은 예제에서 YAML 파일을 URL로 제공하고 있다.

kubectl apply -f [파일명 또는 URL]

get (리소스 목록 보기)

쿠버네티스에서 돌아가고 있는 리소스들을 확인한다.

kubectl get [리소스 타입]

대표적인 리소스 타입엔 pods, nodes, deployments, replicasets, services 등이 있다. 리소스 타입은 po, no, svc 처럼 줄여 쓸 수 있다. 이런 줄임말이나 모든 리소스 타입을 보려면 kubectl api-resources명령어를 통해 볼 수 있다.

인자

-o

출력 포맷을 지정한다. json으로 json형식으로 출력하거나 wide를 통해 더 정확한 정보를 볼 수 있다.

describe (리소스 정보 보기)

쿠버네티스에서 돌아가고 있는 리소스의 상세한 상태를 확인한다.

kubectl describe [리소스 타입]/[이름] 또는 [리소스 타입] [이름]

리소스의 상세 정보나 상태, 혹은 실패한 이유를 확인할 때 주로. 사용한다. 다음은 nginx pod을 생성한 후 describe한 결과이다.

macintosh@Macintoshui-MacBookPro k8s % kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          64s
macintosh@Macintoshui-MacBookPro k8s % kubectl describe pod nginx-pod
Name:             nginx-pod
Namespace:        default
Priority:         0
Service Account:  default
Node:             docker-desktop/192.168.65.4
Start Time:       Fri, 07 Apr 2023 13:59:34 +0900
Labels:           <none>
Annotations:      <none>
Status:           Running
IP:               10.1.0.14
IPs:
  IP:  10.1.0.14
Containers:
  nginx-container:
    Container ID:   docker://8fb97bf6a5ae74026ecbb5e6cc865a7afef6040692f531aff8470eb277f65962
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:2ab30d6ac53580a6db8b657abf0f68d75360ff5cc1670a85acb5bd85ba1b19c0
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Fri, 07 Apr 2023 13:59:42 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vzmkw (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-vzmkw:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  75s   default-scheduler  Successfully assigned default/nginx-pod to docker-desktop
  Normal  Pulling    74s   kubelet            Pulling image "nginx"
  Normal  Pulled     67s   kubelet            Successfully pulled image "nginx" in 7.16185317s
  Normal  Created    67s   kubelet            Created container nginx-container
  Normal  Started    67s   kubelet            Started container nginx-container

delete (리소스 삭제)

쿠버네티스에서 돌아가는 리소스를 제거한다.

kubectl delete [리소스 타입]/[이름] 또는 [리소스 타입] [이름] 또는 [yaml 파일]

특이점으로는 apply -f를 통해 생성한 리소스는 생성한 파일 또는 URL로 생성된 리소스를 지울 수 있다.

logs (리소스 로그 확인)

생성된 파드에 로그를 확인한다.

kubectl logs [파드 이름]

인자

-f

파드의 로그를 실시간으로 가져온다.

-c

파드에 여러개의 컨테이너가 있는 경우 컨테이너를 지정할 수 있다.

exec (리소스 명령어 전달)

컨테이너에 명령어를 전달한다.

kubectl exec [파드 이름] -- [명령어]

인자

-it

쉘로 컨테이너에 직접 접속한다.

-c

파드에 여러개의 컨테이너가 있는 경우 컨테이너를 지정할 수 있다.

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.