본문 바로가기

Docker & Kubernetes

인프라 환경 관련 개념정리

컨테이너(container)

: 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태.

도커(Docker)

: 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구.

쿠버네티스(Kubernetes)

: 다수의 컨테이너를 관리하는 데 사용. 컨테이너의 자동 배포 - 동작 보증 - 부하에 따른 동적 확장 등의 기능을 제공한다.

- 컨테이너 관리

- 필요한 인프라 기능을 통합하고 관리

- API Gateway, 서비스 디스커버리, 이벤트 버스, 인증 및 결제 등 다양한 서비스를 효율적으로 관리할 수 있는 환경을 제공하며, 내외부적으로 연결해준다

모놀리식 아키텍처 vs 마이크로서비스 아키텍처

모놀리식 아키텍처 (Monolithic Architecture)

: 서비스 or 애플리케이션에 여러 기능이 통합되어있는 서비스 구조.

- 장점

    서비스 초기 구축단계에서 설계하기가 용이하며, 코드 관리가 간편하다

    개발되어있는 환경이 동일하여 복잡도가 낮다

    고가용성 서버 환경 구축이 쉽다

- 단점

    서비스 운영과정에서 수정작업시, 다른 서비스에 영향을 줄 수 있다

    서비스 규모가 커질수록 서비스 간의 관계가 복잡해질 수 있다

    서비스 규모가 커질수록 애플리케이션 구동시간이 늘어나고, 빌드&배포 시간이 늘어난다

    기능별 적절한 기술, 개발언어, 프레임워크 등 선택하기가 어렵다

 

마이크로서비스 아키텍처 (MSA. MicroServices Architecture)

: 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 나누어 변경과 조합이 가능하도록 설계한 서비스 구조

- 장점

    서비스마다 개별 배포가 가능하여 다른 서비스 혹은 전체 서비스에 미치는 영향이 적다

    특정 서비스에 대한 확장이 쉽다. Cloud환경에 적합한 Architecture

    신기술 등 유연한 환경 구축이 어렵지 않다

- 단점

    서비스 복잡도가 높아진다

    서비스간 통신 횟수가 많아진다

    테스트와 트랜잭션의 복잡도가 증가하고, 많은 리소스가 필요하다

    데이터가 여러 서비스에 걸쳐서 분산되기 때문에 한번에 조회가 어렵고, 데이터 정합성 관리가 어렵다

젠킨스(Jenkins)

: 지속적 통합(CI, Continuous Integration)과 지속적 배포(CD, Continuous Deployment)를 지원하는 오픈소스 도구이다.

개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화해 개발 단계를 표준화해준다. 코드의 빠른 적용과 효과적인 관리를 통해 개발 생산성을 높여주며, 컨테이너 인프라 환경처럼 단일 기능을 빠르게 개발해 적용해야 하는 환경에 효율적이다.

 

- 젠킨스 공식 사이트

https://www.jenkins.io/

- Docker 컨테이너를 사용하여 젠킨스 설치 및 배포 (Spring Boot)

https://xggames.tistory.com/20

프로메테우스와 그라파나

: 컨테이너 인프라 환경에서는 많은 종류의 소규모 기능,서비스가 나뉘어 개발되기 때문에, 모니터링이 필요하다. 중앙 모니터링을 할 수 있는 방법중 하나가 프로메테우스와 그라파나 조합이다. 이 둘의 조합은 간결하게 구성할 수 있다.

프로메테우스(Prometheus)는 상태 데이터를 수집해주고, 그라파나(Grafana)는 프로메테우스로 수집한 데이터를 관리자가 보기 좋게 시각화한다. 

참고자료

= https://m.blog.naver.com/dktmrorl/221860647521

= 서적 - 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커, 길벗 - 제 1장