티스토리 뷰

다음 내용은 인프런의 "데브옵스를 위한 쿠버네티스 마스터" 라는 강의를 보고 요약한 공부노트입니다.

설명이 너무 잘되어 있어 개발자라면 한번쯤 들어봐야한다고 생각합니다. 

 

1. 마이크로서비스(Micro Service Architecture)의 이해 

https://www.redhat.com/ko/topics/microservices/what-are-microservices

 

모놀리식 아키텍쳐(전통적인 아키텍쳐 방법)이란? 
- 서비스가 하나의 애플리케이션으로 돌아가는 구조 
- 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍쳐
-> 많은 회사들이 사용하던 방법 

 

장점 단점 
- 소규모 프로젝트에서는 합리적
- 개발, 빌드, 테스트가 용이 
- 종속적인 라이브러리 충돌
- 조금만 수정해도 전체 빌드 및 배포 필요 
- 일부분으 오류가 전체에 영향을 미침 



마이크로서비스 패턴으로 바뀌는 추세로 가고 있음 
- 각각의 기능을 분리하여 개발, 관리하는 것

- 장점? (1) 서비스 단위 빠른 개발-> 협업이 편해짐 (2) 배포 용이 (3) 서비스 단위 고효율 저비용 구조 
- 하지만 분산시스템 환경이기 때문에 Transaction 보장, 테스트, 배포 관리 복잡이라는 단점 발생 -> 도커와 쿠버네티스 사용

- 마이크로서비스 패턴을 사용하면 CI/CD(지속적 통합 및 지속적 패포)를 통해 팀이 코드를 더 쉽게 업데이트하고 릴리스 주기를 가속화할 수 있음 

 

장점 단점 
- 독립적인 서비스로 배포가 빠르고, 모놀리식보다 가벼움
- 서비스별 개별 배포 가능 
- 서비스에 따라 개별적으로 서버를 나눌 수 있음, 메모리 및 cpu관리 효율적
- 서비스가 모듈화 되어 있고 모듈끼리 RPC, Message-driven 이용하여 통신하기 때문에 각 서비스 개발속도 증가 
- 분리된 서비스로 개발할 수 있기 때문에 서비스마다 가장적합한 기술 선택 가능 
- 서비스간 호출시 REST API 사용으로 인한 통신비용 , Latency 증가
- 서비스가 분산되어 있어 트랜잭션 관리, 장애추적 테스트 쉽지 않음 

 

 

마이크로 서비스 성공 사례

- Netflix 기술 블로그 -> 최초의 마이크로서비스 사례, 작은 단위 서비스 운영 

- Amazon AWS

- 우아한 형제들

 

2. 컨테이너 

컨테이너 - 용기 / 도커 - 항만노동자 / 쿠버네티스 - 항해자 

쿠버네티스를 사용해서 도커를 쉽게 사용할 수 있음 

 

컨테이너란?

- 가상머신을 사용에 각 마이크로 서비스를 격리하는 기술

- 가상 머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능

- VM과 컨테이너를 비교하면 CPU 사용량은 컨테이너가 훨씬 더 적게 사용 

 

컨테이너를 격리하는 기술

- 리눅스 네임 스페이스? 각 프로세스가 파일 시스템 마운트, 네트워크, uid(유저), 호스트 네임( uts)등에 대한 독립 뷰를 제공 

- 리눅스 컨트롤 그룹? 프로세스로 소비할 수 있는 리소스 양 제한가능(CPU, 메모리, I/O.. 등) 

- 이 두가지 기술을 통해서 컨테이너를 만들 수 있음

- 이 두개를 사용하기 쉽게 만든게? 도커 

 

 

 

3. 도커 

- 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나

- 컨테이너 기술은 이전에 있었음! 하지만 도커로 인해 알려짐

- 애플리케이션에 국한되지 않고, 의존성 및 파일 시스템까지 패키징 한 후 빌드, 배포, 실행을 단순화 

- 도커는 다양한 클라우드 서비스 모델과 같이 사용 가능

-> 컨테이너 : 이미지를 격리하여 독립된 공간에서 실행한 가상환경

-> 이미지 : 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일

 

cf) IaaS, PaaS, SaaS 차이? 

 

 

* 도커 아키텍쳐(Docker Architecture) 

- 도커 엔진 : 이미지, 네트워크, 디스크 관리 역할

- Contatined : OCI 구현체( runC )를 이용해 Container관리해주는 daemon

- 두 프로그램이 각각 돌아가기 떄문에 DockerEngine 시작해도 이미지 영향 X 

 

* 도커 한계

- 서비스가 커지면 커질수록 관리해야하는 컨테이너 양 증가

--> 이것을 보조할 수 있는 오케스트레이션 tool이 있음 --> 그게 바로 쿠버네티스! 

 

 

4. 쿠버네티스

- 2014년 구글이 공개

- 고대 그리스어로 항해사

- 다수의 컨테이너를 자동으로 운영하기 위한 오케스트레이션 도구

- 쿠버네티스는 "결국 컨테이너를 관리하기 위한 툴" 

예를 들어 도커를 이용해서 도커를 통해 웹 사이트를 배포하려고 한다면 (node.js나 장고 웹 사이트), 도커 컨테이너 안에 넣어서  AWS로 보내고 싶다면 프로세스는 쿠버네티스를 알아야할 필요가 없음 

- 도커는 여러개의 컨테이너를 가지고 있을때 사용된다. 그 컨테이너가 Micro Service Architecture을 가지고 있다면 어떤 컨테이너는 유저 업로드만 다루고, 어떤 컨테이너는 인증만 다루고, 어떤것은 결제만 다루고 있다면 이 컨테이너들은 동시에 업로드가 되어야 한다. 배포를 할때 그렇게 하면 되는데 많은 컨테이너를 갖고 있다면 문제가 생긴다. 

- 컨테이너 하나가 죽으면, 해당 서비스가 핵심일수가 있기 때문에 체르하는것이 필요하는데 이게 쿠버네티스를 사용하면 최소 5개의 컨테이너들이 작동할 수 있게 해준다. 하나라도 죽으면 쿠버네티스가 그 컨테이너를 재시작 할 수 있도록 해준다. 즉, 컨테이너의 모니터링을 해준다. 

- 또한 다른 예시로 만약 1만명의 유저가 접속할 경우 웹/이나 앱은 준비가 되어 있지 않을 경우, 쿠버네티스는 자동으로 컨테이너를 만들 수 있음, 쿠버네티스가 알아서 해당 웹 니즈에 맞춰서 컨테이너들을 준비하고, 사람들이 떠나고 니즈가 줄어들면 컨테이너를 자동으로 숫자조절을 해준다.  

 

 

 

 

cf) 데브옵스(DevOps) 모델 vs 노옵스(NoOps) 

 

 

 

<출처> 

1. https://tech.ssut.me/what-even-is-a-container/

2. https://www.youtube.com/watch?v=S3FVcdZcZnA&t=187s

3. https://www.atlassian.com/ko/microservices/microservices-architecture/microservices-vs-monolith

 

 

'Programming > DevOps' 카테고리의 다른 글

[DevOps] DevOps와 CI/CD?  (0) 2022.05.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함