땡글이LAB

[도커/쿠버네티스] 컨테이너 인프라 본문

Devops/도커, 쿠버네티스

[도커/쿠버네티스] 컨테이너 인프라

땡글이B 2022. 6. 30. 00:47

 최근 컨테이너라는 말이 자주 등장하면서 개발자들 사이에서도 '컨테이너' 없는 인프라는 주변에서 찾아보기 힘들다는 말이 많다. 그래서 '컨테이너 인프라'에 대해 알아보자.

 컨테이너 인프라는 컨테이너를 중심으로 된 인프라 환경인데, 여기서 컨테이너가 의미하는 바는 무엇일까?? 

 

컨테이너

컨테이너는 하나의 운영체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미한다. 조금 더 쉽게 풀어 말하자면, 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다.

  • 컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다.

 

 이렇게 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작한다. 이전에는 '모놀리식 아키텍처'를 사용했다. '모놀리식 아키텍처'는 하나의 어플리케이션 혹은 서비스 안에 여러 기능들이 들어가 있는 구조를 의미한다. 물론 초기에 MVP 모델을 개발한다던가 빠르게 개발할 때에는 이점을 가질 수 있겠지만, 추후에 유지보수나 수정 사항이 있을 경우 복잡해진다. 

 

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

MSA 아키텍처는 시스템 전체가 하나의 목적을 지향하는 것은 '모놀리식 아키텍처'와 동일하지만, 기능별로 작은 서비스들을 각각 개발해서 연결하는데에서 '모놀리식 아키텍처'와 차이점을 가진다.

 

 이 MSA 아키텍처는 추후에 유지보수나 수정사항이 생겨도 특정 기능만을 수정하기에 간편하다. 그리고 유저들의 트래픽에 따라 가용성을 즉각적으로 확보해야 하는 IaaS(Infra as s Software : 인터넷을 통해 IT 인프라를 제공하는 클라우드 컴퓨팅) 환경에도 적합하다. 

 

 

MSA 아키텍처 예시

 위 그림을 보면 알 수 있듯이, 각 서비스와 관련된 기능과 독립적인 DB를 가지는 구조로 표현된다. 각 서비스는 API 게이트웨이와 REST API를 이용한 통신 방식으로 사용자(외부)의 요청을 전달한다. 

 

컨테이너 인프라 환경에 적합한 아키텍처

 결론부터 말하자면 컨테이너 인프라 환경에 적합한 아키텍처는 'MSA 아키텍처'다. 컨테이너 인프라 환경에서 제공하는 컨테이너는 MSA 아키텍처의 서비스(기능)이랑 1:1로 대응된다. 즉, 컨테이너 인프라 환경에서 제공하는 컨테이너를 서비스 단위로 포장해('묶어서' 라는 표현을 자주 사용함) 손쉽게 배포하고 확장할 수 있다. 이를 이용하면 설계, 운용 비요이 감소하고 생산성이 향상된다.

 

 컨테이너 인프라 환경은 크게 컨테이너, 컨테이너 관리, 개발 환경 구성 및 배포 자동화, 모니터링으로 구성된다. 이를 지원하는 도구 중 많이 사용되는 도구를 알아보자.

 

도커 (Docker)

 도커는 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구다. 도커로 애플리케이션을 실행하면 운영 체제 환경에 관계없이 독립적인 환경에서 동작됨을 보장한다.

 

 쿠버네티스 (Kubernates)

 쿠버네티스는 다수의 컨테이너를 관리하는 데에 사용한다. 컨테이너의 자동 배포와 배포된 컨테이너에 대한 동작 보증, 부하에 따라 동적 확장 등의 기능을 제공한다. 즉, 컨테이너 인프라의 필요한 기능을 통합하고 관리하는 솔루션으로 동작한다. 

젠킨스 (Jenkins)

 젠킨스는 많은 사람들이 알고 있듯이 지속적 통합(CI), 지속적 배포(CD)를 지원한다. 여기서 말하는 CI/CD는 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화해서 개발 단계를 표준화시킨다. 아울러 개발된 코드의 빠른 적용과 효과적인 관리를 통해 개발 생산성을 높이는 데에 초점이 맞춰져 있다. 즉 컨테이너 인프라 환경처럼 단일 기능을 빠르게 개발해 적용해야 하는 환경에 매우 적합한 도구다. 이외로는 깃허브 액션(Github Action), 팀시티(Teamcity), 트렐로(Trello) 등이 있다.

 

프로메테우스(Prometheus)와 그라파나(Grafana)

 프로메테우스와 그라파나는 모니터링을 위한 도구이다. 프로메테우스는 상태 데이터를 수집하고 그라파나는 프로메테우스로 수집한 데이터를 관리자가 보기 좋게 시각화해준다. 컨테이너 인프라 환경에서는 각 기능들이 독립적으로 개발되어 배포되기 때문에 중앙 모니터링이 필요하다. 프로메테우스와 그라파나를 조합해서 많이 쓰는데 프로메테우스와 그라파나는 컨테이너로 패키징되어 동작하며 최소한의 자원으로 쿠버네티스 클러스터의 상태를 시각적으로 표현한다.

 최근에는 ELK(Elastic Search + Logstash + Kibana) 가 떠오르고 있지만, 여전히 프로메테우스 + 그라파나의 조합은 자주 사용되고 있다.

프로메테우스와 그라파나
ELK

 

References

https://cloud.google.com/learn/what-are-containers?hl=ko

https://steady-coding.tistory.com/595

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

 

 

 

 

Comments