kubernetes 클러스터

2022. 3. 1. 20:34DevOps/Docker & kubernetes

쿠버네티스 클러스터 구성요소(출처. 쿠버네티스 공식 문서)

위 이미지는 클러스터의 구성 이미지이다. 출처는 쿠버네티스 공식 문서 이다.

 

클러스터는 크게 2가지 구성으로 제어영역을 구성하는 control plane(Master Node)과 data plane이라고도 하는 node(Worker Node)라는 영역이 있다.

 

Master node 는 보통 1~n개(일반적으로 홀수)로 이루어져 있다. 각각의 마스터 노드는 etcd, controller manager, scheduler, 이들과 연동되는 kube api server로 구성이 되어 있다. 보통 클러스터의 관리하는 역할을 담당하고 있으며, 상태관리와 명령어 처리를 주로 한다. node는 실질적으로 어플리케이션 컨테이너가 실행되는 공간이라고 할 수 있다. 각각의 node에는 동일하게 Pods위에 container Runtime이 있으며 그 외의 시스템으로 kubelet, kube praxy 등이 있다.

 

minikube는 단일 노드 이지만 master, worker 둘 다를 관리한다.

Control plane

API Server

클라이언트의 요청을 처리하는 서버이다. 쿠버네티스의 리소스와 클러스터의 관리를 위한 api를 제공하고 있다.

 

Scheduler

api서버와 통신을 할때 각각의 노드가 얼마만큼의 자원을 사용하고 있는지에 대한 상태를 관리하며, 새로운 워크로드를 생성할때 배포를 관리한다.

 

Controller Manager

kube 컨트롤러와 cloud 컨트롤러로 나누어져서 구성되어 있다. 여러 컨트롤러의 프로세스를 관리하고 있다. 쿠버네틱스를 이해할때 굉장히 핵심이 되는 영역이다. 각각의 컨트롤러가 하나의 프로세스로 띄워지게 되는데 이 컨트롤러 프로세스의 전부를 관리한다. 

 

etcd

api가 상태 데이터를 저장 하는 DB이다. 보통 마스터 노드에 보관할 때가 많다. 데이터를 안전하게 보관하기 위한 분산 key-value 저장소 이다. 복구를 위해서는 etcd만 백업해 둔 상태로 이것만 복구하면 해결이 된다.

kubelet

모든 노드에 설치되는 컴포먼트이다. api와 통신하며 노드의 리소스를 관리하며, 보고한다. 컨테이너 런타임과 통신하며 해당 노드에 띄워지는 컨테이너의 라이프사이클을 관리하는 역할을 한다. 

 

CRI(Container Runtime Interface)

컨테이너를 관리해 주는 다양한 데몬중에서, 쿠버네티스가 도커로부터 디펜던시를 없에고 여러 컨테이너 런타임을 지원하기 위한 인터페이스 라고 볼 수 있다.

 

kube-proxy

클러스터 상에 오버레이 네트워크를 구성하며, 내부적으로는 네트워크 프록시 및 내부 로드 벨런서 역할을 수행하곤 한다.