가상화란?
가상화는 서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성하는 데 사용할 수 있는 기술이다.
즉, 단일한 물리 하드웨어 시스템에서 여러 시뮬레이션 환경이나 전용 리소스를 생성할 수 있는 기술이다. 하이퍼바이저(Hypervisor)는 소프트웨어가 하드웨어에 직접 연결되며 1개의 시스템을 가상 머신(VM)이라는 별도의 고유하고 안전한 환경으로 분할할 수 있다. 이러한 VM은 하이퍼바이저의 기능을 이용하여 가상머신의 리소스를 하드웨어에서 분리할 후 적절하게 배포한다. 또한 하드웨어 가상화를 제공하는 소프트웨어 레이어로, 여러 개의 운영 체제를 동시에 실행하고 격리된 환경에서 작동하도록 한다. 다양한 가상화 엔진이 존재하지만 주로 두가지 유형으로 나뉜다.
최근 가상화 기술의 축은 하이퍼바이저 기반의 가상화에서 컨테이너 기반 가상화로 이동하고 있다. 구동하려는 애플리케이션 실행에 필요한 모든 파일을 포함한 전체 실행(runtime) 환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술이다. 이를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경(개발, 테스트, 프로덕션 환경 등) 간에 쉽게 이동할 수 있다.
VM과 비교한 Container 특징
- 격리된 고유 영역에서 애플리케이션을 실행하는 것을 의미하는 컨테이너는 애플리케이션의 실행에 필요한 라이브러리와 바이너리, 기타 구성 파일을 '이미지' 단위로 빌드하여 패키지를 배포한다. 실행에 필요한 모든 환경이 준비되어 있어 어떤 환경에서도 애플리케이션을 오류 없이 동작 시킬 수 있는 것이 가장 큰 특징이다.
- 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍다. 일반적으로 컨테이너에 OS가 포함되지 않아 크기가 수십 MB 에 불과하고, 운영체제 부팅이 필요없어 서비스를 시작하는 시간도 짧다. 크기가 작아 컨테이너 복제와 배포에도 용이하다.
- 애플리케이션을 실행할 때도 물리서버에서 애플리케이션 하나를 실행하는 것과 마찬가지로 호스트 OS위에 애플리케이션의 실행 패키지인 '이미지'를 배포하기만 하면 된다. 반면 VM은 항상 게스트 OS가 포함되어서 보통 수 GB에 해당하고, 애플리케이션을 실행할 때에도 먼저 VM을 띄우고 자원을 할당한 다음 게스트 OS를 부팅하여 애플리케이션을 실행시켜야한다.
이러한 컨테이너 기술은 LXC(Linux Container)에서 출발하는데 이 부분은 다음 게시물에서 더욱 자세하게 다루겠다. 이번 게시물은 가상머신과 하이퍼바이저에 대해 공부해보장.
Type 1: Bare Metal Hypervisor (하이퍼바이저 가상화)
Host OS 없이 하드웨어에 하이퍼바이저를 설치하여 Guest OS를 구동시키는 방식.
전가상화 반가상화로 나뉨.
예) Xen, MS hyper-V, citrix, KVM
- 장점: 별도의 Host OS가 없어서 오버헤드가 적고, 하드웨어를 직접 제어하기 때문에 효율적으로 리소스를 사용할 수 있다.
- 단점: 자체적으로 머신에 대한 관리 기능이 없기 때문에 관리를 위한 컴퓨터나 콘솔이 필요하다. 여러 하드웨어 드라이버를 세팅해야 하기 때문에 설치가 어렵다.
Type 2: Hosted Hypervisor (호스트 가상화)
Base가 되는 Host OS위에 Guest OS가 구동되는 방식.
예) VM Workstation, VMware Server, VMware Player, MS Virtual Sever, Virtual PC, Virtual Box, Paralles Workstation
- 장점: 가상의 하드웨어를 에뮬레이트 하는 방식이기 때문에 호스트 운영체제에 크게 제약사항이 없다.하이퍼바이저에 의해 구동되는 VM 은 각 VM 별로 독립된 가상의 자원을 할당 받는다. 그래서 VM은 논리적으로 분리되어 있어 한 VM에 오류가 발생해도 다른 VM으로 확산되지 않는다. 설치와 구성이 편리하다.
- 단점: VM의 I/O 요청이 반드시 호스트 OS를 통해야 하기 때문에 오버헤드가 클 수 있다.
그럼 Type 1: Bare Metal Hypervisor (하이퍼바이저 가상화)에서 가상 머신 내의 게스트 OS 가 호스트 시스템을 활용한다는 점은 같지만, 게스트 운영 체제가 하드웨어와 상호 작용하는 방식의 차이에서 전가상화, 반가상화로 나눌 수 있다. 이에 대해 자세히 알아보겠다.
전가상화 (Full Virtualization)
Guest OS의 수정이 필요 없도록 H/W 전체를 가상화 하는 기술.
게스트 OS가 하이퍼바이저에게 하드웨어 시스템 제어를 요구하면, 하이퍼바이저는 하드웨어에게 해당 요구 사항을 전달한다.
각 게스트 OS는 ‘DOM 0’이라는 관리 머신을 거쳐 하이퍼바이저와 통신하므로, CPU와 RAM 처럼 I/O가 잦은 자원을 컨트롤 하기에는 번거롭다. 이러한 한계를 개선하기 위해 반가상화 방식이 출현하게 되었다.
- 장점: 하드웨어를 완전히 가상화하기 때문에 Guest OS의 커널 등의 수정이 필요없다. 다양한 OS를 사용할 수 있다.
- 단점: 하이퍼바이저의 관리용 가상 머신이 모든 명령을 중재하고 번역하기 때문에 비교적 성능이 느릴 수 있다.
반가상화 (Para Virtualization)
Guest OS의 커널을 일부 수정하여 특정 명령이 수행될 때 Hypercall을 호출하여 하이퍼바이저가 실행되도록 하는 기술. 하드웨어를 완전히 가상화 하지 않음.
- 장점: 각각의 Guest OS 는 필요한 자원을 직접 요청할 수 있는 능력이 있어 모든 요청을 DOM 0이 한꺼번에 처리하여 하드웨어를 제어하는 전가상화 방식에 비해 성능이 좋다.
- 단점: 일반적으로 반가상화된 게스트 운영 체제는 하이퍼바이저와 통신하기 위한 특수한 인터페이스를 필요로 하며 주로 운영 체제의 커널 코드에 대한 변경이 필수적이다. 이렇게 OS를 수정해야 하므로 게스트 OS가 윈도우(폐쇄적인 운영체제)일 경우 별도의 Tool을 이용해야 해서 번거로움이 있다.
'Open source' 카테고리의 다른 글
Kafka Consumer 실습 - kafka (6) (0) | 2024.03.04 |
---|---|
Kafka Producer 실습 - kafka (5) (0) | 2024.03.02 |
Kafka Consumer & lag 모니터링 - kafka(4) (0) | 2024.02.28 |
Kafka Broker, Replication, ISR - kafka(3) (0) | 2024.02.22 |
Kafka Producer - kafka(2) (0) | 2024.02.22 |