본문 바로가기
Developing../MLOps:k8s

[1]컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커

by bents 2022. 6. 11.

1.컨테이너 인프란 환경

 1-1. 컨테이너 인프라 환경

    : 리눅스 운영 체제의 커널 하나에서 여러 컨테이너격리되어 (서로 영향주지 않으며) 실행되는 환경

 1-2. 컨테이너

    : 하나 이상의 목적을 위해 독립적으로 실행되는 프로세스 

 1-3. 필요한 이유

  - PC: 1명의 관리자가 다양한 응용프로그램을 사용함.

  - 기업: N명의 관리자가 M개의 서버를 같이 사용함.

   *내가 개발한 서비스와 전혀 관계가 없는 다른 서비스의 환경설정 때문에 내 서비스까지 오류나는 상황 방지

2.컨테이너 환경의 장점

 2-1. 가상화 상태에서 동작하는 프로세스보다 빠름(동일 리소스 대비 더 많은 프로세스를 사용할 수 있음 )

 2-2. 마이크로 서비스 아키텍처에 적합한 인프라 환경으로 유지보수에 좋다

  * 모놀리식 아키텍처 : 여러 기능이 통합되어 동작하는 결합된 구조

  * 마이크로서비스 아키텍처 : 개별 기능 중심의 서비스가 독립적으로 동작하는 구조

     - 구조

        1) 각 서비스는 REST API + 서비스 기능 + Data storage 가짐

        2) API Gateway는 외부 요청을 각 서비스의 REST API와 통신함.

        3) 서비스 디스커버리는 각 서비스의 등록 현황을 파악함

        4) 각 서비스는 event로 통신함

        5) 이벤트 버스는 event를 일원화하여 관리 역할을 하는 독립적인 서비스임. 

        6) 인증 , 결제, API Gateway, Service discovery, Event bus 등 모두 서비스임.   

     - 장점 : 유지보수에 적합

        1) 기능에 집중한 안정적인 서비스 구현

        2) 서비스 재사용

        3) 타 서비스와의 연결 구조화

3. 컨테이너 환경의 도구 구성

 3-1. 컨테이너 (엔진) / Docker

      : 컨테이너를 만들고 관리하는 도구 

      : app실행하면 OS에 관계없이 독립적인 환경에서 일관된 결과 보장

 3-2. 컨테이너 관리 / Kubernetes

      : 다수의 컨테이너를 자동 배포, 동작 보증, 동작 확장 등 컨테이너 인프라 환경에 필요한 기능을 통합 지원하는 솔루션

      - 장점

      1) 여러 서비스(컨테이너~=서비스)를 효율적으로 관리하는 환경 제공

      2) 내외부와 유연하게 연결 

 3-3. 개발 환경 구성 및 배포 자동화 / Jenkins

      : MSA처럼 단일 기능을 빠르게 개발 적용하는 환경에 적합한 도구

      : CICD란 빌드,테스트,패키지화,배포를 모두 자동화(표준화)한 개발단계  

 3-4. 모니터링 / Prometheus + Grafana

      : 컨테이너 관리 도구의 상태 데이터를 수집하는 도구 + 데이터를 시각화하는 도구