1.kubernetes cluster란?
-쿠버네티스를 배포하면 클러스터를 얻는데 즉, 쿠버네티스를 실행중이라는 건 클러스터를 실행하고 있다는 것이다.
-쿠버네티스 클러스터는 애플리케이션을 실행하는 노드의 집합이다.
2.cluster의 2가지 영역

-쿠버네티스 클러스터는 control plane과 node로 이루어져 있다.
- control plane: 제어영역이다. master node라고 부르기도 한다.
- node : 애플리케이션 컨테이너를 실행하는 역할을 한다고 하여 worker node라고 부르기도 한다.
3.클러스터 각 영역을 이해한다.
1) control plane(master node)

(1) 설명
- 보통 1개~n개가 존재한다.
- cotrol plane은 클러스터의 상태를 관리하고, 명령어를 처리하는 역할을 한다.
- 각각의 control plane은 etcd, controller-manager, scheduler, kube api server라고 하는 여러 구성요소를 가진다.
- kubectl 커맨드는 kube apiserver와 커뮤니케이션 하는 용도이다.
- 전통적인 3tier 아키텍쳐 관계처럼 클라이언트-백엔드 서버-데이터 서버의 역할을 하는 방식으로 master node(control plane)가 돌아간다.
- 클라이언트의 요청을 처리하는 API서버가 있고, 그 API가 클러스터의 상태 데이터를 저장하는 데 활용하는 db가 있다. (scheduler, controller-manager가 클라이언트, kube apiserver가 백엔드, etcd가 데이터 서버이다.)
(2) 각 구성요소 설명
- scheduler
- api서버와 통신하는 컴포넌트로써, 각각의 워커노드의 자원(cpu, memory, gpu등) 사용 상태를 관리한다. 동시에 아직 노드가 배정되지 않은 새로 생성된 pod를 감지하고 새로운 워크로드를 띄운다.
- controller-manager
- 여러 컨트롤러 프로세스를 관리한다. (이전에는 컨트롤러가 각각 다 나누어져 있었는데, 하나로 통합되면서 매니저라는 이름이 붙음)
- 크게 kube 컨트롤러 매니저와 cloud 컨트롤러 매니저로 나뉜다.
- cloud 컨트롤러 매니저는 대표적인 클라우드 provider들(aws, gcp, azure 등)과 통신한다. 각각의 클라우드 환경에 맞춘 컨트롤러가 배정되어, provider들의 종속적인 기능들을 클러스터에서 수행하는 역할을 한다.
- kube 컨트롤러 매니저도 여러 컨트롤러로 이루어져 있다. api서버에는 다양한 api 리소스들(pod, deployment, service, secret등)이 있고 각각의 리소스들을 관리하는 컨트롤러가 배정된다. 이들은 api서버를 주기적으로 찌르면서 현재 클러스터 상태와, etcd에 저장된 리소스의 상태를 비교한다. 만약 etcd리소스 상태에 변화가 있다면 이를 현재 클러스터 리소스에 반영함으로써 동기화 시켜준다. 이러한 변화를 감지하고 동기화 시키는 반복된 과정을 reconcile이라고 부른다.
- kube api server
- 쿠버네티스 리소스와 클러스터의 상태 관리 및 동기화를 위한 api를 제공한다.
- etcd를 데이터 저장소로 사용한다.
- etcd
- 분산 key-value 저장소로 클러스터의 상태를 저장한다.
- 만약 클러스터 상태를 백업하고 복구하고 싶다면 etcd만 건드리면 된다.
- control plane(master node)영역 밖에 따로 떼서 관리하기도 하는데, 일반적으로는 control plane내부에 각각 할당된다.
2)worker node

(1)설명
- 클러스터를 구성하는 목적이 application의 효율적인 관리인데, application이 실직적으로 실행되는(컨테이너가 띄워지는) 공간이 바로 이 노드이다.
- container runtime위에서 pod가 실행되는게 기본형태이며, 그 외에 system컴포넌트들이라 할 수 있는 kubelet, kube-proxy, network-addOn과 같은 여러 컴포넌트들도 돌아간다.
(2)구성요소 설명
- kubelet
- 모든 노드에 기본적으로 설치되는 컴포넌트이다.
- api서버와 통신하며 노드의 리소스 상태를 보고하고 관리한다.
- container runtime과도 통신하며, 해당 노드 내에 띄워지는 컨테이너의 라이프사이클을 관리하기도 한다.
- CRI(Container Runtime Interface)
- kubelet이 다양한 컨테이너 런타임과 통신할 수 있도록 쿠버네티스가 자체적으로 준비한 인터페이스이다.
- kube-proxy
- 클러스터 상에 오버레이 네트워크를 구성한다.
- 내부적으로는 네트워크 프록시 및 내부 로드밸런서 역할을 수행한다.