쿠버네티스 아키텍처 개요
쿠버네티스를 배포하면 클러스터를 얻는다. 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커머신의 집합으로 한개 이상의 워크 노드를 가진다.
클러스터에는 Control Plane, Woker Node, 애드온이 존재한다.
- 워크노드 : 애플리케이션의 구성요소인 Pod를 호스트
- 컨트롤 플레인 : 클러스터 스케줄링 등 전반적인 것들을 수행하고 클러스터 이벤트를 감지하고 반응
- 애드온 : 클러스터 기능을 구현하기 위해 클러스터 단위 기능을 제공
Control Plane이란?
컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어로 이 계층은 다양한 컴포넌트로 구성된다.(제한되는 것은 아님)
Control Plane
- Kube-apiserver
API서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. API는 쿠버네티스 컨트롤 플레인의 프론트엔드이다.
- etcd
모든 클러스터 데이터를 담는 뒷단의 저장소로 사용되는 일관성 고가용성 키 값 저장소 클러스터에서 etcd를 백엔드 저장소로 사용한다면 이 데이터는 필수로 백업해야한다.
- kube-scheduler
노드가 배정되지 않은 새로 생성된 파드를 감지하고 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트
- kube-controller-manager
컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트 쿠버네티스에서 컨트롤러는 클러스터의 상태를 관찰한 다음 필요한 경우에 생성 또는 변경을 요청하는 컨트롤 루프이다. 각 컨트롤러는 현재 클러스터의 상태를 의도한 상태에 가깝게 이동한다.
- cloud-controller-manager
클라우드별 컨트롤 로직을 포함하는 쿠버네티스의 컨트롤 플레인 컴포넌트이다. 클라우드 매니저를 통해 클라우드 공급자의 API에 연결하고 클라우드 플랫폼과 상호작용하는 컴포넌트와 클러스터와만 상호작용하는 컴포넌트를 구분할 수 있게 한다.
노드란?
동작중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며 모든 노드 상에서 동작한다.
노드 컴포넌트
- Kubelet
클러스터 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다. 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다.
- Kube-proxy
클러스터의 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스 서비스의 구현부이다.
- 컨테이너 런타임
컨테이너 실행을 담당하는 소프트웨어이다. 여러 컨테이너 환경을 지원함.
애드온이란?
애드온은 쿠버네티스 리소스를 이용하여 클러스터 기능을 구현한다. 이들은 클러스터 단위의 기능을 제공한다.
- DNS
다른 애드온은 절대적으로 요구되지는 않지만 DNS는 많은 곳에서 필요하기 때문에 클러스터 DNS를 갖춰야한다. 쿠버네티스에 의해 구동되는 컨테이너는 DNS검색에서 이 DNS서버를 자동으로 포함한다.