본문 바로가기

IT 인프라

도커, 쿠버네티스, MSA 개념과 활용

728x90

본 포스팅에서 다루는 범위

도커(Docker),

쿠버네티스(Kubernetis, K8s),

MSA(MicroService Architecture)

 

주요 개념과 활용


도커(Docker)란?

컨테이너 이미지 패키징 방식으로,

애플리케이션 실행하는데 필요한 코드, 설정, 런타임 등 포함하는 소프트웨어 추상화 패키지를 배포/실행하는 플랫폼. 

 

컨테이너는 리눅스의 네임스페이스로 알려진 기술을 적용해 동일한 시스템에서 실행하고, OS 커널을 다른 컨테이너와 공유할수 있으며 각각은 유저 스페이스에 격리된 프로세스에서 실행됨. 

 

컨테이너 이미지 크기는 수십메가로 VM보다 용량이 적고 더 많은 애플리케이션을 처리가능. 더 적은 수의 VM 및 OS로도 app 배포/실행 가능하기에 실무에서 MS 운영 위해 도커 컨테이너를 운영함. 

도커(docker)와 VM(Virtual Machine) 구조 비교, www.docker.com

 

도커(Docker) 활용

도커의 운영? CICD 개발해 빠른 개발, 배포, 실행의 일련의 과정을 자동화 할 수 있음.
개발자가 "개발 후 git commit > 젠킨스, gradle 로 도커이미지 빌드 > 테스트 서버 테스트 > 운영 배포"  흐름으로 관리.
이 경우 개발자는 로컬환경에서 운영환경과 동일한 환경에서 개발, 테스트 가능함. 운영/개발/테스트 환경이 모두 같은 도커 이미지로 사용하기에 가장 큰 장점.

Best practices for using Docker Hub for CI/CD | Docker

 

쿠버네티스(Kubernetis)란?

쿠버네티스(K8S)는 컨테이너화 된 워커노드와 서비스 관리하기 위한 이슈성 있고 확장 가능한 오픈소스 플랫폼임.
K8S는 선언적 구문, 자동화 용이, 크고 빠르게 성장하는 생태계를 가지기 때문에 관련 도구를 쉽게 찾아 이용할 수 있는게 장점. 

 

쿠버네티스의 차별화 장점 3가지
1. 서비스 디스커버리-노드밸런싱 : DNS 이용, 자체 IP 주소 사용으로 컨테이너 
2. 자동화된 롤업, 롤백 기능 : 배포된 컨테이너를 원하는 상태로 구성 가능, Yaml기반의 선언적 manifast 관리 가능
3. 셀프 힐링으로 실패 컨테이너 재시작, 복구해 자동화된 복구과정 내제화해 제공 가능

 

 

쿠버네티스(Kubernetis) 활용

배포위한 활용 과정. 

gitOpts : 쿠버네티스 배포방식은 보통 yaml형태 선언적 manifast > 쉽게 git에서 번역 컨트롤 가능함
Git의 모든 매니패스트 파일과 함께 특정 쿠버네티스와 동기화되는 CI도구인 젠킨스, CD도구인 Argo CD 필요 + 넥서스나 AWS ECR같은 컨테이너 이미지 repository 도 파이프라인에 포함해야 함. 
이미지 repository에 새 이미지가 나타날 때마다 배포 매니패스트에서 버전이 자동 업데이트시 깃에 다시 커밋되는 구조.
깃에 저장된 매니패스트 형상이 달라지면, 쿠버네티스에 배포된 상태와 일치화 시키기 위해 적용된 매니패스트 형상대로 K8S 상태도 변경해야 함.

Argo CD continuous deployments, blog.argoproj.io

Introducing Argo CD — Declarative Continuous Delivery for Kubernetes | by Mukulika Kapas | Argo Project

 

MSA(MicroService Architecture)란?

마이크로 서비스는 소프트웨어에 대한 현대적 접근방식. 애플리케이션 코드가 다른 코드와 작고 독립 가능한 형태로 전달 가능. MSA 해야하는 이유로, 작은 단위로의 격리/관리 용이성, 생산성 향상, 내 결함성 향상에 대한 추가 이점으로 이어질 수 있는 강점을 가짐. 

쿠버네티스 상 MicroService는 사이즈 적고 Stateless하며, 스케일 아웃에 탁월함.  요건맞게 확장 가능한 인프라와 관리 오버헤드를 크게 줄일 수 있음

Microservice resilience with spring cloud, spring.io/microservices

 

쿠버네티스 기반 MSA(MicroService Architecture)

스프링 기반은 자바만 지원하지만, 쿠버네티스는 다양한 언어를 지원함.=> 둘을 합하면 더 편리한 언어 기반 서비스 구현 가능.


스프링은 도커통해 app 패키징해 배포실행하는데, 컨테이너 플랫폼을 K8S가 선언적 배포 및 스케줄링과 결합해 MSA를 쉽고 빠르게 구성 가능. 두 플랫폼은 서로 다른 범위의 MSA문제를 해결해 근본적 다른 방식으로 처리함. 스프링은 개발자가 쉽게 해결가능하도록 JVM 내부에 모든 MSA문제를 해결,

 

K8S는 플랫폼 수준에서 개발해 개발적 문제를 줄이려고 함. => 좋은점만 가져와 활용해야할 것.

Technology Maapping

Spring Cloud for Microservices Compared to Kubernetes | Red Hat Developer

 

 


패스트캠퍼스 박병진 강사님 강의 중 중요하다고 생각되는 부분을 정리합니다. 개인적 관점이 추가될 수 있습니다.

 

함께보면 좋을 글

도커 데몬, 도커 컴포즈(docker compose) 개념, 특징, 명령어

컨테이너 기술의 발전과 minikube 기본 명령어

도커 구성요소, 이미지와 컨테이너, 명령어 그리고 컨테이너 다루기 위한 기능(엔트리포인트, 로그 등)

도커 이미지 다루기 : 빌드, dockerfile, 저장소, 이미지 경량화 전략

 

끝.

728x90