쿠버네티스 아키텍처

wonjun_choi·2024년 9월 3일

쿠버네티스 정리

목록 보기
2/3
post-thumbnail

들어가며

지난 글에서는 쿠버네티스가 무엇이고, 컨테이너가 무엇인지에 대해서 정리했었다.
이번 글에서는 쿠버네티스 아키텍처에 대해서 정리해 보려 한다.

쿠버네티스 아키텍처

쿠버네티스 아키텍처의 모습을 간단하게 표현한 모습이다.
개발자는 App descripter를 통해 쿠버네티스에 배포할 애플리케이션에 대해서 정의할 수 있다.
App descripter는 YAML이나 JSON으로 작성되는 애플리케이션의 배포, 관리, 구성을 정의하는 선언적 파일을 의미하며, 추후 정리할 Pod나 Deployment, Service등과 같은 구성요소를 포함한다.

쿠버네티스는 이런 App descripter를 받아 해당 애플리케이션을 클러스터 내에서 자동으로 배포하고, 설정된 상태를 유지하도록 관리한다. 이를 통해 개발자는 인프라 세부 사항을 일일이 조정할 필요 없이, 선언적 파일을 통해 쉽게 애플리케이션을 배포하고 운영할 수 있다. 쿠버네티스는 이 과정에서 스케줄링, 네트워킹, 스케일링 등을 자동으로 처리하여 애플리케이션의 가용성과 확장성을 보장한다.

쿠버네티스 클러스터 아키텍처

이제는 조금 더 자세히 쿠버네티스 클러스터 아키텍처에 대해서 살펴보려 한다.
하드웨어 수준에서 쿠버네티스 클러스터는 여러 노드로 구성되며 크게 마스터 노드와 워커 노드로 구분된다.
마스터 노드는 전체 쿠버네티스를 제어하고 관리하는 중앙 제어 장치를 의미한다.
쿠버네티스를 제어하고 관리하기 위한 여러 마스터 컴포넌트가 여기서 실행이 된다
워커 노드는 실제 애플리케이션이 배포되고 실행되는 노드들을 의미한다.


쿠버네티스 클러스터를 구성하는 구성 요소에 대한 그림이다.
이제 각 구성요소들에 대해서 알아보려한다.

컨트롤 플레인

컨트롤 플레인은 위에서 설명한 마스터 노드에서 실행되며, 쿠버네티스 클러스터를 제어하고 작동시키는 역할을 한다.

쿠버네티스 API server

쿠버네티스 API server는 사용자, 컨트롤 플레인 구성요소와 통신한다.

스케줄러

스케줄러는 애플리케이션의 배포를 담당한다.
애플리케이션의 배포 가능한 각 구성요소를 워커 노드에 할당하는 역할을 한다.

컨트롤러 매니저

컨트롤러 매니저는 구성요소 복제본, 워커 노드 추적, 노드 장애 처리 등과 같은 클러스터 단의 기능을 수행한다.

etcd

etcd는 클러스터 구성을 지속적으로 저장하는 신뢰할 수 있는 분산 데이터 저장소다.

워커 노드

워커 노드는 컨테이너화된 애플리케이션을 실행하는 시스템이다.
애플리케이션을 실행하고, 모니터링하며 애플리케이션에 서비스를 제공하는 작업을 진행한다.

컨테이너 런타임 (도커)

컨테이너를 실행하는 컨테이너 런타임이다. 대표적으로는 도커가 있다.

Kubelet

컨트롤 플레인의 API 서버와 통신하고 노드의 컨테이너를 관리한다.

Kube-proxy

애플리케이션 구성 요소 간에 네트워크 트래픽을 로드밸런싱한다.

아키텍처 정리

위 내용들을 정리해 그림으로 나타내 보았다.

App descripter로 컨테이너 실행과정

쿠버네티스에서 애플리케이션을 실행하기 위해서는 먼저 애플리케이션을 이미지로 패키징하고, 이미지 레지스트리로 푸시해야한다. 이후 App descripter를 작성하고 이를 쿠버네티스 API 서버에 게시해야한다.
API 서버가 App descripter를 처리할 떄 스케줄러는 컨테이너에 필요한 리소스를 계산하고, 아직 할당되지 않은 리소스를 기반으로 사용 가능한 워커노드에 컨테이너를 할당한다.
이후 Kubelet은 레지스트리로부터 이미지를 가져와 컨테이너 런타임위에 컨테이너를 실행한다.

컨테이너 유지

쿠버네티스에서 애플리케이션이 실행된 이후, 쿠버네티스는 애플리케이션이 App descripter와 일치한지 지속적으로 확인한다. 프로세스가 중단되거나, 응답이 중지되는 경우 쿠버네티스가 이를 다시 시작한다.
만약 워커 노드가 종료되거나 엑세스가 되지 않는 경우 쿠버네티스는 이 노드에서 실행중인 컨테이너를 새로 스케줄링하고, 새로운 노드에서 실행될 수 있게 한다.

마무리

이렇게 쿠버네티스의 아키텍처에 대해서 알아보았다.
이후 각 쿠버네티스의 요소들에 대해서 공부하며 나중에 다시 이 내용을 정리해보고자 한다.

0개의 댓글