본문 바로가기

About/Kubernetes

[k8s] 쿠버네티스의 서버 구성(마스터와 노드)

 쿠버네티스에서 스케줄링과 디스커버리를 사람이 하는 것이 아니라 쿠버네티스의 기능이 모두 수행합니다. 이를 실현하기 위해 클러스터의 서버 상에서 여러 개의 API가 연계되어 움직이고 있습니다. 따라서 먼저 쿠버네티스가 어떤 서버 구성으로 되어 있는 지를 이해할 필요가 있습니다.

 

스케줄링과 서비스 디스커버리 개념 
 

[k8s] 스케쥴링과 서비스 디스커버리란

 기존의 웹 3계층 시스템에서 프론트 서버, 업무 서버, DB 서버 등 기능별로 다른 서버에서 처리를 하는 것이 일반적이었습니다. 때문에 애플리케이션을 어디에 배치할지를 미리 정해 두고 거기

kimjingo.tistory.com


쿠버네티스 서버 구성

마스터(Master)

 쿠버네티스의 클러스터 전체를 관리하는 역할을 담당합니다. 여러 대로 이루어진 클러스터 안의 노드의 리소스 사용 상황을 확인하고 컨테이너를 가동시킬 노드를 자동으로 선택합니다. 마스터는 *etcd라는 분산 키 밸류 스토어(KVS)를 사용하여 클러스터의 구성 정보를 관리합니다. 여기에는 클러스터에 관한 모든 설정 정보가 들어 있습니다.

 

etcd 개념

https://www.redhat.com/ko/topics/containers/what-is-etcd

 

etcd란?

etcd는 분산된 시스템 또는 클러스터의 설정 공유 및 스케줄러 조정을 위한 일관된 오픈소스 분산형 키-값 저장소입니다.

www.redhat.com

 

마스터는 다음과 같은 컴포넌트로 이루어져 있습니다.

API Server

쿠버네티스의 리소스 정보를 관리하기 위한 프론트엔드 REST API.

각 컴포턴트로 부터 리소스 정보를 받아 데이터스토어(etsd)에 저장하는 역할을 갖고 있습니다. 다른 컴포넌트는 API Server를 통해 이 etsd 정보에 액세스합니다. 개발자 혹은 시스템 관리자가 이 Server에 액세스하려면 kubectl 명령을 사용합니다. 또 애플리케이션 안에서 API Server를 호출할 수도 있습니다.

 

스케줄러(Scheduler)

스케줄러는 Pod를 어떤 노드에서 작동시킬지를 제어하기 위한 백엔드 컴포넌트

스케줄러는 노드에 할당되어 있지 않은 Pod에 대해 쿠버네티스 클러스터의 상태를 확인하고 빈 공간을 갖고 있는 노드를 찾아 Pod를 실행시킵니다.

 

컨트롤러 매니저(Controller Manager)

컨트롤러 매니저는 쿠버네티스 클러스터의 상태를 감시하고 본래 되어야 할 상태를 유지하는 백엔드 컴포넌트

정의 파일에서 정의한 것과 실제 노드나 컨테이너에서 작동하고 있는 상태를 모아서 관리함

 

데이터스토어(etsd)

쿠버네티스 클러스터 구성을 유지하는 분산 KVS

Key-Value형으로 관리하며 어떤 Pod를 어떻게 배치할지와 같은 정보를 갖고 있어서 API Server가 이를 참조합니다. 매니페스트의 내용이 저장되어 있다고 생각하면 좋습니다. 이 데이터스토어는 마스터 서버에서 분리 시킬 수도 있습니다.

 

 

 

 

노드(Node)

 컨테이너 애플리케이션이 작동하는 서버 입니다. 보통은 노드를 여러 대 준비하여 클러스터를 구성합니다. 노드를 몇 대 준비할지는 시스템의 규모나 부하에 따라 달라지지만 대 수가 늘어나면 가용성이 향상됩니다. 클라우드에서는 가상 머신 인스턴스(VM)이 노드가 되는 경우가 일반적입니다. 쿠버네티스는 컨테이너의 기본 런타임이 도커(Docker)입니다.

 

쿠버네티스에서 노드의 역할은 실제로 컨테이너 애플리케이션을 움직여 서비스를 제공하는 것입니다. 동일한 역할의 노드를 시스템의 부하나 요건에 따라 몇 대~몇 천 대 규모로 확장할 수 있습니다. 실제 컨테이너 애플리케이션의 실행은 컨테이너 런타임이 수행합니다.

 

노드는 다음과 같은 컴포넌트로 이루어져 있습니다.

kubelet

노드에서는 kubelet이라는 에이전트가 움직이는데 이것은 Pod 정의 파일에 따라 컨테이너를 실행하거나 스토리지를 마운트합니다. 

또 kubelet은 노드의 상태를 정기적으로 감시하는 기능을 갖고 있어 정기적으로 API Server에 통지합니다.

 

 

kube-proxy

kube-proxy는 다양한 중계 및 변환을 수행하는 네트워크 프록시입니다.

 

 

쿠버네티스 구성

 


쿠버네티스 서버 구성에 대하여 알아보았습니다.

참고

https://book.naver.com/bookdb/book_detail.nhn?bid=15476569

 

완벽한 IT 인프라 구축의 자동화를 위한 Kubernetes

AZURE를 사용한 쿠버네티스의 개념 파악과 실전 응용이 책은 쿠버네티스를 처음 사용하는 업무 애플리케이션 개발자 및 도커에 대한 기초 지식이 있는 분을 대상으로 컨테이너 오케스트레이션

book.naver.com