Container

컨테이너 인프라 환경

구루싸 2022. 1. 10. 21:33
반응형
SMALL

엔지니어가 개발 환경을 만들어 제공하면 사용자는 그에 맞는 도구를 모두 설치해야 했던 오프레미스(on-premises) 환경은 이제 고전적인 인프라 환경이 되었고 이제는 이미 구성된 환경을 사용자가 필요에 따라 선택하고 조합해서 사용할 수 있게 제공되는 서비스로서의 인프라 환경(IaaS, Infrastructure as a Service)이 됐습니다. 

컨테이너 인프라 환경

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

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

모놀리식 아키텍처는 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 말합니다. 모놀리식 아키텍처에서는 소프트웨어가 하나의 결합된 코드로 구성되기 때문에 초기 단계에서 설계하기 용이하며 개발이 좀 더 단순하고 코드 관리가 간편하지만 서비스를 운영하는 과정에서 수정이 많을 경우, 어떤 서비스에서 이뤄진 수정이 연관된 다른 서비스에 영향을 미칠 가능성이 커집니다. 또한 서비스가 점점 성장해 기능이 추가될수록 단순했던 서비스 간의 관계가 매우 복잡해질 수 있습니다. 

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

마이크로서비스 아키텍처는 시스템 전체가 하나의 목적을 한다는 점에서는 모놀리식 아키텍처와 동일하지만 개별 기능을 하는 작은 서비스를 각각 개발해 연결하는 데서 그 차이를 보입니다. 보안, 인증 등과 관련된 기능이 독립된 서비스를 구성하고 있으며 다른 서비스들도 독립적으로 동작할 수 있는 완결된 구조입니다. 이런 구조는 개발된 서비스를 재사용하기 쉽고 향후 서비스가 변경됐을 때 다른 서비스에 영향을 미칠 가능성이 줄어들며 사용량의 변화에 따라 특정 서비스만 확장할 수 있습니다. 따라서 사용자의 요구 사항에 따라 가용성을 즉각적으로 확보해야 하는 IaaS 환경에 적합합니다. 하지만 마이크로서비스 아키텍처는 모놀리식 아키텍처보다 복잡도가 높으며 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크를 통한 호출 횟수가 증가해 성능에 영향을 줄 수 있습니다.

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

컨테이너 인프라 환경은 크게 컨테이너, 컨테이너 관리, 개발 환경 구성 및 배포 자동화, 모니터링으로 구성됩니다. 이를 지원하는 도구 가운데 업계에서 가장 많이 사용하는 도구 몇 가지를 알아보겠습니다.

도커(Docker)

도커는 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구입니다. 도커로 애플리케이션을 실행하면 운영 체제 환경에서 독립적인 환경에서 일관된 결과를 보장합니다. 컨테이너 도구는 도커 외에도 컨테이너디(Containerd), 크라이오(CRI-O), 파드맨(Podman) 등이 있지만 현업에서 가장 많이 사용하는 소프트웨어는 도커입니다.

쿠버네티스(Kubernetes)

쿠버네티스는 다수의 컨테이너를 관리하는 데 사용합니다. 컨테이너 자동 배포와 배포된 컨테이너에 대한 동작 보충, 부하에 따른 동적 확장 등의 기능을 제공합니다. 처음에는 다수의 컨테이너만 관리하는 도구였지만 지금은 컨테이너 인프라에 필요한 기능을 통합하고 관리하는 솔루션으로 발전했습니다. 쿠버네티스는 컨테이너 인프라를 기반으로 API 게이트, 서비스 디스커버리, 이벤트 버스, 인증 및 결제 등의 다양한 서비스를 효율적으로 관리할 수 있는 환경을 제공하고 이를 내외부와 유연하게 연결해 줍니다. 컨테이너 관리 도구는 도커 스웜(Docker Swarm), 메소스(Mesos), 노마드(Nomad) 등도 있지만, 오직 쿠버네티스만이 급격한 상승세를 보이고 있습니다.

젠킨스(Jenkins)

젠킨스는 지속적 통합과 지속적 배포를 지원합니다. 지속적 통합과 지속적 배포는 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화해 개발 단계를 표준화합니다. 아울러 개발된 코드의 빠른 적용과 효과적인 관리를 통해 개발 생산성을 높이는 데 초점이 맞춰져 있습니다. 즉 컨테이너 인프라 환경처럼 단일 기능을 빠르게 개발해 적용해야 하는 환경에 매우 적합한 도구입니다. 지속적 통합과 배포를 위한 도구는 뱀부(Bamboo), 깃허브 액션(Github Action), 팀시티(Teamcity) 등도 있지만, 젠킨스가 가장 유명하고 대표적입니다.

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

프로메테우스와 그라파나는 모니터링을 위한 도구입니다. 프로메테우스는 상태 데이터를 수집하고 그라파나는 프로메테우스로 수집한 데이터를 관리자가 보기 좋게 시각화합니다. 컨테이너 인프라 환경에서는 많은 종류의 소규모 기능이 각각 나누어 개발되기 때문에 중앙 모니터링이 필요합니다. 

테스트 환경 구축

인프라 환경을 일정하게 유지하고 구성하기 위해 코드형 인프라(Infrastructure as Code)로 테스트 환경을 구축합니다. 코드로 인프라를 생성할 수 있게 지원하는 소프트웨어로는 베이그런트(Vagrant)를 사용합니다. 가상화 소프트웨어로는 버추얼 박스(VirtualBox)를 사용합니다. 

버추얼 박스 설치

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.0 packages, see Virt

www.virtualbox.org

베이스런트 설치

 

Downloads | Vagrant by HashiCorp

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

www.vagrantup.com

베이그런트 명령어

명령어 설명
vagrant init 프로비저닝을 위한 기초 파일을 생성
vagrant up Vagrantfile을 읽어 들여 프로비저닝을 진행
vagrant halt 베이그런트에서 다루는 가상 머신을 종료
vagrant destroy 베이그런트에서 관리하는 가상 머신을 삭제
vagrant ssh 베이그런트에서 관리하는 가상 머신에 ssh 접속
vagrant provision 베이그런트에서 관리하는 가상 머신에 변경된 설정을 적용

 

반응형
LIST