본문 바로가기
Kubernetes/컨테이너 인프라 환경 구축을 위한 쿠버네티스,도커

1. 새로운 인프라 환경이 온다.

by Haengsin 2022. 11. 9.

"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커" 책 보고 공부하기

1.1 컨테이너 인프라 환경이란?

  • 컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경.
  • 컨테이너(Container)는 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미.

1.1.1 모놀리식 아키텍처(monolithic architecture)

하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미.

(장점)

  • 모놀리식 아키텍처에서는 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편.

(단점)

  • 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커짐.
  • 또한, 서비스가 점점 성장해 기능이 추가될수록 처음에는 단순했던 서비스 간의 관계가 매우 복잡해질 수 있음.

예를 들어, 뉴스, 카페, 웹툰, 결제 등의 서비스가 하나의 애플리케이션 안에 포함된 경우를 생각해보자. 보안이나 데이터베이스 접속과 같은 설정을 공통으로 사용하면서 서비스를 구현한다면 개발 속도는 매우 빠를 것이다.

 

하지만, 웹툰 서비스의 사용량이 폭발적으로 증가해 서버를 증설해야 한다고 가정해보자. IaaS 덕분에 사용량 증가에 따라 인프라를 증설하는 것은 어렵지 않다.

 

그렇지만, 웹툰 서비스의 사용량이 늘었다고 해서 뉴스, 블로그 등의 다른 서비스가 포함된 애플리케이션까지 확장하는 것은 상당히 비효율적이다. 또한, 특정 서비스를 수정하는 과정에서 예기치 못한 에러가 발생한다면 해당 서비스 외에 전체 서비스를 이용할 수 없는 상황이 생길 수 있다.

 

이러한 문제를 해결하는 방안으로 마이크로서비스 아키텍처가 등장했다.

 

1.1.2 마이크로서비스 아키텍처(MSA, Microservices Architecture)

시스템 전체가 하나의 목적을 지향하는 바는 모놀리식 아키텍처와 동일하다.

하지만, 개별 기능을 하는 작은 서비스를 각각 개발해 연결하는 데서 그 차이를 보인다.

 

보안, 인증과 관련된 기능이 독립된 서비스를 구성하고 있으며 다른 서비스들도 독립적으로 동작할 수 있는 완결된 구조.

 

(장점)

  • 이러한 구조는 개발된 서비스를 재사용하기 쉽고,
  • 향후 서비스가 변경됐을 때 다른 서비스에 영향을 미칠 가능성이 줄어들며
  • 사용량의 변화에 따라 특정 서비스만 확장할 수 있다.
  • 따라서 사용자의 요구 사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS 환경에 적합하다.

(단점)

  • 하지만, 마이크로서비스 아키텍처는 모놀리식 아키텍처보다 복잡도가 높으며,
  • 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크 호출 횟수가 증가해 성능에 영향을 줄 수 있다.

하나의 애플리케이션 안에 포함돼 있던 뉴스, 블로그, 웹툰, 서비스가 각 서비스와 관련된 기능과 데이터베이스를 독립적으로 가지는 구조로 표현됐다.

 

각 서비스는 API 게이트웨이와 REST(REpresentational State  Transfer) API 를 통한 통신 방식으로 사용자(외부)의 요청을 전달한다.

 

서비스 개수는 고정된 것이 아니기 때문에 어떤 서비스가 등록돼 있는지 파악하기 위해 서비스 디스커버리를 사용한다.

 

또한 수많은 서비스의 내부 통신을 이벤트로 일원화하고 이를 효과적으로 관리하기 위해 별도로 이벤트 버스를 서비스로 구성한다.

 

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

주어진 상황에 따라 아키텍처를 정하면 된다. 정해진 답은 없다.

 

보통 소규모 프로젝트는 구현할 서비스 종류가 많지 않거나 규모가 크지 않아 모놀리식 아키텍처를 선호하는 경향이 있다.

하지만, 소규모 프로젝트라도 마이크로 서비스 아키텍처로 설계하면 기능에 집중한 안정적인 서비스를 구현할 수 있고 구현된 서비스를 재사용할 수 있으며, 해당 서비스를 다른 서비스와 연결해 구조화하기 때문에 장기적으로 볼 때 유지보수 측면에서 매우 유리하다.

 

컨테이너 인프라 환경은 특히 마이크로서비스 아키텍처로 구현하기에 적합하다.

컨테이너 인프라 환경에서는 컨테이너를 서비스 단위로 포장해 손쉽게 배포하고 확장할 수 있다. 컨테이너 인프라 환경에서 제공하는 컨테이너는 마이크로서비스 아키텍처의 서비스와 1:1로 완벽하게 대응한다.

 

 

1.2 컨테이너 인프라 환경을 지원하는 도구

컨테이너 인프라 환경은 크게 컨테이너, 컨테이너 관리, 개발 환경 구성 및 배포 자동화, 모니터링 으로 구성된다.

이를 지원하는 도구 가운데 업계에서 가장 많이 사용하는 도구 몇 가지를 알아보자.

 

1.2.1 도커(Docker)

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

 

도커로 애플리케이션을 실행하면 운영 체제 환경에 관계없이 독립적인 환경에서 일관된 결과를 보장한다.

 

1.2.2 쿠버네티스(Kubernetes)

쿠버네티스(Kubernetes)는 다수의 컨테이너를 관리하는 데 사용한다.

컨테이너의 자동 배포와 배포된 컨테이너에 대한 동작 보증, 부하에 따른 동적 확장 등의 기능을 제공한다.

 

처음에는 다수의 컨테이너만 관리하는 도구였지만, 지금은 컨테이너 인프라 환경에 필요한 기능을 통합하고 관리하는 솔루션으로 발전했다. 

 

쿠버네티스는 컨테이너 인프라를 기반으로 '마이크로서비스 아키텍처' 에서 설명한 API 게이트웨이, 서비스 디스커버리, 이벤트 버스, 인증 및 결제 등의 다양한 서비스를 효율적으로 관리할 수 있는 환경을 제공하고 이를 내외부와 유연하게 연결해준다. 

 

1.2.3 젠킨스(Jenkins)

젠킨스(Jenkins)는 지속적 통합(CI, Continuous Integration)과 지속적 배포(CD, Continuous Deployment)를 지원한다.

지속적 통합과 지속적 배포는 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화해 개발 단계를 표준화한다.

 

컨테이너 인프라 환경처럼 단일 기능을 빠르게 개발해 적용해야 하는 환경에 매우 적합한 도구이다.

 

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

프로메테우스(Prometheus)와 그라파나(Grafana)는 모니터링을 위한 도구이다.

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

 

컨테이너 인프라 환경에서는 많은 종류의 소규모 기능이 각각 나누어 개발되기 때문에 중앙 모니터링이 필요하다. 이때 효율적으로 모니터링하는 방법 중 하나가 프로메테우스와 그라파나의 조합이다. 

 

프로메테우스와 그라파나는 컨테이너로 패키징돼 동작하며 최소한의 자원으로 쿠버네티스 클러스터의 상태를 시각적으로 표현한다.

 

1.3 구성할 컨테이너 인프라 환경

 

Reference