쿠버네티스 구조
크게 2가지로 구분한다
마스터, 노드(미니안 또는 워커)
마스터 :
쿠버네티스 클러스터 전체를 컨트롤하는 역활로 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(본사 전산직)에게 준다.