study/클라우드&쿠버네티스

가상화(Virtualization)와 컨테이너(Containerization)

dddzr 2023. 10. 4. 09:41

가상화의 발전 과정

출처 https://itwiki.kr/w/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_%EA%B0%80%EC%83%81%ED%99%94

  • 전통적인 배포 : 물리서버 기반 애플리케이션 실행
  • 가상화된 배포 : 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM) 실행
  • 컨테이너 개발 : VM과 유사, 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유

 

가상화와 컨테이너

둘 다 확장성과 유연성을 제공하며, 클라우드 환경이나 마이크로서비스 아키텍처에서 특히 유용하게 사용됩니다.

어떤 시스템 레벨을 가상화 하는지가 다릅니다.

 

가상화 (Virtualization)

가상화는 하드웨어 리소스를 추상화하여 가상의 환경을 만들어내는 기술입니다. (하드웨어 레벨 가상화) 이는 하이퍼바이저(Hypervisor)라고 불리는 소프트웨어 계층을 통해 수행됩니다. 가상화는 주로 서버 가상화에 많이 사용되며, 다양한 운영 체제 및 애플리케이션을 하나의 물리적 서버에서 실행할 수 있도록 합니다.

특징 및 관련 개념

  • 하이퍼바이저: 단일 물리적 머신에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어.
  • 리소스 격리: 가상머신 간에 리소스를 격리시켜 각각 독립적으로 운영될 수 있도록 함.

* 하이퍼바이저

  • 타입 1 (Bare-Metal) 하이퍼바이저

호스트 시스템에서 직접 동작하며, 운영 체제 위에 설치되지 않습니다.
일반적으로 높은 성능을 제공하며, 주로 엔터프라이즈 환경에서 사용됩니다.
예시: VMware ESXi, Microsoft Hyper-V (when installed on bare-metal), Xen.

  • 타입 2 (Hosted) 하이퍼바이저

호스트 운영 체제 위에서 실행되며, 일반적으로 더 높은 오버헤드를 가집니다.
개발 및 테스트 환경에서 주로 사용됩니다.
예시: Oracle VirtualBox, VMware Workstation, Parallels Desktop.

 

컨테이너 (Containerization)

컨테이너는 애플리케이션을 실행하기 위한 경량화된 패키지입니다. 컨테이너는 운영 체제 수준(OS 레벨)에서 가상화를 수행하며, 가상 머신에 비해 빠르고 가볍습니다. 가장 널리 사용되는 컨테이너 기술은 Docker이지만, Kubernetes와 같은 오케스트레이션 도구와 함께 사용되는 경우가 많습니다.

특징 및 관련 개념

  • 컨테이너 엔진: 컨테이너를 생성하고 실행하는 소프트웨어(컨테이너 구현 기술). Docker가 가장 널리 사용되는 컨테이너 엔진.
  • 이미지: 컨테이너 실행에 필요한 파일, 설정, 라이브러리 등을 패키지화한 것. (상태값을 가지지 않고 변하지 않음 immutable)

장점

  • 경량화 및 빠른 실행: 컨테이너는 가볍고 빠르게 실행되기 때문에 가상 머신에 비해 효율적입니다.
  • 이식성: 컨테이너는 실행 환경과 상관없이 동일한 동작을 보장하므로, 어디서든 실행 가능하며 이식성이 뛰어납니다. (Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine 등 어디서든 구동됨)
  • 일관된 환경: 컨테이너 이미지에는 애플리케이션과 그 의존성이 패키지화되어 있어, 환경 일관성이 유지됩니다.
  • 스케일링과 확장성: 컨테이너는 가볍고 빠르게 생성되고 제거될 수 있어서, 자동화된 스케일링 및 확장이 용이합니다.
  • 자원 효율성: 하나의 호스트에서 여러 개의 컨테이너를 실행할 수 있어 자원을 효율적으로 활용할 수 있습니다.
  • 마이크로서비스 지원: 컨테이너는 마이크로서비스 아키텍처의 일부로서 각 서비스를 독립적으로 패키지화하고 배포할 수 있게 해줍니다.
  • 지속적인 개발, 통합 및 배포: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 (이미지의 불변성 덕에) 빠르고 쉽게 롤백 할 수 있습니다.

단점

  • 보안 고려사항: 컨테이너는 호스트 운영 체제의 커널을 공유하기 때문에(보안적으로 완전히 격리되지 않음), 보안 측면에서 주의가 필요합니다.