마스터 노드

kubectl

쿠버네티스 클러스터에 명령을 내리는 역할을 한다.

API 서버

쿠버네티스 클러스터의 중심 역할을 하는 통로다. 주로 상태 값을 저장하는 etcd와 통신하지만 그 밖의 요소들 또한 API 서버를 중심에 두고 통신하므로 API 서버의 역할이 중요하다.

etcd

구성 요소들의 상태 값이 저장되는 곳이다. 실제로 etcd외의 다른 구성 요소는 상태 값을 관리하지 않는다. etcd 정보만 백업되어 있다면 긴급한 장애 상황에서도 쿠버네티스 클러스터는 복구할 수 있다. etcd는 분산 저장이 가능한 key-value 저장소이므로 복제해 여러곳에 저장해두면 하나의 etcd에서 장애가 나더라도 시스템의 가용성을 확보할 수 있다.

컨트롤러 매니저

쿠버네티스 클러스터의 오브젝트 상태를 관리한다. 예를 들어 워커 노드에서 통신이 되지 않는 경우, 상태 체크와 복구는 컨트롤러 매니저에 속한 노드 컨트롤러에서 이루어진다. 다른 예로 레플리카셋 컨트롤러는 레플리카셋에 요청 받은 파드 개수대로 파드를 생성한다.

스케줄러

노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지를 결정하고 할당한다.

워커노드

kubelet

파드의 구성내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링 한다

컨테이너 런타임(CRI, Container Runtime Interface)

파드를 이루는 컨테이너의 실행을 담당한다. 파드 안에서 다양한 종류의 컨테이너가 문제없이 작동하게 만드는 표준 인터페이스다.

파드

한개의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위다. 웹 서버 역할을 할 수도 있고 로그나 데이터를 분석할 수 있다. 파드는 언제라도 죽을 수 있는 존재이다.

선택요소

네트워크 플러그인

쿠버네티스 클러스터의 통신을 위해서 네트워크 플러그인을 선택하고 구성해야한다. 일반적으로 CNI로 구성하는데, 주로 사용하는 CNI로는 캘리코, 플래널 등이 있다.

CNI(container network interface)는 클라우드 네이티브 컴퓨팅 재단의 프로젝트로 컨테이너의 네트워크 안정성과 확장성을 보장하기 위해 개발됐다. Calico는 L3로 컨테이너 네트워크를 구성하고, Flannel은 L2로 컨테이너 네트워크를 구성한다.

CoreDNS

클라우드 네이티브 컴퓨팅 재단에서 보증하는 프로젝트로 빠르고 유연한 DNS 서버이다. 쿠버네티스 클러스터에서 도메인 이름을 이용하여 통신하는데 사용한다.