
k8s는 클러스터를 이루어 구성된다.
Master Node에 해당하는, Control Plane이 있고
Slave Node에 해당하는, Data Plane이 있다.
Data Plane은 각각 하나가 Node이며,
Node는 자신들에게 속한 Pod(최소 배포 단위)들에게 공통의 IP와 공유 자원 공간을 제공한다.
클러스터는 최소 하나의 Control Plane과 최소 하나의 Data Plane으로 구성된다.
kube-api-server :
쿠버네티스는 모든 명령과 통신을 api를 통해서 하는데 그 중심이 되는 서버가 api서버 이다. 모든 기능을 REST API로 제공하고 그에 대한 명령을 처리한다.
etcd :
쿠버네티스 클러스터의 서버 설정 값 이라던가 클러스터의 상태들을 저장하는 서버이다. 키/값 형태로 저장하고 오픈소스 형태로 쿠버네티스의 클러스터의 상태나 설정 정보를 저장한다.
kube-scheduler : Pod, 서비스등 각각의 리소스들을 적절한 노드에 할당하는 역할을 한다.
kube-contoller-manager : Deployment와 같은 리소스 컨트롤러를 관리한다. API 서버를 통해 클러스터의 공유된 상태를 감지하고, 현재상태를 원하는 상태로 이행하는 Control loop를 관리
cloud-controller-manager : 클라우드 업체와 연동해 로드 밸런서나 디스크 볼륨같은 자원을 관리
Dns : 그림에는 없지만 쿠버네티스는 자체적으로 내부 Dns 서버를 갖고있다. 쿠버네티스 리소스의 엔드포인트를 Dns로 매핑하고 관리한다. 서비스나 pod를 생성할 때 마다 동적으로 ip를 할당 받는데, 그때 마다 ip주소가 변경되는 것을 자체 내부 dns 서버를 두는것으로 해결하였다. 새로운 resource가 생기면, 그 resource에 대한 ip와 dns이름을 등록하여, dns이름을 기반으로 resource에 접근할 수 있도록 한다.
마스터에 명령을 받고 Pod을 유지시키고 쿠버네티스 런타임 환경을 제공하는 역할을 수행한다.
Kubelet :
각 노드에서 실행되는 에이전트이며, 마스터의 api서버와 통신을 하면서, 노드가 수행해야 할 명령을 받아 수행하고, 반대로 노드의 상태도 마스터로 전달하는 역할도 한다.
Kube-proxy :
노드로 들어오는 네트워크 트래픽을 적절한 컨테이너로 라우팅하고, 로드밸런싱 과 같은 노드로 들어오고 나가는 네트워크 트래픽을 프록시하고, 노드와 마스터간의 네트워크 통신을 관리한다.
Container runtime :
Pod를 통해서 배포된 컨테이너를 실행하는 Container runtime 이다. 보통 도커를 생각하면 된다.(rkt, Hyper container 등등 다양한 런타임이 있지만 대부분 도커를 사용한다.)
cAdvisor :
각 노드에서 사용되는 모니터링 에이전트 이며, 노드 내에서 가동되는 컨테이너 들의 상태와 성능들을 수집해 마스터 노드(Control plane)으로 전달하는 역할을 한다.
이번엔 과금에 대해서만 짤막하게 서술하겠다.
auto pilot 과금 모델과, standard 과금 모델이 존재한다.
auto pilot 모델은 pod 단위로 과금이 이뤄지고,
standard 모델은 node 단위로 과금이 이루어진다.
결론만 말하자면, pod를 매우 많이 올린 것이 아닌 한 auto pilot 과금이 어지간하면 저렴하다고 한다.
어렵다 쿠버네티스 !!