티스토리 뷰
다음 내용은 인프런의 "데브옵스를 위한 쿠버네티스 마스터" 라는 강의를 보고 요약한 공부노트입니다.
설명이 너무 잘되어 있어 개발자라면 한번쯤 들어봐야한다고 생각합니다.
1. 마이크로서비스(Micro Service Architecture)의 이해
모놀리식 아키텍쳐(전통적인 아키텍쳐 방법)이란?
- 서비스가 하나의 애플리케이션으로 돌아가는 구조
- 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍쳐
-> 많은 회사들이 사용하던 방법
장점 | 단점 |
- 소규모 프로젝트에서는 합리적 - 개발, 빌드, 테스트가 용이 |
- 종속적인 라이브러리 충돌 - 조금만 수정해도 전체 빌드 및 배포 필요 - 일부분으 오류가 전체에 영향을 미침 |
마이크로서비스 패턴으로 바뀌는 추세로 가고 있음
- 각각의 기능을 분리하여 개발, 관리하는 것
- 장점? (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 |
---|