[K8S] 1. 아키텍처

1. 등장배경

MSA 가 대두하기 전 레거시시스템인 모놀리식 아키텍처가 있었습니다.

레거시시스템

이는 흔히볼수있는 웹와스, DB 형태로 한 WAS 내에서 프론트 UI 제공, 서비스제공, 인증 등 모든 업무를 처리하는 방식이었습니다. 개발과 배포가 간단하며 단순한 확장성을 가지고 있습니다. 다만 점점더 확장되면서 코드품질이 저하되고 애플리케이션의 기동시간이 매우길고 지속적인 배포, 즉 추가적인 개발및 확장, 기술적용이 매우 어렵습니다.

이런 문제를 극복하기 위해 마이크로서비스 아키텍처가 등장하였습니다.

MSA

세분화되고 독립적으로 작동하는 MSA 는 API 를 통해 다른 서비스와 통신합니다. 유지보수와 테스트, 배포가 효율적이고 기능의 개별 테스트와 배포가 가능하면서 생산성 향상과 장애 격리가 우수합니다다만 시스템 자체의 설계가 복잡해짐에 따라 MSA 의 유지보수및 관리가 어렵습니다.

2. 컨테이너

VM vs Container

컨테이너는 운영체제에서 실행되는 프로세스를 격리하여서 별도의 실행환경을 제공합니다. 실제로는 OS 가 없지만, 마치 운영체제 상에서 실행되는것처럼 작동하게 됩니다. 격리를 담당하는 linux namespace와 리소스 제어를 하는 control  group, 인 cgroup 을 사용하여 격리기술을 제공합니다.

이런 기술을 통해 도커등의 컨테이너 기술을 사용하여 애플리케이션을 기동시킬 수 있습니다. 그림에서도 보다시피 VM은 가상화 위에 OS 가 존재하는데 컨테이너는 host OS 위에 컨테이너엔진, 그리고 바로 라이브러리와 바이너리 구조로 되어있습니다.

그렇기에 가상머신에 비해 가볍고 빠른시작이 가능하며, 하나의 운영체제에서 뜨기때문에 가상화 OS로 인한 쓸모없는 리소스 소비를 줄일 수 있습니다.다만 가상머신이 컨테이너에 비해 더 많은 격리가 가능하므로 보안 및 격리환경 제공 면에서 컨테이너가 조금 부족합니다. 즉 가볍고 빠른배포, 이식성을 위해서는 컨테이너를, 격리와 보안성, 그리고 다양한 운영체제를 지원하려고 할 때 가상머신 사용에 더 이점이 있습니다.

3. 쿠버네티스

컨테이너를 조율및 관리, 즉 오케스트레이션 해주는 플랫폼인 쿠버네티스는 컨테이너 기반의 분산 클러스터 환경을 제공해줍니다. 컨테이너를 오케스트레이션 하기 위해 서비스나 스토리지 컴퓨팅 자원을 관리해주고 배포시 도움이 되는 롤아웃(사용자의 반응을 보며 하나씩 바꿔가며 배포하는 기술), 롤백빈패킹 및 복구를 지원해줍니다. 여기서 빈 패킹이란 자원 최적화를 뜻하는 것으로 컨테이너를 호스트에 가장 효율적으로 배치하는 것을 뜻합니다. (마치 상자를 차곡차곡 테트리스 하는 느낌으로) 또한 설정 및 구성에 관련이 있는 시크릿과 컨피그맵을 제공해줍니다.

다만 파이프라인과 로깅, 유지보수 등과같은 기능은 기본적으로 제공해주지 않아 추가적인 애드온 설치가 필요합니다.

–> 즉 복잡한 구성을 가진 MSA를 VM에 비해 가벼운 Container 를 이용하여 띄우고, 관리가 어려운 Conatiner 들을 Kuberenetes 를 통해 통합관리할 수 있다.

4. 아키텍쳐

Kubernetes Architecture

쿠버네티스는 크게 컨트롤 플레인, 워커노드로 구성되어있으며 추가적인 기능을 제공하는 애드온이 있습니다. 이 구성요소들은 컨트롤 플레인 가운데에 보이는 API 를 통해 메시지를 주고받으며 작동합니다.

컨트롤 플레인은 클러스터 전체를 제어하고 클러스터에 대한 명령, 그리고 이벤트를 감지합니다. 쿠버네티스의 모든 정보데이터는 etcd, 엣시디에 저장합니다. 스케줄러는 새로 생성되는 파드를 감지하고 이를 적절한 노드에 배치합니다. 컨트롤러관리자인 c-m 은 API 서버를 통해 클러스터 상태를 감시하고 필요한 상태로 변경합니다. 위 c-c-m 은 클라우드 컨트롤러 관리자로 클라우드 제공업체와 상호작용 할 수 있도록 지원해줍니다.

워커노드를 살펴보자면, 큐블렛과 쿠버네티스프록시, 그리고 컨테이너 런타임으로 구성되어있습니다. 큐블렛은 각 노드에서 실행되는 에이전트로 컨트롤 플레인으로부터 파드 구성정보를 받아 컨테이너를 동작하고 관리합니다 쿠버네티스 프록시는 네트워크 규칙과 포워딩을 담당합니다. 그림에는 없지만 컨테이너 런타임은 컨테이너를 실행 하는 구성요소입니다. 주로 containerd 나 CRI-O 와 같은 구현체입니다.

추가로 확장기능인 애드온은 모니터링이나 DNS, 로깅등에 사용합니다.

5. YAML

쿠버네티스의 구성요소는 아니지만 쿠버네티스를 관리하면서 많이 보게될 야믈 파일 형식입니다. Y A M L 이나 Y M L 의 확장자를 가지고있는 야믈파일 형식은, 띄어쓰기로 문법을 구분하기에 매우 엄격하게 지켜져야 합니다. 모든 데이터를 스트링, 리스트, 해시데이터 형식으로 표현 합니다. 이 야믈파일 형식을 사용하여 쿠버네티스 구성요소들을 정의하고 관리하며, 확인 및 수정하는데 사용합니다.

Leave a Comment