클라우드/Kubernetes

쿠버네티스 구조

Cloud_Park 2020. 1. 8. 17:20

 

크게 2가지로 구분한다

마스터, 노드(미니안 또는 워커)

https://kubernetes.io/docs/concepts/architecture/

마스터 :

쿠버네티스 클러스터 전체를 컨트롤하는 역활로  API서버,스케줄러,컨트롤러 매니저, etcd 로 구성되어 있다.

  API서버(명령, 통신 관련):  모든 명령과 통신을 API를 통해서 한다.  모든 기능은 REST API로 제공하고 그에 따른 명령을 처리

  Etec (정보 저장): 클러스터의 데이터베이스 역할로  서버로 설정값이나 클러스터의 상태를 저장한다. -> 분산형 키/벨류 형식이고 오픈소스이다. 빠른 응답과 신뢰성등의 장점이 있다.

 스케줄러(리소스들을 할당할지 선정): 파드나 서비스들을 적절한 노드에 저장하게 정리해주는 역할

  컨트롤러 매니져(RC,SC,VC,NC 관리):   Replica controller, Service controller, Volume Controller, Node controller를 생성하고  각 노드에 배포하여 관리

 

노드

마스터에 의해 주어진 명령어를  받고  실제 워크로드에 생성하여 서비스하는 컴포넌트

구성에는 Kubelet, kube-proxy,cAvisor 와  컨테이너 런타임

  Kubelet(통신):노드에 배포되는 에이전트로, 마스터의 API서버와 통신하면서 노드가 수행해야 할 명령을 받아 수행하고, 반대로 노드의 상태등을 마스터로 전달하는 역활을 한다.

  Kube-proxy(노드 안에 트래픽 정리) : 노드로 들어오는 네트워크 트래픽을  적절한 컨테이너로 라우팅하고, 로드밸런싱등을 노드로 들어오고 나가는 네트워크 트래픽을 프록시하고 , 노드와 마스터간의 네티워크 통신을 관리한다. 

  container runtime: pod를 통해 배포된 컨데이너를 실행하는 역할,  컨테이너 런타임은 보통 도터컨데이너를 생각하기 쉽고 대표적이다. 이외에도 rkt,hyper container도 있다고한다.

  cAdvisor(모니터링): 각 노드에서  기동되는 모니터링 에이전트로, 노드내에서 가동되는 컨테이너들의 상태와 성능등의 정보를 수집하여, 마스터에게 전달한다. 주로 모니터링용

 

 

간단한 예시

마스터 = 본사

  api서버 =  본사 전산직

  etcd = 정보를 수집하는 직원

  스케줄러 = 공장의 업무를 담당해주는 직원

   컨트롤러 매니저 = 업무에를  구체화 시켜주는 직원     

노드  = 공장

   kubelet = 공장 전산직

   kube-proxy = 공장 직원에 업무를 명령을  일하는 직원에게 전송 직원

   container runtime= 공장기계 또는 일하는 직원

    cAdisor = 공장에 기계가 잘 돌아가는 지 확인하는 직원

 

스케줄러가 업무를 나눠서  공장 지점에 할당해야할 업무량과  공장기계를 관리하는  컨트롤 매니저의  이야기를 api서버(본사 전산)는 kublet(공장 전산)과 통신한다.

통신받은 어느 kubelet(공장 전산)은 kube-proxy(공장 기계에 일을 할당해주는 직원)에게 통신한 정보를 주고,  정보를 통해  container runtime(기계)에 물량을 기입해서 생산한다.

cAvisor(상태관리자)는  container runtime(공장 기계)를 확인한 정보를  kubletet(공장 전산직)에게 주고   그 결과를 api server(본사 전산직)에게  준다.