1. 등장배경
MSA 가 대두하기 전 레거시시스템인 모놀리식 아키텍처가 있었습니다.
이는 흔히볼수있는 웹와스, DB 형태로 한 WAS 내에서 프론트 UI 제공, 서비스제공, 인증 등 모든 업무를 처리하는 방식이었습니다. 개발과 배포가 간단하며 단순한 확장성을 가지고 있습니다. 다만 점점더 확장되면서 코드품질이 저하되고 애플리케이션의 기동시간이 매우길고 지속적인 배포, 즉 추가적인 개발및 확장, 기술적용이 매우 어렵습니다.
이런 문제를 극복하기 위해 마이크로서비스 아키텍처가 등장하였습니다.
세분화되고 독립적으로 작동하는 MSA 는 API 를 통해 다른 서비스와 통신합니다. 유지보수와 테스트, 배포가 효율적이고 기능의 개별 테스트와 배포가 가능하면서 생산성 향상과 장애 격리가 우수합니다. 다만 시스템 자체의 설계가 복잡해짐에 따라 MSA 의 유지보수및 관리가 어렵습니다.
2. 컨테이너
컨테이너는 운영체제에서 실행되는 프로세스를 격리하여서 별도의 실행환경을 제공합니다. 실제로는 OS 가 없지만, 마치 운영체제 상에서 실행되는것처럼 작동하게 됩니다. 격리를 담당하는 linux namespace와 리소스 제어를 하는 control group, 인 cgroup 을 사용하여 격리기술을 제공합니다.
이런 기술을 통해 도커등의 컨테이너 기술을 사용하여 애플리케이션을 기동시킬 수 있습니다. 그림에서도 보다시피 VM은 가상화 위에 OS 가 존재하는데 컨테이너는 host OS 위에 컨테이너엔진, 그리고 바로 라이브러리와 바이너리 구조로 되어있습니다.
그렇기에 가상머신에 비해 가볍고 빠른시작이 가능하며, 하나의 운영체제에서 뜨기때문에 가상화 OS로 인한 쓸모없는 리소스 소비를 줄일 수 있습니다.다만 가상머신이 컨테이너에 비해 더 많은 격리가 가능하므로 보안 및 격리환경 제공 면에서 컨테이너가 조금 부족합니다. 즉 가볍고 빠른배포, 이식성을 위해서는 컨테이너를, 격리와 보안성, 그리고 다양한 운영체제를 지원하려고 할 때 가상머신 사용에 더 이점이 있습니다.
3. 쿠버네티스
컨테이너를 조율및 관리, 즉 오케스트레이션 해주는 플랫폼인 쿠버네티스는 컨테이너 기반의 분산 클러스터 환경을 제공해줍니다. 컨테이너를 오케스트레이션 하기 위해 서비스나 스토리지 컴퓨팅 자원을 관리해주고 배포시 도움이 되는 롤아웃(사용자의 반응을 보며 하나씩 바꿔가며 배포하는 기술), 롤백, 빈패킹 및 복구를 지원해줍니다. 여기서 빈 패킹이란 자원 최적화를 뜻하는 것으로 컨테이너를 호스트에 가장 효율적으로 배치하는 것을 뜻합니다. (마치 상자를 차곡차곡 테트리스 하는 느낌으로) 또한 설정 및 구성에 관련이 있는 시크릿과 컨피그맵을 제공해줍니다.
다만 파이프라인과 로깅, 유지보수 등과같은 기능은 기본적으로 제공해주지 않아 추가적인 애드온 설치가 필요합니다.
--> 즉 복잡한 구성을 가진 MSA를 VM에 비해 가벼운 Container 를 이용하여 띄우고, 관리가 어려운 Conatiner 들을 Kuberenetes 를 통해 통합관리할 수 있다.
4. 아키텍쳐
쿠버네티스는 크게 컨트롤 플레인, 워커노드로 구성되어있으며 추가적인 기능을 제공하는 애드온이 있습니다. 이 구성요소들은 컨트롤 플레인 가운데에 보이는 API 를 통해 메시지를 주고받으며 작동합니다.
컨트롤 플레인은 클러스터 전체를 제어하고 클러스터에 대한 명령, 그리고 이벤트를 감지합니다. 쿠버네티스의 모든 정보데이터는 etcd, 엣시디에 저장합니다. 스케줄러는 새로 생성되는 파드를 감지하고 이를 적절한 노드에 배치합니다. 컨트롤러관리자인 c-m 은 API 서버를 통해 클러스터 상태를 감시하고 필요한 상태로 변경합니다. 위 c-c-m 은 클라우드 컨트롤러 관리자로 클라우드 제공업체와 상호작용 할 수 있도록 지원해줍니다.
워커노드를 살펴보자면, 큐블렛과 쿠버네티스프록시, 그리고 컨테이너 런타임으로 구성되어있습니다. 큐블렛은 각 노드에서 실행되는 에이전트로 컨트롤 플레인으로부터 파드 구성정보를 받아 컨테이너를 동작하고 관리합니다 쿠버네티스 프록시는 네트워크 규칙과 포워딩을 담당합니다. 그림에는 없지만 컨테이너 런타임은 컨테이너를 실행 하는 구성요소입니다. 주로 containerd 나 CRI-O 와 같은 구현체입니다.
추가로 확장기능인 애드온은 모니터링이나 DNS, 로깅등에 사용합니다.
5. YAML
쿠버네티스의 구성요소는 아니지만 쿠버네티스를 관리하면서 많이 보게될 야믈 파일 형식입니다. Y A M L 이나 Y M L 의 확장자를 가지고있는 야믈파일 형식은, 띄어쓰기로 문법을 구분하기에 매우 엄격하게 지켜져야 합니다. 모든 데이터를 스트링, 리스트, 해시데이터 형식으로 표현 합니다. 이 야믈파일 형식을 사용하여 쿠버네티스 구성요소들을 정의하고 관리하며, 확인 및 수정하는데 사용합니다.
'IT 공부 > PaaS' 카테고리의 다른 글
[K8S] 3. 컨트롤러 리소스 (0) | 2024.01.12 |
---|---|
[K8S] 2. 파드 (1) | 2024.01.11 |
[k8s] 쿠버네티스 기초 사용방법 (1) | 2022.12.19 |
[k8s] 쿠버네티스 설치 (0) | 2022.11.02 |
[Docker] Docker-compose 기본 (1) | 2022.10.31 |