Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image Modified

마스터(Master) 와 노드(Node) 

쿠버네티스는 크게 마스터(Master)와 노드(Node) 두 개의 컴포넌트로 분리된다.

Master 는 쿠버네티스의 설정 환경을 저장하고 전체 클러스터를 관리하는 역할을 담당하고 있고, 

Node 는 Pod 나 컨테이너 처럼 쿠버네티스 위에서 동작하는 워크로드를 호스팅하는 역할을 한다.

또한 Master 에서도 컨테이너가 자동 분배되고 그에 따른 Pod 가용성이 실행이 될 수 있다. (본인이 직접 구축 해본 경험이 있음)

마스터 (Master)

쿠버네티스 클러스터 전체를 관리하는 시스템으로,

크게는 API 서버, 스케줄링, 콘트롤러매니저, ETCD 로 구성이 되어 있다.

여기서 API 는 클러스터 전체를 제어 한다.

여러개의 클러스터 안의 Node 의 리로스 사용 상황을 확인하고 컨테이너를 가동시킬 Node 를 자동으로 선택한다.

Master 는 Etcd 분산 키 밸류 스토어(KVS) 를 이용하여 클러스터의 구성정보를 관리한다.

  • Master / Node 를 포함하여 Cluster 전체를 관리하는 주체.

  • Node 글로벌 이벤트를 감지/탐지 하고 응답하는등 오케스트레이션의 의사결정을 수행.

  • 인스턴스를 1대 이상으로 구성할 수 있고 일반적인 운영 환경에서는 단일 마스터가 아닌 이중화 또는 삼중화 형태로 구성할 수 있음. 

  • Kube API Server, Controller Manager, Scheduler, etcd 등 여러 모듈로 구성.

  • Etcd 에는 클러스터의 모든 설정 정보가 포함되어 있음.

API Server

클러스터 리소스 관리의 모든 명령과 통신을 자체 REST API 를 통해서 하는데, 그 중심이되는 서버가 API 서버이다.

모든 기능들을 REST API로 제공하고 그에 대한 명령을 처리한다.

각 컴포너트로부터 정보를 받아서 ETCD (데이터스토어) 에 저장하고 액세스 한다.

또한 API Server 은 원격으로 액세스 하기 위하여 인증 및 인가 기능을 제어 한다.

데이터스토어 (ETCD)

API 서버가 명령을 주고 받을때, 클러스터의 데이타 베이스 역할이 되는 서버로 설정값이나 클러스터의 상태를 저장하는 서버이다.

데이터를 키 벨류 형태로 관리하고 있으며, API Server 가 Pod 를 배치할때 Etcd 를 참조하여 배치가 된다.

Etcd 에는 선언적 설정정보가 저장되고 , 매니페스트 정보가 저장되며 관리된다.

스케쥴러 (Scheduler)

스케쥴러는 Pod,서비스등 각 리소스들을 적절한 노드에 할당하는 역할을 한다.

즉 node 에 할당되지 않는 Pod 은 클러스터의 상태를 헬스체크 한 후,

리소스 가 비어있는 영역에 Node 를 찾아 Pod 를 실행시키는 역할을 한다.

컨트롤러 매니져 (Controller Manager)

컨트롤러 매니저는 컨트롤러(Replica controller, Service controller, Volume Controller, Node controller 등)를 생성하고 이를 각 Node 에 배포하며 관리한다.

클러스터의 상태를 실시간으로 감시하고 있으며, 각 Pod 의 상태를 유지하는 컴포너트이다.

노드 (Node)

컨테이너 애플리케이션이 작동하는 서버로서 Master API 에 의하여 Node 로 명령어를 받고 실제 워크로드를 생성하여 서비스가 실행된다.

Node 에는 Kubelet, Kube-proxy, cAdvisor 그리고 컨테이너(Docker) 런타임이 배포된다.

Kubernetes 의 기본 컨테이너 런타임은 Docker 이지만, rkt 등 다른 런타임을 사용할수 도 있다. 

Node 를 여러대 구성하여 하나의 클러스터로 구성하며, 여러대로 구성하게 되면 그 개수에 따라 서비스 가용성이 향상 된다. 

Kubelet

Node 에 배포되는 에이전트로, Master 의 API 서버와 통신을 하며, Node 가 수행해야 할 명령을 받아서 수행하고,

반대로 Node 의 상태등을 Master 로 상태를 전달하는 역할을 한다. 

Pod 의 매니페스트 파일에 따라 컨테이너를 실행하거나 중지 또는 마운트의 기능을 가지고 있다.

Node 의 상태를 정기적으로 헬스체크 하고 있는 기능을 가지고 있고 헬스체크의 데이터를 정기적으로 API Server 에게 전송한다.

Kube-proxy

Node 로 들어오는 네트워크 트래픽을 적절하게 컨테이너로 라우팅하며,

로드밸런싱등 Node 로 들어오고 나가는 네트워크 트래픽을 프록시하고,

전반적으로 Node 와 Master 간의 다양한 중계 및 네트워크 통신을 관리한다. 

Container Runtime

Pod 를 통해서 배포된 컨테이너를 실행하는 컨테이너 런타임 역할을 한다.

컨테이너 런타임은 보통 Docker 컨테이너를 기본적으로 사용하고 있으며,

Docker 이외에도 rkt (보안이 강화된 컨테이너), Hyper container 등 다양한 런타임등을 사용할 수 있다.

cAdvisor

cAdvisor 는 각 Node 에서 기동되는 모니터링 에이전트로, Node 내 에서 가동되는 컨테이너들의 상태와 성능등의 정보를 수집하여, Master 의 API Server 서버로 전달한다. 

전송된 데이터들은 주로 모니터링을 위해서 사용된다.