[쿠버네티스 기초 01] 쿠버네티스 아키텍쳐
in Kubernetes
이 포스팅은 Udemy
의 Certified Kubernetes Administrator with Practice Tests
강의를 정리한 내용입니다.
쿠버네티스 아키텍처에 대해 알아봅시다.
기본
배를 비유로 들어 쿠버네티스 아키텍처에 대해 설명
쿠버네티스의 목표는 컨테니어 형태로 된 어플리케이션을 자동화 된 방법으로 호스팅하는 데 있음
- 어플리케이션에서 필요한 만큼 인스턴스를 띄우거나
- 어플리케이션 내 서로 다른 서비스 간 커뮤니케이션을 쉽게 하도록
이것들을 위해서는 많은 컴포넌트들이 필요하다.
배를 비유로 들면,
- 실제로 컨테이너를 싣고 바다를 돌아다니는
화물선
(=워커 노드) - 이러한 화물선들을 관리하는
관리선
이 있음 (=마스터 노드)
쿠버네티스 클러스터는 여러 개의 노드들로 구성되어 있음
마스터 노드 (관리선)
- 화물선에 컨테이너를 싣는 역할. 또 어떻게 실을지 계획을 세움
- 적절한 화물선을 선택
- 각종 정보 저장, 컨테이너 관리, 모니터링, 통신 등 모든 것을 관리함
- 여러 개의 컴포넌트들로 구성 (
control plane component
)
Control Plane Component
- etcd: 어느 곳에 어느 컨테이너가 로드되어 있고, 언제 로드 되었고 등등 각종 정보를 저장하는 키 밸류 저장소
- scheduler: 해당 컨테이너의 크기나 현재 워커 노드의 상황 등등을 토대로 해당 컨테이너가 어느 노드에 로드되어야 하는지 결정하는 역할
- controller manager: 트래픽 컨트롤, 컨테이너나 노드 고장 등을 관리하는 컴포넌트. 노트 컨트롤러, replication 컨트롤러가 있음.
- api server: 위 컴포넌트들을 서로 통신하게 만드는 컴포넌트. 클러스터 안에서 일어나는 모든 동작에 대해 조율하는 역할. k8s api를 노출시켜 이를 통해 외부 유저들이 k8s 클러스터에 대해 일련의 행위를 가능하게 함.
Container Runtime Engine
- 컨테이너를 실행하는 소프트웨어
- 대표적으로
Docker
를 사용 - 모든 노드(마스터 노드 포함)에는
Docker
가 설치되어 있어야 함 - 쿠버네티스는
Docker
말고도ContainerD
나Rocket
도 지원함
워커 노드 (화물선)
실제로 컨테이너가 실리는 곳
Kubelet
- 화물선에서 선장 역할
- 각 노드에서 실행되는 에이전트
- 워커 노드에서 일어나는 모든 활동에 대해 책임이 있음
- 마스터 노드와 통신 (특히 클러스터에 조인하는 경우)
- 해당되는 컨테이너를 싣고 그 결과를 마스터에 공유하는 일
- 자신의 노드와 컨테이너에 대한 상태도 마스터에 보고함
- kube api 서버에서 명령을 받아서 컨테이너를 실행하거나 없애거나 하는 일을 함
- kube api 서버는 정기적으로 kubelet으로 부터 노드와 컨테이너에 대한 상태 체크 리포트를 받음
kube-proxy
- 워커 노드 간 통신을 담당함
- 노드 내에 있는 컨테이너들이 다른 노드에 있는 컨테이너와 통신이 되게 하는 역할