-
컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 3.2.1STUDY/Docker 2023. 5. 9. 23:58
쿠버네티스 기본 사용법 배우기
1. 파드 생성 방법
파드를 생성하는 방법에는 'kubectl run' 명령을 사용하는 방법과 'kubectl create' 명령을 사용하는 방법이 있다. kubectl create 명령을 사용해 파드를 생성할 경우 deployment를 추가해서 실행해야 한다.
kubectl run nginx-pod --image=nginx O
kubectl create nginx --image=nginx X
kubectl create deployment test-nginx --image=nginx Orun과 create deployment로 파드를 생성하는 것은 무슨 차이가 있을까?
run으로 파드를 생성하면 단일 파드 1개만 생성되고 관리된다. 반면 create deployment로 파드를 생성하면 디플로이먼트(Deployment)라는 관리 그룹 내에서 파드가 생성된다.
파드와 디플로이먼트가 실제로 어떻게 구성돼 있는지, 디플로이먼트는 어떻게 파드를 관리하는지 알아보자.
2. 오브젝트
쿠버네티스를 사용하는 관점에서 파드와 디플로이먼트는 스펙(spec)과 상태(status) 등의 값을 가지고 있다. 이러한 값을 가지고 있는 파드와 디플로이먼트를 개별 속성을 포함해 부르는 단위를 오브젝트(Object)라고 한다.
기본 오브젝트
- 파드(Pod) : 쿠버네티스에서 실행되는 최소 단위로, 즉 웹 서비스를 구동하는 데 필요한 최소 단위이다. 독립적인 공간과 사용 가능한 IP를 가지고 있으며, 하나의 파드는 1개 이상의 컨테이너를 갖고 있기 때문에 여러 기능을 묶어 하나의 목적으로 사용할 수 있다.
- 네임스페이스(Namespace) : 쿠버네티스 클러스터에서 사용되는 리소스들을 구분해 관리하는 그룹이다.
- 볼륨(Volume) : 파드가 생성될 때 파드에서 사용할 수 있는 디렉토리를 제공한다. 기본적으로 파드는 영속되는 개념이 아니여서 제공되는 디렉토리도 임시로 사용한다. 하지만 파드가 사라지더라도 저장과 보존이 가능한 디렉터리를 볼륨 오브젝트를 통해 생성하고 사용할 수 있다.
- 서비스(Service) : 파드는 클러스터 내에서 유동적이기 때문에 접속 정보가 고정일 수 없다. 따라서 파드 접속을 안정적으로 유지하도록 서비스를 통해 내/외부로 연결된다. 그래서 서비스는 새로 파드가 생성될 때 부여되는 새로운 IP를 기존에 제공하던 기능과 연결해준다. 즉, 쿠버네티스 외부에서 쿠버네티스 내부로 접속할 대 내부가 어떤 구조로 돼 있는지, 파드가 살아잇는지 죽었는지 신경쓰지 않아도 이를 논리적으로 연결하는 역할을 한다.
디플로이먼트
디플로이먼트 생성 명령어
kubectl create deployment test-nginx --image=nginx
디플로이먼트 삭제 명령어
kubectl delete deployment test-nginx
기본 오브젝트만으로도 쿠버네티스를 사용할 수 있지만, 한계가 있어서 이를 좀 더 효율적으로 작동하도록 기능들을 조합하고 추가해 구현한 것이 디플로이먼트이다. 쿠버네티스에서 가장 많이 쓰이는 디플로이먼트 오브젝트는 파드에 기반을 두고 있으며, 레플리카셋 오브젝트를 합쳐 놓은 형태이다.
실제로 API 서버와 컨트롤러 매니저는 단순히 파드가 생성되는 것을 감시하는 것이 아니라 디플로이먼트처럼 레플리카셋을 포함하는 오브젝트의 생성을 감시한다.
3. 레플리카셋으로 파드 수 관리하기
많은 사용자를 대상으로 웹 서비스를 하려면 다수의 파드가 필요한데, 이를 하나씩 생성하는 것은 매우 비효율적이다. 쿠버네티스는 다수의 파드를 만드는 레플리카셋 오브젝트를 제공한다.
예를 들어 파드를 3개 만든다고 레플리카셋에 선언하면 컨트롤러 매니저와 스케줄러가 워커 노드에 파드 3개를 만들도록 선언한다. 그러나 레플리카셋은 파드 수를 보장하는 기능만 제공하기 때문에 롤링 업데이트 기능 등이 추가된 디플로이먼트를 사용해 파드 수를 관리하는 것을 권장한다.
파드로 생성된 것은 디플로이먼트 오브젝트에 속하지 않기 때문에 scale 명령으로 증가시키는 것은 불가능하고, 디플로이먼트로 생성된 것은 scale 명령과 --replicas=3 옵션으로 파드의 수를 3개로 만들 수 있다.
kubectl scale deployment test-nginx --replicas=3
4. 스펙 지정을 통한 오브젝트 생성
kubectl create deployment 명령으로 디플로이먼트를 생성하긴 하지만, 1개의 파드만 만들어진다. 디플로이먼트를 생성하면서 한 번에 여러 개의 파드를 만들기 위해서는 필요한 내용을 파일로 작성해야 한다(create에서는 replicas 옵션을 사용할 수 없고, scale은 이미 만들어진 디플로이먼트에서만 사용 가능하기 때문에). 이때, 작성하는 파일을 오브젝트 스펙(spec)이라고 한다. 오브젝트 스펙은 일반적으로 YAML 문법으로 작성한다.
apiVersion: apps/v1 # API 버전 kind: Deployment # 오브젝트 종류 metadata: name: echo-hname labels: app: nginx spec: replicas: 3 # 몇 개의 파드를 생성할지 결정 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: echo-hname image: sysnet4admin/echo-hname # 사용되는 이미지
작성한 파일을 이용해 디플로이먼트 생성하는 명령
kubectl create -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
create명령으로 디플로이먼트를 생성한 후 scale 명령 대신 파일 수정을 통해 파드의 수를 늘릴 수 있을까?
결과는 파일을 수정할 수는 있지만 기존에 이미 해당 파일로 생성한 디플로이먼트가 존재하기 때문에 '이미 존재한다'는 에러 메시지가 나온다. 디플로이먼트를 지우고 다시 만드는 방법 대신 배포된 오브젝트의 스펙을 변경하고 싶을 때는 어떻게 해야 할까.
5. apply 명령으로 오브젝트 생성하고 관리하기
create로 디플로이먼트를 생성하면 파일의 변경 사항을 바로 적용할 수 없다. 이런 경우 쿠버네티스는 apply라는 명령어를 제공해 오브젝트를 관리한다.
kubectl apply -f ~/_Book_k8sInfra/ch3/3.2.4/echo-hname.yaml
kubectl apply 명령어를 사용하면 파일의 변경 사항을 쉽게 적용할 수 있다. 직접 애드혹(ad-hoc, 일회적 사용)으로 오브젝트를 생성할 때는 create를 사용하고, 변경이 생길 가능성이 있는 복잡한 오브젝트는 파일로 작성한 후 apply로 적용하는 것이 좋다.
출처 : 조훈,심근우,문성주, 『컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커』, 길벗(2022), p108-p124
'STUDY > Docker' 카테고리의 다른 글
컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 Part 3.4 (0) 2023.06.08 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 3.2.2 (0) 2023.05.16 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 3.1 (0) 2023.04.25 Dockerfile (0) 2023.02.22 도커와 도커 명령어 (0) 2023.02.21