본문 바로가기
  • 개발 삽질 블로그
시스템/Infra

가상화와 컨테이너

by 갹둥 2024. 3. 24.

가상화

-하나의 물리적 리소스를 여러 개의 가상적인 환경으로 분할하야 사용하는 기술

-하나의 물리적 서버에서 여러 개의 가상 서버를 운영하거나 여러 운영체제를 하나의 시스템에서 실행할 수 있음

가상머신(Virtual Machine)

-실제 컴퓨터의 비슷한 환경을 소프트웨어적으로 구현한 가상 환경

-가상머신은 호스트 컴퓨터 위에서 실행되며, 게스트 운영체제를 호스트 컴퓨터와 독립적으로 실행할 수 있게 해줌

-테스트, 개발, 보안, 서버 운영 등 다양한 용도로 사용

 

가상머신을 사용하면

  1. 하드웨어 효율성
  2. 리소스 분리 및 격리
  3. 유연성과 확장성
  4. 테스트 및 개발 용이성
  5. 고가용성 및 복구 기능

 

 

하이퍼바이저(Hypervisor) 

-가상머신을 관리하고 실행하는 소프트웨어

-하드웨어 리소스를 가상머신에 할당하고, 여러 개의 가상 머신이 동시에 실행될 수 있도록 지원

-호스트 운영체제 위에서 가상화 기술을 사용하여 하드웨어와 가상 머신 간의 통신을 관리

-Virtual Machine Monitor라고도 

-ex) VMware, VirtualBox, KVM

 

 

*전가상화 vs 반가상화

전가상화(Full Virtualization)

-가상 머신이 물리적 하드웨어와 완전히 독립적으로 실행되는 기술

가상 머신이 호스트 시스템의 하드웨어와 직접 상호작용하는 것이 아니라 하이퍼바이저가 하드웨어 리소스를 관리하고 가상머신에 필요한 환경 제공

-하이퍼바이저가 모든 명령을 중재해주기 때문에 성능이 느림

 

반가상화(Paravirtualization)

-가상 머신이 완전히 독립적으로 실행되지 않고 일부 수정이 가해진 상태

-가상 머신이 실행될 때 가상화된 환경에서 실행되는 것이 아니라 하이퍼콜이라는 가상화된 인터페이스를 통해 호스트 시스템의 하드웨어 리소스에 직접 엑세스

-전가상화에 비해 성능이 빠르지만, 커널 수정 작업이 필요함

 

 


 

컨테이너

-응용 프로그램과 해당 종속성을 패키징하고 실행하는 데 사용되는 가벼운 소프트웨어 단위

-호스트 운영체제의 리소스를 공유하며 격리된 환경에서 실행될 수 있도록 해줌

-가상 머신과 다르게 게스트 운영 체제를 가지지 않고, 운영 체제의 리소스를 직접 공유하여 실행

-분리를 통해 프라이빗 데이터 센터나 퍼블릭 클라우드, 개발자의 개인 노트북에 이르기 까지 어떤 환경으로든 컨테이너 기반 애플리케이션을 쉽게 지속적으로 배포할 수 있음

-ex) 

 

 

컨테이너를 사용하면

  1. 표준화된 패키지 형식: 컨테이너는 응용 프로그램, 실행 환경 및 종속성을 포함하는 표준화된 패키지 형식으로 패키징됨, 이를 통해 응용 프로그램을 다른 환경으로 쉽게 이동하고 실행할 수 있음
  2. 이식성: 컨테이너는 호스트 운영 체제와 상관없이 실행될 수 있음, 따라서 개발, 테스트 및 배포 프로세스를 단순화하고, 여러 환경에서 응용 프로그램을 일관되게 실행할 수 있음
  3. 성능: 컨테이너는 가상 머신보다 더 가볍고 빠르게 시작될 수 있음, 이는 컨테이너가 호스트 운영 체제와 리소스를 공유하며 가상화 계층이 없기 때문
  4. 확장성: 컨테이너는 쉽게 복제되고 확장될 수 있음, 이를 통해 응용 프로그램의 확장성과 가용성을 쉽게 유지할 수 있음

 

가상머신과 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동하기 때문에 시작이 훨씬 빠르고 가벼움

 

컨테이너 엔진

-컨테이너를 생성하고 실행하는 데 사용되는 소프트웨어

-컨테이너 기술을 구현하고 관리하는 데 필요한 핵심 기능 제공

-ex) Docker

 

컨테이너 오케스트레이션

-여러 개의 컨테이너를 자동화하고 조정하여 복잡한 어플리케이션을 관리하는 프로세스

-컨테이너 기반 어플리케이션을 효율적으로 배포, 확장, 관리하고 안정성과 가용성을 유지하는 데 도움을 줌

-자동 배포, 자원 할당, 스캐줄링, 컨테이너 수 자동 조정, 로드 밸런싱, 자동 복구, 모니터링, 로깅 등의 기능 제공

-ex) Kubernates, Docker Swarm, Apache Mesos 등