목차
- 가상화란
- 가상화 구성요소
- 가상화 방식
가상화란?
컴퓨터 분야에서 가상이란 말이 붙으면 logical의 동의어로 물리적으로 실체가 있지 않은 무언가를 뜻한다. 가상화는 컴퓨터를 하나의 인스턴스(머신)의 개념으로 간주하여 물리적인 컴퓨터를 인스턴스(머신) 수준으로 가상화한 것을 말한다. 즉 IT 리소스를 논리적으로 분할하는 기술이다.
왜 가상화를 하나? 컴퓨터를 인스턴스로 가상화하여 하나의 컴퓨터 (Host)에서 1개 이상의 가상 컴퓨터를 논리적으로 운용할 수 있기 때문이다.
가상화를 통해 하나의 물리적 하드웨어에 여러 개의 컴퓨터 (인스턴스, 머신)를 운용할 수 있다.
가상화는 굳이 클라우드 컴퓨팅 기술을 사용하지 않더라도 가능하다. 가상화를 할 수 있는 프로그램을 Host 컴퓨터에 설치한다면 해당 컴퓨터 위에 여러 개의 가상 인스턴스를 실행할 수 있는 환경이 마련된다.
나아가 가상화 기술은 클라우드 컴퓨팅의 핵심 기술이다. 클라우드 컴퓨팅은 소비자의 요청에 맞춰 탄력적(elastic)으로 IT 리소스 (CPU, 메모리, 서버, 네트워크)를 운용할 수 있어야하기 때문이다.
가상화 구성요소
가상화 구성요소는 크게 가상화 소프트웨어와 가상 머신으로 나뉜다.
가상화 소프트웨어
가상화 소프트웨어는 하드웨어 리소스 (CPU, GPU, 메모리 등)와 소프트웨어 리소스 (OS, Runtime)를 가상화한다. 따라서 가상화 소프트웨어는 클라우드 컴퓨팅의 핵심 기술이다. 사용자의 요청에 탄력적으로 하드웨어, 소프트웨어 리소스를 제공할 수 있어야 하기 때문이다. 소프트웨어는 Host 컴퓨터의 제어를 위한 복잡한 기술들을 캡슐화하여 인터페이스형태로 가상 머신에 제공한다.
가상 머신 (Virtual Machine)
가상화 소프트웨어를 통해 논리적으로 분리된 기초 머신 단위이다. 위 그림에서 가상머신은 총 3개로 가상화되어있다. 가상 머신은 하드웨어 리소스를 OS를 통해 직접 제어하지 않고, VM 수준에서 가상화 소프트웨어를 통해 제어한다. 각 가상 머신은 서로 다른 OS를 설치할 수 있다.
가상화 방식
가상화의 종류는 크게 3가지가 있다. Host 가상화, 하이퍼바이저 가상화, 컨테이너 가상화이다. 컨테이너 가상화의 경우 근래 가장 많이 사용되는 Docker가 해당된다. Host 가상화 방식은 근래 들어 거의 쓰이지 않는 추세이다. 각각의 특징을 알아보자.
Host virtualization (호스트 가상화)
Host OS위에 가상화 소프트웨어를 설치한다. 그 후 가상머신 별로 가상머신을 실행할 Guest OS를 설치하여 Guest OS에서 가상 머신을 운용하는 방법이다. 가상머신 별로 OS가 설치되기 때문에 오버헤드가 있다. 가상머신 개수 + Host OS 수가 운용되기 때문에 성능저하가 있는 편이라 거의 쓰이지 않는 가상화 방식이다. 대표적으로 Virtual Box, VMware, VM Workstation이 있다.
Hypervisor virtualization (하이퍼바이저 가상화)
물리적인 Host 컴퓨터 위에 가상화 전문 소프트웨어 하이퍼바이저를 설치한다. 의존하는 Host OS가 없다. 하이버파이버 소프트웨어 위에 가벼운 버전의 게스트 OS (Ubuntu 등)를 실행한다. Host OS에 직접 의존하지 않기 때문에 성능상 오버헤드가 Host 가상화에 비해 적다. 또한 하드웨어를 직접 관리하기 때문에 리소스 관리가 유연하다는 장점이 있다. 근래 클라우드 컴퓨팅 기술에서 아직도 가장 많은 비용을 차지한다. (점차 컨테이너 가상화 비율이 높아지는 중)
대표적으로 VMware ESXi, Microsoft Hyper-V 가 있다.
Hypervisor virtualization 1 - full-virtualization (전가상화)
하드웨어를 완전히 가상화하는 방식이다. 관리용 가상머신 DOM0를 통해 각 게스트 OS들의 커널 요청을 번역, 하드웨어에 전달한다. 따라서 병목현상이 발생할 수 있다. (성능 저하)
Hypervisor virtualization 1 - para-virtualization (반가상화)
각 게스트 OS들은 하이퍼 콜을 통해 하드웨어 제어를 요구한다. 전가상화에 반해 병목현상이 없다. 하이퍼 콜을 통해 하드웨어를 제어할 수 있도록 게스트 OS 커널의 수정이 필요하다. 따라서 리눅스와 같은 오픈소스 OS 외에는 반가상화가 어렵다.
Container virtualization (컨테이너 가상화)
컨테이너 (Container)란 애플리케이션 동작에 필요한 라이브러리, 종속 리소스 (데이터베이스, Was 서버 등)들을 패키지형태로 묶어놓은 것을 말한다. 따라서 컨테이너는 Host OS 상의 논리적인 구역이다. 컨테이너는 다른 가상화 방식의 가상 머신과 비슷한 개념으로 볼 수 있다.
그러나 Guest OS를 설치하지 않고 하나의 컨테이너 엔진 위에서 동작한다는 것이 다른 가상화 방식과의 큰 차별점이다. 게스트 OS가 없어 공간상 오버헤드가 적고 가볍고 빠르다.
컨테이너의 이식성이 가상머신 대비 매우 뛰어나다. 기존 가상화 방식의 가상머신 (VM)은 Guest OS와 함께 이식된다면, 컨테이너 가상화는 컨테이너 엔진이 설치된 어느 컴퓨터이건, 컨테이너 (Docker의 이미지)만 이식하면 되기 때문이다. 근래 CSP 회사들의 비율은 하이퍼바이저 가상화와 컨테이너 가상화가 7:3의 비율 정도로 유지되고 있다. 그리고 점차 컨테이너 가상화 기술의 비율이 늘고 있다.
대표적으로 Docker가 있다. Docker는 대표적인 오픈소스 컨테이너 엔진으로 리눅스 컨테이너 기반의 이미지 생성, 배포에 특화된 엔진이다. Kubernetes(쿠버네티스, K8S)는 컨테이너 가상화 환경에서 컨테이너들을 분산, 배치, 구동환경 등을 관리해 주는 도구이다. 2022년부터 Docker 지원을 중단했다.
참고
https://aws.amazon.com/ko/what-is/virtualization/
https://www.redhat.com/ko/topics/virtualization/what-is-a-hypervisor
https://www.atlassian.com/ko/microservices/cloud-computing/containers-vs-vms
'Programming > DevOps, Tools' 카테고리의 다른 글
[Git] 로컬의 프로젝트별로 git config를 적용하고 싶을 때 (0) | 2024.03.08 |
---|---|
[Git] rebase + squash로 커밋 합치기 (2) | 2024.01.24 |
[Docker] mysql 8.0 설치하기 (0) | 2023.06.15 |
[운영체제] 병행 프로세스 (0) | 2023.05.14 |
[GIT 좀 더 이해하기] 3. merge 와 rebase 차이 (2) | 2023.05.11 |
댓글