Profile picture

[Docker] 베어메탈, 하이퍼바이저, 컨테이너에 대해 알아보기

JaehyoJJAng2022년 03월 24일

▶︎ 베어메탈

베어메탈의 사전적 의미는 어떤 소프트웨어도 담겨 있지 않은 하드웨어를 의미한다.

또는 하드웨어만을 구매할 수 있는 제품를 의미하기도 한다. 즉 베어본 컴퓨터와 일부 유사한 의미를 갖는다.

베어메탈이라고 하는 용어가 컴퓨팅 환경에서 부상하게된 이유는 가상화라는 개념 때문이다.

가상화 아키텍처의 경우 두 가지로 분류되는데, 바로 호스트형 가상화와 베어메탈형 가상화로 나뉜다.

호스트형 가상화의 경우 하드웨어 상에 호스트 운영체제가 있고, 그 위에서 가상머신을 구현하는 방식이다.
보통 호스트 운영체제가 커널 수준에서 가상화 기술을 지원한다.

반면에 베어메탈 가상화는 호스트 운영체제 없이 하드웨어 상에 하이퍼바이저가 바로 설치되고, 이 위에 가상 머신을 구현하는 것이다.
이런 하이퍼바이저를 베어메탈 하이퍼바이저라고 부른다.

현재 서버용 하이퍼바이저의 대부분은 베어메탈 하이퍼바이저이며, 데스크톱용 하이퍼바이저의 다수가 호스트형 하이퍼바이저이다.

쉽게 예를 들자면, 서버용 하이퍼바이저에서 자주 사용되는 소프트웨어는 EXSI, Proxmox 등이 있으며

데스크톱용 하이퍼바이저에서 자주 사용되는 소프트웨어는 VMWare, VirtualBox 등이 있다.
image


▶︎ 하이퍼바이저

하이퍼바이저는 가상 머신을 생성하고 구동하는 소프트웨어이다.

가상 머신 모니터(Virtual Machine Monitor,VMM)라고도 불리는 하이퍼바이저는 하이퍼바이저 운영체제와 가상머신의 리소스를 분리하여 VM의 생성과 관리를 지원한다.

하이퍼바이저로 사용되는 물리 하드웨어를 호스트라고 하며 리소스를 사용하는 여러 VM을 게스트라고 한다.

하이퍼바이저는 CPU, 메모리, 스토리지 등의 리소스를 처리하는 풀로, 기존 게스트 간 또는 새로운 가상 머신에 쉽게 재배치가 가능하다.


‣ 하이퍼바이저 유형

가상화에 사용할 수 있는 하이퍼바이저에는 유형 1과 유형 2의 하이퍼바이저가 존재한다.


‣ 유형 1

image
네이티브 또는 베어메탈 하이퍼바이저라고도 불리는 유형 1 하이퍼바이저는 호스트의 하드웨어에서 직접 구동되어 게스트 운영체제를 관리한다.

호스트 운영 체제 대신 VM 리소스는 하이퍼바이저에 의해 하드웨어에 직접 예약 된다.

이러한 유형의 하이퍼바이저는 엔터프라이즈 데이터 센터와 서버 기반 환경에서 가장 일반적으로 많이 사용된다.

본인의 경우에도 X300 미니 pc에 베어메탈 하이퍼바이저로 서버를 운영 중이다.

사용 중인 소프트웨어는 Proxmox VE 8을 쓰고 있다.


‣ 유형 2

image
호스트 하이퍼바이저라고도 불리는 유형 2 하이퍼바이저는 기존의 운영 체제에서 소프트웨어 레이어 또는 애플리케이션으로서 구동된다.

호스트 운영 체제에서 게스트 운영 체제를 추상화하는 방식으로 작동하고, VM 리소스는 호스트 운영 체제에 따라 예약된 후 하드웨어에 대해 실행된다.

유형 2 하이퍼바이저의 경우 개인 컴퓨터에서 여러 개의 운영 체제를 구동하려는 개인 사용자에게 가장 적합하다.

가장 많이 사용되는 소프트웨어로는 VMWare, VirtualBox 등이 있다.


▶︎ 컨테이너

image
기존의 가상화 방식들은 위에서 설명했듯이 OS를 가상화하는 방식이었다.

VMWare, VirtualBox와 같은 대표적인 가상화 서비스도 이와 마찬가지로 HOST OS 위에서 다수의 Guest OS를 가상화하여 사용하는 방식이다.

하지만 이렇게 여러 Guest OS를 가상화하여 사용하는 방식은 사용법이 매우 간단하지만

한편으로는 기술적으로 무거워지는 단점이 존재한다.

각각의 독립적인 OS를 실행시켜야 하고, 또한 해당 OS 이미지를 가지고 있어야 하며 부팅 시간 또한 길어 리소스 또한 많이 차지할 수 밖에 없다.

따라서 개인이 아닌 프로덕션 환경에서는 사용하기가 매우 껄끄럽다.

이렇듯 추가적인 Guest OS를 설치하여 가상화하는 방식은 성능면에서 매우 큰 이슈가 있고, 이를 개선하기 위해 프로세스를 격리된 환경에서 실행하는 기술, 즉 컨테이너 가상화 기술이 등장하게 되었다.

리눅스에서는 이러한 방식을 리눅스 컨테이너라고도 한다.

OS를 가상화하는 것이 아닌, 운영체제 수준의 기술로 리눅스 커널을 공유함과 동시에 프로세스를 격리된 환경에서 실행하는 것.

때문에 하이퍼바이저 가상화 방식보다 더욱 가볍고 빠르게 동작할 수 밖에 없다.


‣ 특징

image
컨테이너는 HostOS의 커널을 공유해서 사용한다. 이 커널을 공유한다는 것이 컨테이너 가상화의 가장 중요한 특징 중 하나다.

하이퍼바이저는 GuestOS와 HostOS의 커널이 독립적으로 존재하고 하이퍼바이저라는 소프트웨어가 중간에서 커널 간의 통신을 지원한다.

각각의 System Call들이 하이퍼바이저를 통해서 HostOS의 커널로 도착하기에 요청이 거쳐가는 단계가 늘어나게 된다. 이 단계가 많다는 것을 오버헤드(Over Head)라고 표현하기도 한다.

하지만 컨테이너는 호스트 OS의 커널을 그대로 사용하기에 하이퍼바이저 방식보다 오버헤드가 적다.

즉, 오버헤드가 적다는 것은 하드웨어 리소스 사용 요청이 더 효율적으로 이루어진다는 뜻이 되기도 한다.

다만, 각각의 커널을 독립적으로 사용하는 가상 머신이 보안 면에서는 더 뛰어나다고 볼 수 있다.

그리고 컨테이너는 호스트 OS의 커널을 공유하기 때문에 호스트 OS와 다른 종류의 OS는 실행할 수 없다는 것이 상대적인 단점이 될 수도 있겠다.


이러한 개념을 이해했으면 이제 앞으로 배울 도커라는 소프트웨어에 대해서 쉽게 이해할 수 있게 될 것이다.

도커는 커널의 컨테이너 가상화 기술을 편리하게 사용하기 위해 만들어진 소프트웨어이다.

사용자는 도커를 통해서 쉽게 컨테이너를 생성하고 운영할 수 있다.

하이퍼바이저 방식에서 격리된 공간을 만드는 소프트웨어가 하이퍼바이저라는 소프트웨어라면

컨테이너 가상화에서 실제 격리를 수행하는 주체는 도커 소프트웨어가 아닌 커널 자체가 된다.

도커는 이 커널의 가상화 기술을 활용할 수 있도록 도와주는 보조 도구라고 생각하면 될 것 같다.


Loading script...