쿠버네티스 구성요소
크게 마스터 노드와 워커노드로 구분된다.
마스터노드는 워커노드를 모니터링, 스케쥴링, 서비스와 pod등을 적재, 관리한다.
워커노드는 마스터노드에서 스케쥴링 해주는 오브젝트를 적재하며 kublet을 통해 status를 주기적으로 전송한다
마스터 노드(Master Node) AKA 컨트롤 플레인 컴포넌트
아래의 컴포넌트들은 추후에 자세히 다루기로 한다.
컴포넌트
마스터노드는 아래와같은 컴포넌트들을 가지고 있다.
- Kube-Scheduler : Pod, 서비스 등을 적절한 워커노드에 할당
- Required Resourced 보다 작은 워커노드 제외
- 정책에 맞는 노드 선택
- Kube-Controller-Manager : Worker Node의 상태를 주시하며 쿠버네티스에 명시된 state와 맞지않으면 복구 하려고 한다. ex) web-server 2대필요 현재 워커노드에 0대이면 2대 생성
- Node-Controller
- Replication-Controller
- Kube-Apiserver : 쿠버네티스의 컴포너는트에 명령을 보내는 인터페이스다. kubectl도 내부적으로 api를 호출한다.
- ETCD Cluster
ETCD
Key-Value 저장소로 Redis나 MemCache를 떠올리면 쉽다.
kubeadm 을 통해 쿠버네티스 클러스터 배포시 자동으로 설치가되며 scratch방식으로 배포시 수동으로 설치하여야 한다.
쿠버네티스에서 ETCD에 여러가지 메타데이터를 저장하는데 중요한 것들은 아래와 같다.
- 노드
- 팟
- 설정
- 암호
- 계정
- 역할
워커노드(Worker Node)
실제로 pod들이 주로 적재되는 노드로써(물론 마스터 노드에도 적재가능하나 추후에 나오게될 Taints로 막혀있다.) 팟들을 유지 및 런타임 환경을 제공한다.
컴포넌트
- kublet : api서버의 명령을 listen하며 Pod의상태검사 생성 삭제 작업을한다.
- kube-proxy : 클러스터내의 Pod과 서비스의 연결을 통해 Pod끼리의 통신을 가능하게 한다.