[Kubernetes] 쿠버네티스의 기본적인 명령어에 대해서 알아보자!

vinca·2023년 11월 12일
0

☸️ kubernetes

목록 보기
7/35
post-thumbnail
post-custom-banner

  • kubernetes
  • NGINX
  • MySQL
  • NET-TOOLS
  • Chk-info

애플리케이션은 기능의 단위이다.

✅ 조회 - get

오브젝트를 조회하는 명령어


⭐ 생성 - run/create/apply

오브젝트를 생성하는 명령어

ex.) nginx 파드 생성

run 명령어를 통해 nginx 파드를 생성한다.

kubectl run nginx --image=nginx

ex.) nginx deploy 생성

create 명령어를 통해서 nginx 디플로이먼트 파드를 생성한다.

kubectl create deploy nginx --image=nginx
또는
kubectl create deployment nginx --image=nginx

ex.) nginx deploy 생성

apply 명령어를 통해서 yaml 파일을 이용해서 파드를 생성한다.

이러한 yaml 파일은 현재 deployment로 파드를 생성하도록 스크립트가 작성되어있다.

kubectl apply -f ~/_Lecture_k8s_learning.kit/ch2/2.3/apy-nginx.yaml

3개의 deployment 파드가 생성되는 것을 확인할 수 있다.


❌ 삭제 - delete

오브젝트를 삭제하는 명령어

ex.) 단일 파드 삭제

delete 명령어를 통해 생성된 파드를 삭제 한다.

kubectl delete pods nginx

ex.) deployment 파드 일부 삭제

만약 deployment된 파드를 삭제한다면 어떻게 될까?
기존 3개의 파드에서 하나를 지워보자.

kubectl delete pods nginx-6799fc88d8-2lhnv

현재 scale 명령어를 통해 replicas 의 수가 3으로 설정되어 있으므로 3개를 맞추기 위해 새로운 파드가 생긴 것을 확인할 수 있다.

ex.) deployment 파드 전체 삭제

기존 3개의 파드를 전체 다 지워보자.
deletedeployment값을 넣어서 지워주면 된다.

kubectl delete deployments.apps nginx

⚡ 접속 - exec

파드 내부의 특정 컨테이너로 접속하는 명령어

ex.) 특정 파드에 접속

kubectl exec apy-nginx-558dd8d455-299n2 -it -- /bin/bash

각 플래그의 역할

  • apy-nginx-558dd8d455-299n2 : 실행하려는 Pod의 이름

  • -it : 두 가지 플래그의 결합으로 이루어져 있다.

    • -i : 표준 입력을 유지하도록 하여 터미널과의 상호 작용을 허용한다.
    • -t : 터미널 환경을 생성한다.
  • -- /bin/bash : Bash 셸을 실행


🔮 크기 변환 - scale

파드 갯수를 늘리거나 줄이는 명령어

ex.) deployment 파드의 크기 증가

scale 명령어를 통해서 nginx 디플로이먼트 파드의 개수를 증가시킨다.

kubectl scale deployment nginx --replicas=3


🔨 수정 - edit

배포된 오브젝트를 수정하는 명령어

kubectl edit deployment apy-nginx

현재 3개의 deployment가 있는 것을 확인

  1. insert를 눌러 수정모드에 진입.
  2. replicas를 3에서 1로 변경
  3. esc를 눌러 수정모드를 종료
  4. wq를 입력 후 Enter를 눌러서 저장.

결과

3개에서 1개로 변경됨.

코드 확인 -o yaml

-o yaml

-o wide가 아닌, -o yaml 포멧을 입력하면 배포된 오브젝트의 실제 yaml 코드를 확인할 수 있다.

kubectl get pod nginx -o yaml

배포를 하면서 동시에 yaml 코드를 확인하는 것 또한 가능하다.

k run nginx --image=nginx -o yaml

명령어로 코드 생성 --dry-run=client

dry-run=client

테스트용으로 드라이하게 실행시킨다는 뜻.
즉, 실제로 코드를 실행시키는 것이 아닌, 이를 실행 시키는 경우 이후 어떻게 될 지를 사용자에게 알려준다.

kubectl run nginx -image=nginx \ --dry-run=client -o yaml

위 명령어를 실행하게 되면, 실제로 실행이 된 것처럼 yaml 코드를 결과로 생성해 준다.

단, 실제로 nginx 파드가 생성되지는 않는다!

yaml 파일을 저장

이렇게 결과로 출력되는 yaml 코드를 >를 이용해 파일로 저장 후, apply 명령어를 통해서 생성하는 것 또한 가능하다.

k run nginx --image=nginx --dry-run=client -o yaml > po-nginx.yaml
k apply -f po-nginx.yaml

잘 생성되는 것을 확인할 수 있다.

deployment

deployment 또한 이를 이용해서 yaml 파일을 ouput으로 출력하고, 또 생성할 수 있다.

k create deployment nginx-deploy --image=nginx --dry-run=client -o yaml > create-deploy.yaml

상태를 파악 - event

네임스페이스를 기준으로 상태를 파악

k get event (default 네임스페이스로 동작)

이처럼 실행된 이벤트들이 쭉 뜨는 것을 확인할 수 있는데, 중간에 ErrImagePull 메세지가 나온 것이 보인다.

deployment 파드를 생성에 문제가 생긴 것 같은데 확인해보도록 하자.

실제로 파드를 확인해보니 ErrImagePull 상태로 파드가 제대로 생성이 안 되어있었다.

그럼 이 파드를 생성하는 yaml 파일에 문제가 있는 지 확인해보자.

실제로 image의 이름이 잘못된 것을 확인할 수 있었다.

이러한 방식으로 오류를 추적할 수 있다.

하지만 해당 네임스페이스의 모든 events에 대해서 다 나오므로, 가시성이 떨어지고 주는 정보의 깊이도 너무 얕아 사실 잘 안쓴다😅

상태를 파악 - describe

파드 즉, 오브젝트에 연관된 모든 내용들을 파악
(🤩 정말 정말 정말 자주 쓴다!)

주로 파드의 이름을 기준으로 본다.

다음과 같이 deployment를 기준으로 describe를 확인할 수도 있는데 사실상 이를 통해서는 왜 파드의 생성이 실패했는지 알기 어렵다.

k describe deployment evt-desc

결국 deployment한 파드의 생성이 안 된 것 이지 deployment 자체가 실패한 것은 아니기 때문이다.

따라서 정확한 확인을 위해서는 파드를 기준으로 확인한다.

파드를 기준으로 describe

k describe pod evt-desc-66999944cc-5br7k

현재 상태가 어떠한지, 또 왜 이러한 이유가 발생했는지 알 수 있다.

전체적인 현재 상태

상태를 파악 - logs

파드(오브젝트) 내 컨테이너(이미지)의 상태를 파악

파드안에 있는 컨테이너의 문제describe볼 수 없다.

따라서 이때는 logs를 사용한다.

k logs evt-desc-66999944cc-5br7k

하지만 파드내의 컨테이너가 정상적으로 생성되지 않은 경우, 로그를 볼 수 없다.

당연하게도, 컨테이너(이미지)가 정상적으로 생성되지 않았으므로 애시당초 컨테이너의 로그가 없기 때문이다.

결과 확인

logs 명령로 파드의 이름을 넣게되면 다음과 같이 해당 파드 내 컨테이너에서 실행되는 내용들이 logs로 출력되게 된다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps
post-custom-banner

0개의 댓글