물리적 서버 하드웨어도 물론 계속 필요하지만 해당 하드웨어에 운영 체제를 직접 설치하는 대신 HyperVisor(하이퍼바이저) 소프트웨어를 설치하여 하나의 물리적 시스템을 가상 머신이라는 분리된 여러 가상 환경으로 분할하는 방식을 구현
HyperVisor란?
VM을 코디네이션하는 소프트웨어 계층
하드웨어의 물리적인 리소스를 VM들에게 제공하고, VM과 하드웨어간의 I/O(Input / Output) 명령을 처리.
Virtualization Layer(가상 레이어)에 위치하며 하드웨어와 다수의 VM들 사이의 인터페이스
유형
가상화 유형
가상화 종류
CPU Protected Rings(CPU 권한)
전가상화
- 호스트 CPU의 가상화 기술을 이용하여 전체 하드웨어를 완전히 가상화하는 기술
- OS 제약 없이 사용 가능
- 게스트 OS에서 물리자원을 직접 접근불가
- 전가상화를 실현하기 위해서는 물리적인 가상화지원이 필요
- 전가상화를 하면 root모드와 non-root 모드가 생기게 되는데, 하이퍼 바이저가 root 모드, 운영체제 및 애플리케이션과 같은 도메인이 non-root 모드에 해당
- 게스트 OS가 특권 명령(Privileged Instruction)을 처리해야 하는 상황이 오면 전가상화는 Trap & Emulate 방식으로 처리
- Trap & Emulate
- Trap이란 특권 명령을 실행할 권한이 없는 비특권 모드(게스트 OS)에서 특권 명령을 실행할 때 시스템에 발생하는 예외또는 결함.
1. 비특권 모드인 게스트 OS에서 특권 명령을 수행 시도.
2. 게스트 OS는 트랩 상태(trap state)로 바뀌게 되고, 트랩 핸들러는 VM exit를 통해 제어권을 VMM(Hypervisor)로 넘김.
3. Hypervisor는 해당 명령을 처리(Emulate)
4. 해당 명령의 처리가 끝나면 VM enter를 통해 실행 결과와 함께 제어권을 운영체제로 넘.
- Binary Translation(이진 변환)
게스트 OS에서 특권 명령을 수행하려고 할 때 하이퍼바이저가 바이너리 연산을 통해서 하드웨어가 인식할 수 있는 명령어로 변환하여 전달하는 기법
- CPU에서 직접 실행하는 방식이지만 중간에 하이퍼바이저가 번역하는 과정이 추가
- 반가상화
- 게스트 OS의 커널을 수정하여 특권 명령이 수행될 때 Hypercall을 호출하여 하이퍼바이저가 실행되도록 하는 기술
- 완전히 가상화하지 않기 때문에 게스트 OS는 스스로 가상화된 환경임을 인지하고 있고, 하드웨어 명령을 호스트로 요청하기 위한 드라이버를 필요로 함.
- 하이퍼바이저가 동작하는 호스트의 CPU 등의 장치가 가상화 기술을 지원하지 않아도 이용이 가능
- Trap & Emulate나 Binary Translation과 같이 성능의 불이익 없이 가상화를 할 수 있음.
하이퍼 바이저 형 가상화 | 컨테이너 형 가상화 | |
---|---|---|
시작 시간 | 몇 분 | 몇 초 |
이미지 크기 | 수 GB ~ 수백 GB / OS를 포함하여 애플리케이션과 필요한 런타임 소프트웨어 | ~ 수백 MB / |
애플리케이션과 런타임 소프트웨어만 | ||
Guest OS | Windows/Linux 등 다양한 선택 가능 | 호스트 OS 와 동일한 OS |
이식성 | 대부분 가상 이미지에 대한 변환이 필요함 | 컨테이너 이미지 그대로 사용 가능 |
데이터 관리 | VM 내부또는 연결된 스토리지에 저장 | 컨테이너 내부에 있는 데이터는 종료시 소멸되며, 필요에 따라 스토리지를 이용하여 저장 |
Guest OS 와의 관계 | Guest OS는 하드웨어(가상)로 인식 | Host OS를 커널 수준으로 분리하여 OS를 가상화 형태로 사용하여 필요에 따라 호스트와 리소스 공유 가능 |
컨테이너 대표 기술
도커
대표적인 리눅스 기반 컨테이너 오픈소스
사실상 도커 컨테이너는 호스트OS 상에서 동작하는 프로세스
그렇다면 가상화의 주요 쟁점인 자원의 추상화는 어떻게 이루어지나?
cgroup(control group)
namespace
union mount
chroot
원래 '/' -> root directory
chroot -> A -> '/' => '/bin/bash'
/ -> /User /Library /Download
A -> '/' '/bin/bash'
참고
https://computing-jhson.tistory.com/71
https://selog.tistory.com/entry/가상화-Virtualization가상화-개념-쉽게-이해하기
https://www.ibm.com/kr-ko/topics/virtualization
https://m.blog.naver.com/shakey7/221599135601
https://www.alibabacloud.co.kr/클라우드컴퓨팅에서의-가상화란/
https://velog.io/@klloo/hypervisor
http://www.opennaru.com/cloud/virtualization-vs-container/
https://80000coding.oopy.io/7f4fd1ab-974a-408d-8e12-28dfddae761b