쿠버네티스는 하나의 컨트롤 플레인(마스터 노드) 와 여러 개의 워커 노드로 구성 되어있습니다.
클라이언트가 쿠버네티스를 동작하기 위해 kubectl 명령어를 사용하면 컨트롤 플레인의 API server 에서 그 명령어를 받아 해석하고 Scheduler와 Controller Manager에게 명령을 전달 합니다.
Controller Manager는 클라이언트가 보낸 kubectl 명령대로 클라이언트가 원하는 상태로 쿠버네티스를 체크 합니다. (갑자기 Pod가 다운되면 Controller Manager가 체크하여 복구합니다)
Scheduler는 kubectl 명령대로 Pod를 생성하는데 Worker node의 상태를 체크해서 가장 적합한 node에 Pod를 생성 시켜주는 역할을 합니다.
etcd는 컨트롤 플레인에 존재하는 저장소로 key value 값으로 되어 있습니다. 각 Worker node의 상태와 같은 정보를 가지고 있고 Worker node의 Kube-proxy를 통해 API Server에 전달되며 그 값이 etcd에 저장 됩니다.
Kubelet은 컨트롤 플레인에서 오는 명령을 가지고 Pod 안에 컨테이너를 작동 시키는 역할을 합니다.
Controller Runtime은 실제 컨테이너를 실행시키는 것으로 예전에는 Docker를 사용 했으나, Dockershim 이슈로 Containerd를 Controller Runtime으로 사용하고 있습니다.
Worker Node에는 여러 개의 Pod가 만들어질 수 있고, Pod 안에는 또 여러가지 Container를 만들 수 있습니다. (저희는 하나의 Pod에 한 개의 Service Container와 prometheus에서 확인을 위한 node_exporter를 할당? 하면 될 것 같습니다)