지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다.
이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자.
[지난 시간 내용]
2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 도커와 쿠버네티스의 관계
[k8s] 도커와 쿠버네티스의 관계
지난 시간에는 가상화 배포 환경에서 컨테이너 배포 환경으로 바뀌게 된 이유와 컨테이너가 무엇인지에 대해서 알아보았다. 컨테이너 기술과 관련된 내용 중에 우리가 가장 많이 들어본 것이
developers-haven.tistory.com
1. k8s(쿠버네티스)란?
k8s는 컨테이너 런타임(Container Runtime, 컨테이너 실행 엔진)을 통해 컨테이너를 다루는 도구 중 하나이다. 노드에 컨테이너를 분산 배치하거나, 오류가 생긴 컨테이너를 교체하는 것 같은 일을 통해 컨테이너를 관리해준다. 그리고 k8s는 선언형 인터페이스를 사용하여 클러스터 상태를 계속 체크하면서 선언된 상태가 되도록 조치를 취하게 된다.
(참고) 명령형 인터페이스와 선언형 인터페이스의 차이
1. 명령형 인터페이스(CLI, Command-Line Interface) - 사용자가 직접 명령을 내리고 실행하며, 각 단계 및 세부사항을 명시해줘야 한다.
2. 선언형 인터페이스(Declarative Interface) - 사용자는 원하는 최종 상태만을 선언하고, 시스템은 해당 상태를 달성하기 위해 작업을 자동으로 처리해준다.
2. k8s 아키텍처
k8s 마스터와 워커 노드 구성도
쿠버네티스는 마스터 노드와 워커 노드로 구성된다. 쉽게 생각하면 마스터 노드는 클러스터 상태를 관리 및 조정하는 역할, 워커 노드는 클러스터 내에서 응용 프로그램을 실행하기 위한 컴포넌트 역할이다. 이번 시간에는 마스터 노드를 구성하는 기능들과 각 역할에 대해서 알아보도록 하자.
Master Node (= Control Plane) 구성도
(1) Kube-API-Server
- 워커 노드와 통신하는 주체로 클러스터 내의 모든 명령과 통신은 Kube-API-Server를 통해서 이루어진다.
- Etcd 저장소와 직접 상호 작용하는 유일한 구성 요소이다. (Etcd는 아래에 설명)
- kubectl command는 API Sever로 전송되고 해당 서버는 명령을 처리할 수 있는 다른 컴포넌트에게 요청을 전달한다.
(2) Kube-Scheduler
- 새로운 pod가 생성되면 이를 감지하여 어떤 워커 노드로 배치할지 결정하는 작업을 ‘스케줄링’이라고 하며 → 이러한 스케줄링을 담당하는 것이 Kube-Scheduler이다.
- pod의 리소스 요구사항, 노드의 가용성 등을 모두 고려하여 어떤 워커 노드로 배치될지 결정된다. (참고로, pod는 k8s에서 실행되는 기본 작업 단위)
kube-scheduler 스케줄링 알고리즘
(1) 가중치 기반(Weighted) 알고리즘
: 노드의 리소스 용량 및 부하 상태 등을 고려하여 노드에 가중치를 부여하고, 이를 기반으로 스케줄링을 결정 → 가중치가 높은 워커 노드에 우선적으로 pod가 할당되는 방식
(2) 라운드 로빈(Round Robin) 알고리즘
: 워커 노드의 순서대로 pod가 할당되는 방식 → 모든 워커 노드에 균등하게 pod를 배치할 수는 있지만 노드의 상태 같은 부분은 고려하지 않음
(3) 랜덤(Random) 알고리즘
: 워커 노드를 랜덤으로 선택하여 pod가 할당되는 방식 → 가장 간단하고 빠르게 동작하지만 노드 상태나 부하 등을 역시 고려하지 않음
각 스케줄링 알고리즘은 클러스터의 요구사항과 운영 환경에 따라 저마다 적합한 방식이 있다. 예를 들어,
리소스 부족 상황 → Weighted 알고리즘
균형잡힌 부하 분산이 요구되는 상황 → Round Robin 알고리즘
pod 간의 우선순위가 없는 상황 → Random 알고리즘
처럼 각 클러스터 상황에 적절한 스케줄링 알고리즘을 정할 수 있다. (하지만 반드시 A상황에는 B알고리즘이 적합하다는 식으로 일반화하는 것은 No)
(3) Kube-Controller-Manager
- 클러스터 내에서 실행되는 Controller를 통합 관리하는 프로세스
- 워커 노드를 관리하는 주체로, API Server를 통해 클러스터의 상태를 감시하고 조치하는 역할이다.
- (참고) Controller는 시스템 내의 컴포넌트들의 상태를 지속적으로 모니터링하여 선언된 상태(desired state)가 유지될 수 있도록 하는 역할
(4) Etcd
- 클러스터 상태와 설정 정보를 key-value로 보관하는 DB(Store) → ex. 클러스터 및 리소스 정보, 상태정보 등
- API Server가 현재 가지고 있는 선언된 상태에 대한 값을 백업해두는 곳으로 안전을 위해 분산 저장한다.
- 참고로 $kubectl get pods 명령과 같은 command는 Etcd 서버로부터 정보를 가져오는 것이다.
이번 시간에는 쿠버네티스가 무엇인지와 아키텍처 중 마스터 노드에 대해서 알아봤다. 새로운 기술을 배우기 위해서는 그 기술의 아키텍처를 먼저 이해하는 것이 중요하다고 말할 수 있다. 아키텍처를 익히면 내부 동작이 어떻게 이뤄지는지 더 이해하기 쉽기 때문이다. 이번에는 쿠버네티스 마스터 노드에 대해서 알아보았고, 다음에는 워커 노드의 구성에 대해서 알아볼 예정이다.
'[기술공부] > Kubernetes' 카테고리의 다른 글
[k8s] 쿠버네티스 오브젝트 - pod에 대하여 (0) | 2024.04.13 |
---|---|
[k8s] 쿠버네티스 오브젝트란? (0) | 2024.04.13 |
[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (2) (37) | 2024.04.13 |
[k8s] 도커와 쿠버네티스의 관계 (0) | 2024.04.13 |
[k8s] 컨테이너 등장 배경 with 가상화 배포 환경 (0) | 2024.04.13 |