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
파드에 여러개의 컨테이너가 있는 경우 컨테이너를 지정할 수 있다.
Ghost