소품집

[KT AIVLE] MS 아키텍처 - 가상머신과 컨테이너 비교 본문

AI/KT 에이블스쿨

[KT AIVLE] MS 아키텍처 - 가상머신과 컨테이너 비교

sodayeong 2022. 10. 27. 22:31

Monolithic 아키텍처

장점
- 단일 코드 베이스로 애플리케이션 개발이 용이함 (어떤 기능이든지 개발 환경이 같아서 복잡하지 않음)
- 실행 파일 또는 디렉터리가 하나여서 배포가 용이함
- 분산된 애플리케이션에 비해 테스트를 더 빠르게 수행할 수 있음
- 내부 프로세스 간 통신 지연시간 최소화

단점
- 대규모 애플리케이션인 경우 만은 양의 코드를 개발자가 모두 이해하기 어렵기 때문에 추가 개발 및 유지보수가 어려움
- 일부분의 기능 오류가 전체 애플리케이션에 영향을 주고, 개별 컴포넌트 확장이 용이하지 못함 (안정성, 확장성 저하)
- 수정 > 전체 빌드 > 배포 진행이기 때문에 변경이 어려움

Microservice 아키텍처

장점
- 새로 추가되거나 수정사항이 있는 서비스만 빌드, 배포할 수 있음 (독립성)
- 전체 애플리케이션 중단될 위험 없이 특정 서비스에 대한 변경 사항을 배포함 (안정성)
- 일부분의 오류가 있으면 해당 기능만 오류가 나고, 유지보수로 정상화 가능 (높은 유지 관리성)
- 해당 기능에 맞는 기술, 언어, 버전, DB 등을 선택하여 사용할 수 있음 (기술 유연성)

단점
- 무분별한 개별 확산, 표준화 부족 문제가 있음
- 서비스끼리 네트워크상에서 서로 통신하는 과정에서 모놀리식 아키텍처에 비해 통신 오류가 발생할 확률이 높음
- 각 서비스별로 자체적인 인프라, 모니터링을 구축해야 하기 때문에 비용 발생

가상 머신 vs 컨테이너


가상머신 - 하이퍼바이저 기반 구현

- 하드웨어 레벨에서 가상화
- 가상 하드웨어 환경 위에 게스트 OS 설치됨


컨테이너 - 도커 기반 구현
- OS 레벨에서 가상화
- 컨테이너 엔진으로 애플리케이션 실행 환경을 격리함
- 도커로 컨테이너 이미지를 만들면 이미지에는 서비스와 서비스에 필요한 라이브러리를 같이 묶어서 가지고 있음
- 따라서 도커 컨테이너 가상화 솔루션은 OS에서 제공하는 자원 격리 기술을 이용해 컨테이너 단위로 서비스를 분리하고, 개발 환경 고려 없이 다양하게 배포할 수 있음

컨테이너 장점

1) 이동성 : 컨테이너를 지원하는 모든 os에서 컨테이너를 사용, 서로 다른 버전을 동시에 실행시킬 수 있음
2) 확장성 : 가볍고 빠르게 실행되어 확장이 용이, 뛰어난 리소스 활용도로 하나의 서버에서 많은 컨테이너 확장이 가능
3) 효율적 배포 : 개발, 테스트 및 프로덕션 환경에서 동일한 동작과 성능을 기대할 수 있음, 개발 주기 단축!

쿠버네티스

- 컨테이너 런타임을 통해 컨테이너를 다루는 도구
- 여러 서버에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하거나, 컨테이너가 사용할 pw and 환경 설정을 관리하는 일 > 컨테이너 오케스트레이션!!

1. Control Plane

Kube API Server
- 클러스터에서 컨트롤 플레인으로의 모든 통신을 처리함.
- 즉, API Server를 통해 다른 컴포넌트가 서로 필요한 정보를 주고받을 수 있음
etcd
- 쿠버네티스에서 필요한 모든 데이터를 key-value 형태로 저장하는 DB
Controller
- 제어 루프를 실행하여 클러스터의 상태를 감시하고 클러스터의 현재 상태가 원하는 상태가 되도록 함으로써 Pod를 관리
Scheduler
- 클러스터 안에서 노드 중 자원 할당이 가능한 알맞은 노드를 선택해 새로운 Pod를 실행해줌

2. Data Plane

kublet
- 클러스터 내부 모든 워커 노드에서 실행되는 에이전트로 파드 컨테이너의 실행을 직접 관리하고, 해당 컨테이너가 정상적으로 실행되는지 테스트함
kube-proxy
- 클러스터 안에서 별도의 가상 네트워크를 생성하고 관리하게 되는데, kube-proxy는 이런 가상 네트워크의 동작을 관리하는 컴포넌트
컨테이너 런타임
- 실제로 컨테이너를 실행시키는 런타임으로 도커를 가장 많이 활용 중

 

728x90
Comments