기초 물방울/리눅스&VM

가상화란? 컨테이너, 하이퍼바이저 개념 정리

Weeding 2022. 9. 19. 23:41
반응형
SMALL

1. 가상화란?

  • 우선, 회사에서는 하나의 물리 서버를 보다 효율적으로 사용하길 원합니다. 
  • 이런 필요에 의해서 '가상화 기술'이 발전하게 되었고 현재에 이르러
    VM이나 컨테이너같은 기술들이 만들어지게 되었습니다.
  • 이러한 가상화 기술은, 물리적인 하드웨어를 논리적으로 구분하는 것
  • 즉, 하나의 하드웨어에서 여러개의 시스템을 효율적으로 사용 할 수 있게 해주는 것입니다.
  • 가상화는 크게 2가지 유형이 존재하는데
    1. 가상머신(vm) - 하이퍼바이저를 이용하여 리소스 전체를 가상화하는 방법
    2. 컨테이너(container) - OS수준에서 프로세스를 컨테이너 형태로 격리하는 방법

 

VM은 다시 한번 정의를 하자면 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터입니다.

그리고, 여기에서 '하이퍼바이저'라는 용어가 나오는데 우선 하이퍼바이저에 대해서 알아보도록 하자.

 

 

가상화 이전 가상화 이후
1. Application들이 OS단위에 올라가 있음. 1. Application들이 os 위가 아닌 가상머신 위에 올라감
2. OS들은 CPU, 메모리, 디스크 같은 하드웨어 환경으로 구성 2. 여러가지 컴퓨터들을 띄울 수 있는 환경이 만들어짐
3. 하나의 컴퓨터에는 하나의 App만 운영할 수 있음. 3. 하나의 컴퓨터에 여러가지 환경을 가진 App을 운영할 수 있음.

 

 

2. 각 OS마다 '커널' 이 존재함.

  • 커널이란 하드웨어를 제어하기 위한 명령어
  • 여기서 주목할건 "OS마다 명령어를 해석하는 규칙이 다름"
    ex) 인사 = hello, Hello, HELLO
    ex) 덧셈 = add(맥), ADD(레드햇), Add(윈도우)
  • 나라마다 언어가 다르듯 어떠한 연산을 하려 할 때 위에 예시들처럼 같은 의미이지만 말하는 바(알고리즘)가 다르기 때문에 처리할 명령을 이해할 수 없다. 즉, OS는 같은 의미라는 것을 알지만 하드웨어는 모른다는 것이다.

  • 그러면, 어떻게 이러한 명령어들을 이해해서 각각 OS를 구동하게 할 수 있을까?
    --> OS의 커널을 수정해야한다 (= OS의 소스를 까서 수정을 해야한다는 뜻 = Guest OS를 수정해야한다는 뜻)

    ----> 윈도우는 오픈소스가 아니고 리눅스는 오픈소스이기 때문에 리눅스가 위 방법을 가장 먼저 도입했다고 함.
    ------>  요즘은 윈도우도 Xen에서 제공하는 툴로 전부 다 가능하다고 한다.

    ----> 하이퍼바이저
    ------> 하이퍼바이저가 각 OS마다 말하는 명령을 하드웨어가 이해할 수 있게 하나의 명령어로 번역해줌!

 

3. 하이퍼바이저 (hypervisor)

  • VM과 하드웨어간의 IO명령을 처리하는 인터페이스!
    즉, 아까 이야기한 물리적인 하드웨어를 논리적으로 가상화하는 것을 담당하는 기술이 '하이퍼바이저'이다.
  • 가상머신을 생성하고 구동하는 프로그램 (= 가상머신 모니터)이며,
    이 역시도 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼이라 말할 수 있다.
  • host (=ESXI에 리소스를 제공하는 물리적 컴퓨터)에서
    여러 가상의 GuestOS (=VM에서 실행 되는 운영체제)를 실행하기 위한 플랫폼 이라고 볼 수 있다.


  • 그래서 VM 위에 올라간 OS들의 명령을 하드웨어가 이해할 수 있게 하나의 명령어로 번역해주고, 반대로 각 OS들에게 하드웨어의 리소스들을 나눠주면서 조율해줌 (운용 역할도 담당)

  • 정말 쉽게 생각해서, VMware를 설치하고 CentOS를 올렸다면, CentOS에서 명령들을 하드웨어와 중재하는 역할을 한다라고 이해하면 된다!!

 

 

 

이러한 하이퍼 바이저는 크게 2가지 타입으로 분류됩니다.

출처 : [가상화] 하이퍼바이저와 가상화

 

Type1 (=하이퍼바이저 가상화) Type2 (= 호스트 가상화)
1. native / bare-metal이라 불리는 가상화 방식
(어떤 소프트웨어도 담기지 않은 하드웨어 = 빈깡통)
1. 일반적으로 사용하는 가상화방식(호스트형 가상화)
= 기존 운영체제를 사용하는 시스템에 손쉽게 가상머신 구축 가능!
2. Host OS가 없음 (ex: vmware의 ESXi server ) 2. Host OS위에 하이퍼바이저가 실행되고, 
그 위에 Guest OS를 올리는 방식
(ex : Virtual Box, VMware Workstation)
3. 하이퍼바이저가 os에 종속되지 않고 하드웨어에 직접 설치되는 구조 3. 기존 컴퓨터환경에서 하이퍼바이저를 활용해서
설치용이, 구성 편리, Type1보다 성능이 낮음.
4. 하이퍼바이저가 다수의 VM을 관리하는 형태 4. 당연히 Host OS라는 하나의 Layer가 더 존재하기 때문에
성능면에서 Type1이 Type2보다 유리함. 
5. VM에 설치된 게스트OS들은 하드웨어 바로 위에 구동됨 5. 실제 IDC를 클라우드화 시키는데 사용되는 
하이퍼바이저를 보면 모두 Type1 방식이다.
6. Type2 보다 성능이 좋지만 여러 하드웨어 드라이버를 세팅해야함 6. 리눅스에서 윈도우를 구동하고, 윈도우에서 유닉스를 구동할 수도 있다.

 

 

 

 

4. Type-1의 전가상화 / 반가상화

전가상화 반가상화
1. Full Virtualization
= 하드웨어를 완전히 가상화하는 방식!
1. Para-Virtualization
= 전가상화와 달리 하드웨어를 완전히 가상화하지 않음!
2. 전부 가상화하기 때문에 Guest OS가 Host 시스템과 완전히 분리되어 실행됨... 따라서, Guest OS는 자신이 가상머신의 OS인지 인지하지 못함!

각 Guest OS는 'DOM 0' 이라는 관리 머신을 거쳐 하이퍼바이저와 통신하므로 CPU와 RAM처럼 I/O가 잦은 자원을 컨트롤하기에는 번거로움( -> 반가상화 방식 출현의 배경)
2. 'Hyper Call' 이라는 인터페이스로 직접 하이퍼바이저에게 요청을 날릴 수 있게 해줌.

즉, Guest OS가 하이퍼바이저에 직접 'Hyper Call'을 날려야하니 자신이 Guest OS라는 사실을 인지해야함.
3. 하드웨어를 완전히 가상화 하기 때문에 게스트 운영체제의 별다른 수정없이 사용할 수 있다는 장점이 있다. 3. 따라서, 반가상화 하이퍼바이제 올라가는 Guest OS는 커널을 수정하여, Guest용 OS를 따로 만들어야함.
4. 단점으로는 하이퍼바이저가 모든 명령을 중재하게 되기 때문에 성능이 비교적 느림. 또한, 특정 인스트럭션의 경우 하이퍼바이저가 반드시 처리해줘야함. 4. 전가상화에 비해 성능이 빠르다는 장점이 있다.

 

 

 

 

5. 컨테이너란?

  • 컨테이너는 해운업계 솔루션이였다.
  • 화물을 어떻게 하면 효율적으로 옮길까 라고 생각해봤을 때, 표준화된 컨테이너 박스를 만들고 무엇을 넣어도 표준화된 운송선만 있다면  똑같이 세워서 효율적으로 운송할 수 있는 것이 '컨테이너' 
    --> 이러한 컨셉을 IT에 적용한것이 바로 '컨테이너'이다.

  • 소프트웨어 코드, 애플리케이션 코드가 작동하기 위해 필요한 컴포넌트와 함께 표준화된 방식으로 패키징해서 컨테이너 엔진만 있으면 돌아갈 수 있도록 하는 구조를 '컨테이너'라고 정의함. (컴퓨팅 환경 간 이식성 ↑)

 

 

6. 컨테이너와 VM의 차이

  • "자원 공유의 수준"
  • VM은 하드웨어 가상화로 자원을 공유하는 형태라면
    컨테이너는 호스트OS와 커널공간 그리고 라이브러리, 바이너리 같은 것을 공유하는 형태이기 때문에, 상대적으로 가볍고 그 가벼움으로 인해서(=하이퍼바이저와 게스트OS가 필요없다!), 이미지 카피나 부팅 시간을 줄여서 Scale-in이나 out을 가볍게 VM 대비 상당히 빠른 시간 내에 진행할 수 있게 하는 특징을 가지고 있다. (=더 많은 응용프로그램을 더 쉽게 하나의 물리적 서버에서 구동시키는게 가능함!)
  • 이러한 특성으로 컨테이너는 자원을 굉장히 효율적으로 사용하고 컨테이너 관리 플랫폼과 함께 활용하여 Agile, Devops, 클라우드 네이티브 애플리케이션 아키텍처를 실현하는데 가장 편한 기술로써 각광받고 있다.
  • 최근에는 둘을 상호 보완적으로 사용함.
  • 하드웨어를 VM으로 가상화하고 그 위에 컨테이너 환경을 활용하여 더 효과적으로 사용
    또는, 특성에 맞게 특정 업무는 VM, 컨테이너를 나눠서 사용.

 


 

참고 링크

https://blog.naver.com/alice_k106/220218878967 

https://suyeon96.tistory.com/52

 

반응형
LIST