쿠버네티스(K8S)는 컨테이너 오토스트레이션 도구의 일종이다.

컨테이너 오토스트레이션이란 시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일을 말한다. 여러 개의 컨테이너를 지휘(관리)하는 도구라고 생각하면 쉬울것이다.

쿠버네티스는 여러대의 컨테이너가 여러대의 서버에 걸쳐 실행되는 것을 전제로 한다. 또 서버 한 대마다 제각기 여러 대의 컨테이너를 실행한다.

쿠버네티스는 도커에서의 도커 컴포즈 파일과 비슷한 정의 파일(메니페스트 파일)만 작성하면 이 파일에 기재된 정의에 따라 모든 물리적 서버에 컨테이너를 생성하고, 생성한 컨테이너를 관리해준다.

이 메니페스트 파일에서는 컨테이너 환경을 구성하는 ‘바람직한 상태‘를 정의한다. ‘컨테이너는 OO개, 볼륨은 XX개로 구성하라’는 K8S가 항시 유지해야하는 상태가 정의되어있다는 것이다.

그리고 여기에 정의되어있는 ‘어떤 바람직한 상태’를 만들고 항시 유지하는 것이 K8S의 기본적인 아이디어다.

마스터 노드와 워커노드

쿠버네티스에는 전체적인 제어를 담당하는 마스터 노드와 워커 노드라는 두 가지 유형의 노드로 구성된다.

마스터 노드는 이름 그대로 감독과 같은 존재다. 마스터 노드에서 컨테이너를 실제로 실행하지는 않고, 워커 노드에서 실행되는 컨테이너를 관리하는 역할을 맡는다.

워커 노드는 실제 서버에 해당하는 부분으로, 컨테이너가 실제 동작하는 서버다. 컨테이너가 동작해야 하므로 컨테이너 엔진이 설치돼야 하는 것은 물론이다.

이렇게 마스터 노드와 워커 노드로 구성된 일군의 쿠버네티스 시스템을 클러스터라 부른다.

마스터 노드에서 컨테이너들의 상태를 관리한다. 그리고 여러 개의 워커 노드에서 마스터 노드의 명을 받아 컨테이너를 실행한다.

쿠버네티스의 구성

파드

파드(Pod)는 컨테이너와 볼륨을 함께 묶어서 만든 것이다. 기본적으로는 이 파드 하나 당 컨테이너 하나이지만 컨테이너가 여러 개인 파드도 있을 수 있다. 이 경우 파드 안의 컨테이너 간 의존성이 높을 것이다.

서비스

서비스(Service)는 여러 개의 파드를 나타내는 반장이라고 생각하면 된다. 이 서비스가 관리하는 파드는 기본적으로 동일한 구성을 가진다. 필자기 이후 있을 포스팅에서 3-Tier 아키텍처를 구축을 할 것인데, 여기서 WEB, WAS, DB 각각 3개의 서비스를 만들것이고 각각의 서비스에 있는 파드들은 모두 WEB은 NginX, WAS는 Tomcat, DB는 MariaDB라는 동일한 구성을 가질 것이다.

로드밸런서와 인그레스

외부로부터 들어오는 요청은 로드 밸런서 또는 인그레스가 받아서 이 서비스간의 분배를 담당한다. 이들은 마스터 노드도 워커 노드도 아닌 별도의 노드에서 동작하거나 물리적 HW일 수 있다. 그리고 각 서비스들이 파드간에 요청을 분배한다.

디플로이먼트와 레플리카세트

레플리카세트는 파드의 수를 관리한다. 장애등의 이유로 파드가 종료가 되었을 때, 모자라는 파드만큼 보충하거나 정의파일에 정의된 파드의 수가 감소하면(레플리카셋을 3에서 2로 바꾸는 등) 파드의 수를 실제로 감소시킨다.

서비스 : 파드에 요청을 배분하는 반장

레플리카세트 : 파드의 수를 관리하는 반장

레플리카세트가 관리하는 동일한 구성의 파드를 레플리카라고도 부른다.

레플리카세트는 단독으로 쓰일 수 없다. 그래서 레플리카세트는 디플로이먼트와 함께 쓰일때가 많다.

디플로이먼트는 파드의 배포(디플로이)를 관리하는 요소이다. 파드가 사용하는 이미지 등 파드에 대한 정보를 갖고 있다. 쿠버네티스 메니페스트 파일의 디플로이먼트를 정의하는 부분 내에서 레플리카세트를 정의한다.

즉, 디플로이먼트는 레플리카 위에있는 상사라고 보아도 된다.

Reference

https://www.yes24.com/Product/Goods/108431011

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다