본문 바로가기
공부 (`・ω・´)ゞ/컨테이너 인프라 환경 구축을 위한 쿠버네티스 도커

3.2 쿠버네티스 기본 사용법 배우기

by 카프리SSun 2023. 3. 8.

이제부터 나오는 모든 실습 파일은 홈 디렉토리(~)에  _Book_k8sInfra 디렉토리 아래 각 장(ch) 별로 위치 하므로 해당 디렉토리에 필요한 실습 파일을 찾아 진행

 

 

3.2.1 파드를 생성하는 반법

쿠버네티스를 생성한다 = 사용자에게 효과적으로 파드를 제공한다

 

kubectl run명령으로 쉽게 파드 실행 실습

  nginx : 파드 이름

  --image=nginx : 생성할 이미지 이름

$ kubectl run nginx-pod --image=nginx

 

 

파드가 잘 생성됐는지 확인

$ kubectl get pod

 

 

create로 파드를 생성하여 run방식과 비교

$ kubectl create deployment dpy-nginx --image=nginx

 

 

생성된 파드 확인

$ kubectl get pods

 

두 가지 방식으로 생성한 파드가 모두 제대로 돌아가는지 확인

$ kubectl get pods -o wide

 

각 파드에서 웹 페이지 정보를 받아오는지 확인

$ curl
$ curl

 

run과 deployment 파드 생성의 차이

- run으로 파드를 생성하면 단일 파드 1개만 생성되고 관리됨

- creats deployment로 생성하면, 디플로이먼트라는 관리 그룹내에서 파드가 생성됨

ex) run으로 생성한 파드는 초코파이 1개, create deployment로 생성한 파드는 초코파이 상자에 들어있는 초코파이 1개

 

 


 

3.2.2 오브젝트란

- 쿠버네티스를 사용하는 관점에서 파드와 디플로이먼트는 스펙상태등의 값을 가짐

- 이러한 값을 가지고 있는 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위를 오브젝트라고 함

 

 

기본 오브젝트

 

  • 파드(Pod)

- 쿠버네티스에서 실행되는 최소 단위

- 웹 서비스를 구동하는 데 필요한 최소 단위

- 독립적인 공간과 사용 가능한 IP를 가지고 있음

- 하나의 파드는 1개 이상의 컨테이너를 갖고 있기 때문에 여러 기능을 묶어 하나의 목적으로 사용 가능

- 그러나 범용으로 사용할 경우, 대부분 1개의 파드에 1개의 컨테이너 적용

 

  • 네임스페이스(Namespace)

-  쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹

- 큭별히 지정하지 않으면 기본으로 할당되는 default, 쿠버네티스 시스템에서 사용되는  kube-system, 옴프레미스에서 쿠버네티스를 사용할 경우 외부에서 쿠버네티스 틀러스터 내부로 접속하게 도와주는 컨테이너들이 속해 있는 metallb-systemc이 있음

 

  • 볼륨(Volume)

- 파드가 생성될 때 파드에서 사용할 수 있는 디렉터리를 제공

- 기본적으로 파드는 영속되는 개념이 아니라 제공되는 디렉터리도 임시로 사용

- 하지만, 파드가 사라지더라도 저장과 보존이 가능한 디렉터리를 볼륨 오브젝트를 통해 생성하고 사용 가능

 

  • 서비스(Service)

- 새로 파드가 생성될 때 부여되는 새로운 IP를 기존에 제공하던 기능과 연결해 줌

 

디플로이먼트

- 기본 오브젝트만으로도 쿠버네티스를 사용할 수 있지만, 한계가 있어 이를 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것

- 파드 기반, 레플리카셋을 합쳐 놓은 형태

 

 

디플로이먼트 생성 및 삭제 실습

저장소에서 이미지를 내려받아 디플로이먼트 생성

   이미지 경로 : sysnet4admin/echo-hname (sysnet4admin : 계정 이름, echo-hname : 이미지 이름)

$ kubectl create deployment dpy-hname --image=sysnet4admin/echo-hname

 

생성된 디플로이먼트 확인

$ kubectl get pods

 

create를 delete로 변경하고, --image 부분을 제외하면 생성했던 디플로이먼트(dpy-hname)가 삭제됨

$ kubectl delete deployment dpy-hname

 

디플로이먼트가 삭제됐는지 확인

$ kubectl get pods

 

 


 

3.2.3 레플리카셋으로 파드 수 관리하기

- 많은 사용자를 대상으로 웹 서비스를 하려면 다수의 파드가 필요한데, 이를 하나씩 생성하려면 매우 비효율적

   > 그래서, 쿠버네티스에서는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공

 

ex) 파드를 3개 만들겠다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커 노드에 파드 3개를 만들도록 선언

      그러나, 레플리카셋은 파드 수를 보장하는 기능만 제공하기 때문에 롤링 업데이트 기능 등이 추가된 디플로이컨트를 사용해 파드 수를 관리하기를 권장 

 

 

실제 과정이 어떻게 이루어지는지 실습으로 확인

 

1. 배포된 파드의 상태 확인

$ kubectl get pods

 

2. nginx-pod를 scale 명령으로 3개로 증가시킴

    --replicas=3은 파드의 수를 3개로 맞추는 옵션

$ kubectl scale pod nginx-pod --replicas=3

실행해 보니 리소스를 찯을 수 없다는 에러 메시지가 나오며 실행이 되지 않음.

nginx-pod는 파드로 생성됐기 때문에 디플로이먼트 오브젝트에 속하지 않음

그래서, 리소스를 확인할 수 없다는 에러 발생

 

3. 디플로이먼트로 생성된 dpy-nginx를 scale 명령과 --replicas=3 옵션으로 파드의 수를 3개로 만듦

$ kubectl scale deployment dpy-nginx --replicas=3

 

4. scale 명령으로 추가된 2개의 nginx 파드 확인 

   최근에 생성된 파드는 생성 시간(AGE)이 짧음

$ kubectl get pods

 

5. dpy-nginx의 모든 파드가 정상적으로 워커 노드에 적용되고 IP가 부여됐는지 kubectl get pods -o wide 명령으로 확인

$ kubectl get pods -o wide

 

6. 다음 진행을 위해 생성한 디플로이먼트 dpy-nginx를 삭제함

$ kubectl delete deployment dpy-nginx

 

7. 삭제한 후에 배포된 파드 또는 디플로이먼트의 상태 확인

$ kubectl get pods

 


 

3.2.4 스펙을 지정해 오브젝트 생성

kubectl create deployment 명령으로 디플로이먼트를 생성했으나, 1개의 파드만 만들어짐

create에서는 replicas 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용 가능

 

이런 설정을 적용하려면 필요한 내용을 파일로 작성 필요

이 때 작성하는 파일을 오브젝트 스펙이라고 함

오브젝트 스펙은 일반적으로 야믈(YAML) 문법으로 작성

 

3개의 nginx 파드를 디플로이먼트 오브젝크로 만드는 실습

 > 명령어로는 3개의 파드를 가진 디플로이먼트를 만들 수 없으므로 오브젝트 스펙을 작성해 디플로이먼트 생성