카테고리 없음

마이크로 서비스와 데브옵스

늘이 2024. 11. 17. 23:01

 

마이크로 서비스와 데브옵스

 

 

데브옵스(DevOps)

소프트웨어의 개발(Development)와 운영(Operations)의 합성어

소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화

소프트웨어 개발 조직과 운영  조직간의 상호 의존적 대응이며, 조직이 소프트웨어 제품과 서비슬르 빠른 시간에 개발 및 배포하는 것을 목적으로함

데브옵스의 목적은 전반적인 배포 파이프라인에 걸쳐있음

 

실리콘 밸리를 중심으로 유행하여 전세계에 퍼져 현재 IT 분야에서 가장 진보된 소프트웨어 개발 문화 또는 방법론

개발 조직과 운영 조직이 물리적으로 격리되지 않는 환경에서 개발, 테스트, 배포, 운영에 이른 전체 생명주기를 서로 긴밀하게 통합하여 관리

데브옵스를 실현하기 위한 수단으로 마이크로서비스(Microservice)가 등장

 

 

 

마이크로 서비스(microservice)

애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법

마이크로서비스 아키텍처에서 서비스들은 섬세(fine-grained)하고 프로토콜은 가벼운 편

애플리케이션을 더 조그마한 여러 서비스로 분해하면 새로운 기술의 도입, 고가용성, 무중단, 장애 대처 등에서 수월해짐

모듈성을 개선시키고 애플리케이션의 이해, 개발, 테스트를 더 쉽게할 수 있음

 

마이크로서비스 아키텍처

아주 작은 단위로 동작하는 서비스가 구동되도록 시스템 및 소프트웨어의 구성과 구성요소 간의 관계를 정의한 아키텍처

특징

애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트로 분해하고 이들을 조합해서 솔루션 제공 

각 컴포넌트는 작은 책임 영역을 담당하고 완전히 상호 독립적으로 배포

마이크로서비스는 몇가지 기본 원칙에 기반을 두며 서비스 소비자와 서비스 제공자 사이의 데이터 교환을 위해 HTTP, JSON과 같은 경량 통신  프로토콜 사용

애플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 구현 기술과는 무관

작고 독립적이며 분산된 마이크로서비스를 사용해 조직은 명확히 정의된 책임 영역을 담당하는 소규모 팀 보유

 

 

가상화와 컨테이너

전통벅인 배포

물리서버 기반 애플리케이션 실행

가상화된 배포

단일 물리 서버의 CPU에서 여러 하이퍼바이저 기반 가상 시스템(VM) 실행

컨테이너 개발

VM과 유사

가상화 기술과 컨테이너

가상머신(VM)

 

 

컨테이너 오케스트레이션

컨테이너 가상화는 지속적인 개발, 통합 및 배포에 효과적

컴테이너 오케스트레이션 서비스는 애플리케이션은 더 이상 하나의 통일체가 아니라 특정 애플리케이션이 설계 의도대로 가능하도록 함께 작동해야 하는 수십 또는 수백 개의 느슨하게 결합되고 컨테이너화된 요소로 구성됨

 

Kubectl: 쿠버네티스 커맨드

마스터

노드

에이전트인 kubelet

pod안에 컨테이너가 있음

 

쿠버네티스

컨테이너 오케스트레이션 도구가 쿠버네티스

컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스

 

마이크로서비스 아키텍처 설계

 

관리 컨테이너

개별 서비스 인스턴스에는 작동할 컨텍스트(실행환경으로 보면됨)가 필요

가상 컴퓨터, Docker 컨테이너 또는 조정 된 프로세스로 구현 된 관리 컨테이너는 이러한 기능 제공

인스턴스 관리 및 조정을 제공하고 필요에 따라 새 인스턴스를 회전하며 개별 인스턴스의 수명 주기를 관리 

 

외부 게이트 웨이

MSA 구현은 비즈니스 응용 프로그램 및 응용 프로그램에서 사용할 수 있는 API 형태로 기능 노출

서비스 외부게이트웨이는 이러한 서비스에 대한 액세스를 관리하고 트래픽 관리 및 보안 정책을 적용하여 마이크로 서비스 환경을 보호

외부 게이트웨이 기능은 종종 API 관리 제품을 사용하여 구현

 

서비스 메쉬 기능

서비스 간의 통신을 느슨하게 결합, 신뢰성 및 유연성을 유지하는데 도움이 되는 기능으로 구성

서비스 분리, 버전 관리 전략 지원 및 부하시 탄성 확장성 관리 가능

서비스 라우팅, 로드 밸런싱, 서비스 발견 , 구성 저장소, ID 공급자 기능

 

서비스 이미지 레지스트리

사용자 환경에 어딘가에는 빌드되고 테스트 된 서비스의 불변 이미지를 저장하는 레지스트리로 코드 저장소(동적으로 생성된 서비스의 경우), Docker 이미지 레지스트리, 이진 아티팩트 저장소 또는 VM이미지의 BLOB(Binary Large Object) 기반 저장소 등

 

메시지 지향 미들웨어

가장 간단한 MSA 구현은 HTTP와 같은 동기식 프로토콜 또는 GRPC 또는 Thrift와 같은 보다 효율적인 프로토콜을 사용하여 지속 가능하며 이벤트 및 메시지 중심 패턴을 지원하기 위해 비동기 메시징 채널이 필요

 

빌드 및 테스트 자동화 MSA의 개발 민첩성 이점은 개발 출력 품질을 극대화하고 전달을 간소화하기 위해 개발 주기에서 높은 수준의 빌드 및 테스트 자동화 필요

 

배포 자동화

개발 민첩성 이점을 완전히 실현하려면 배포를 자동화

 

 

쿠버네티스 오브젝트

쿠버네티스에서 사용하는 개념은 크게 객체(Object)와 그걸 관리하는 컨트롤러(Controller)가 있음

 

객체(Object)

  • 사용자가 쿠버네티스에 바라는 상태(desired state)
  • 어떤 컨테이너화된 애플리케이션이 동작 중인지, 어느 노드에서 동작중인지 상태와 그 애플리케이션이 이용할 수 있는 리소스와 애플리케이션의 재구동 정책, 업그레이드, 내고장성과 같은 것에 정책
  • 객체에는 파드(pod), 서비스(service), 볼륨(volume), 네임스페이스(namespace) 등이 있음(pod는 컨테이너화된 애플리케이션, volume은 디스크, service는 로드밸런서, namespace는 패키지명)

 

컨트롤러(Controller)

  • 객체가 원래 설정된 상태를 잘 유지할수 있게 관리하는 역할
  • 컨트롤러에는 ReplicaSet, Deployment, StatefulSet, DaemonSet, Job 등이 있음

 

 

파드(Pod)

쿠버네티스는 하나의 컨테이너를 개별적으로 배포하는 것이 아닌 pod 단위로 배포

파드는 가장 기본적인 배포 단위로 하나 이상의 컨테이너를 포함하는 단위

일반적으로 1 pod 1 container

pod 내 컨테이너들은 IP, Port를 공유

pod가 재시작되면 IP가 변경되며 pod내의 컨테이너들의 로컬 디스크의 내용이 사라짐

pod 내에 배포된 컨테이너간에는 디스크 볼륨 공유 가능

 

 

쿠버네티스 배포 방식

 

 

 

쿠버네티스 라벨

 

쿠버네티스 컨트롤러