개요 🔮
- Kubernetes 알아보기
- Kubernetes의 구성 요소를 알아본다
- 각 구성 요소의 역할을 알아본다
Kubernetes Architecture
쿠버네티스는 클러스터를 관리하는 도구이다.
여기서 말하는 클러스터는 우리가 일반적으로 이해하고 있는 클러스터의 개념과 동일하다.
클러스터를 관리한다는 말은, 클러스터를 구성하는 요소들의 묶음을 관리한다는 말과 같다.
클러스터를 구성한 요소들은 크게 아래 세 가지로 구분된다.
- Master 컴포넌트
- Node 컴포넌트
- Addon 컴포넌트
Kubernetes Cluster Components
Master 컴포넌트
마스터 구성 요소들은 클러스터를 실질적으로 관리하는 요소들이다.
etcd, kube-apiserver, kube-scheduler, kube-controller-manager, cloud-controller-manager 등이 있다.
etcd
- 고가용성을 제공하는 key-value 저장소
- 쿠버네티스에서 필요한 정보를 저장
- 모든 상태와 데이터를 저장
- 분산 시스템으로 구성하여 안전성을 높임
kube-apiserver
- 쿠버네티스는 MSA(Micro Service Architecture) 구조로 되어 있어 여러개의 분리된 프로세스로 구성
- kube-apiserver는 클러스터의 api를 사용할 수 있게 해주는 프로세스
- 클러스터에 대한 요청이 유효한지 검증
- etcd와 통신하는 유일한 모듈
- 수평적으로 확장되도록 디자인
kube-scheduler
- 새로운 pod들이 만들어질 때, 현재 클러스터 내에서 자원할당이 가능한 노드들 중 알맞은 노드에 할당
- 노드의 현재 상태와 pod의 요구사항을 체크
kube-controller-manager
- 쿠버네티스에서는 각각의 컨트롤러들이 pod를 관리
- kube-controller-manager는 이런 각각의 컨트롤러들을 실행하는 역할
- 지속적으로 상태를 체크하고 원하는 상태 (desired state)를 유지하도록 함
Node 컴포넌트
노드 컴포넌트는 모든 모드에서 실행.
각 노드에서 pod가 실행되는 것과 쿠버네티스 실행환경 관리.
kubelet, kube-proxy, container runtime이 있다.
kubelet
- 노드안의 컨테이너를 실행하고 관리
- 클러스터 안 모든 노드 안에서 실행되는 에이전트
PodSpec
이라는 설정에 따라 컨테이너 실행하고 헬스 체크 수행
kube-proxy
- 내/외부 통신 설정
- 쿠버네티스가 사용하는 가상 네트워크를 동작할 수 있게 하는 실질적인 역할 담당
- 호스트의 네트워크 규칙 관리 및 커넥션 포워딩
- iptables 또는 IPVS 사용
Reference