[클라우드 컴퓨팅] Virtualization (가상화) - 하이퍼바이저, 컨테이너

·2021년 8월 17일
0

Cloud Computing

목록 보기
1/2

1. Virtualization (가상화)

Virtualization 이란?

물리적인 하드웨어(HW) 장치를 논리적인 객체로 추상화 하는 것

가상화를 관리하는 소프트웨어(주로 Hypervisor)를 사용하여 하나의 물리적 머신에서 가상 머신(VM)을 만드는 프로세스

가상화 이전

어떤 서비스를 운영하기 위해서는 Application들이 OS단위에 올라가 있고, 그 OS들은 CPU, 메모리, 디스크 같은 하드웨어(x86아키텍쳐) 위에 있는 환경으로 구성됨
=> 하나의 컴퓨터에서는 하나의 App만 운영할 수 있음

가상화 이후

어떤 서비스를 운영하기 위한 Application들이 바로 OS위에 올라가는게 아니라 가상머신 위에 올라간다. 그 가상머신에는 이제 여러가지 컴퓨터들을 띄울 수 있는 환경이 됨.
=> 하나의 컴퓨터에서 여러가지 환경을 가진 App을 운영할 수 있음

✔ 그럼 어떻게 다른 OS들을 사용할 수 있을까?

각 OS마다 '커널'이 존재한다. 이 커널은 리소스를 관리하고, 명령어 해석하는 역할을 한다.
그런데 OS마다 명령어를 해석하는 규칙이 다르다.

  • 예를 들어 하드웨어는 덧셈연산을 하고 싶다. 하지만 나라마다 언어가 다르듯이 윈도우OS는 'Add' 라고, 레드헷OS은 'ADD'라고, 맥OS는 'add'라고 말한다. 다 같은 의미이긴하지만 게스트OS마다 말하는 다르기 때문에 처리할 명령을 이해할 수 없다.

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


가상화의 장점

1) 가상화를 이용하면 서버를 통합(Server Consolidation) 하고 서버의 자원을 최대한으로 활용함으로써 서버 급증 문제(Server Proliferation Problem)를 해결할 수 있다.

다양한 어플리케이션을 서비스를하려면 그 만큼 많은 하드웨어 자원이 필요한데, 하드웨어의 성능이 증가되다보니 하나의 서버에서 하나의 어플리케이션만 동작하는 것이 비효율적이다!

2) 가상 머신(VM)은 동일한 물리적 하드웨어에서 구동할 수 있지만 논리적으로는 서로 분리돼 있다. 즉, 한 VM에 오류가 발생하거나 작동이 멈추거나 악성코드 공격을 받아도 같은 시스템내 다른 VM 혹은 다른 시스템으로도 확장되지 않는다.

3) VM은 또한 이동성이 매우 강하다. 하드웨어와 독립적이기 때문에 로컬 또는 원격 가상화 서버 사이를 이동할 수 있다. 물리적 하드웨어에 묶여 있는 전통적인 응용 프로그램에 비해 훨씬 이전이 수월하다.


활용 분야

  • 클라우드에서 서버는 주로 가상화 방식으로 구현된 가상머신(Virtual Machine, VM), 즉 가상 서버 형태로 제공된다.
    • 가상화는 하나의 하드웨어를 다양한 용도에 맞게 분할하여 사용하므로 자원 활용의 경제성을 높이고, 클라우드는 이러한 가상화 자원을 네트워크를 통해 제어하여 유동적 서비스가 가능하게 한다.



2. hypervisor(하이퍼바이저)

hypervisor란?

호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼.

VMM == hypervisor

가상화 머신 모니터(virtual machine monitor) 또는 가상화 머신 매니저(virtual machine manager) 약어로 VMM이라고도 한다.

Hypervisor는 물리적인 호스트 시스템이 여러 대의 가상 머신을 게스트로 운영할 수 있게 해, 메모리, 네트워크 대역폭, CPU 등과 같은 컴퓨팅 자원을 더 효과적으로 사용할 수 있도록 도와준다.

Hypervisor는 필요에 따라 각 VM에 이러한 컴퓨팅 리소스를 할당한다.

  • 가상화의 대상이 되는 컴퓨팅 자원 : 프로세서(CPU), 메모리(Memory), 스토리지(Storage), 네트워크(Network)

하이퍼바이저의 종류

하이퍼바이저의 종류는 크게 제 1형(Native VMM), 제 2형(Hosted VMM)으로 나눈다.


Native VMM (제 1형)

제 1형 하이퍼바이저네이티브(native) 또는 베어메탈(bare metal) 하이퍼바이저라고 하는데, 호스트의 하드웨어에서 직접 구동돼 하드웨어를 제어하고 게스트 VM을 관리한다.

  • 베어메탈(Bare Metal)란 용어? : 하드웨어 상에 어떤 소프트웨어도 설치되어 있지 않은 상태
  • Hardware에 별도의 Host 운영체제 없이, Hypervisor가 직접 실행
  • 운영체제에 별도의 리소스를 할당하지 않기 때문에 Hosted 가상화에 비해 부하가 적고, 리소스 관리가 유연
  • 단, 자체적으로 관리 기능이 없기 때문에 별도의 관리 콘솔 필요.
  • 엔터프라이즈 데이터 센터와 서버 기반 환경에서 가장 일반적으로 사용된다. (서버전용 느낌)
  • 예시 : Vmware ESX/ESXi , Cirtrix Xen , Microsoft Hyper-V, ...

Hosted VMM (제 2형)

제 2형 하이퍼바이저호스트(hosted) 하이퍼바이저라고 불린다. 시스템 상의 다른 응용프로그램과 마찬가지로 전통적인 OS에서 구동된다. 이 경우 게스트 OS는 호스트 상의 프로세스로 구동되는 반면, 하이퍼바이저는 게스트 OS를 호스트 OS에서 분리한다.

  • Hardware의 Host OS 위에 VMM(Virtual Machine Monitor)이 설치되고, 그 VMM에 VM을 할당하여 Guest OS를 구동하는 방법
  • 가상의 VM(Hardware)를 구동하기 때문에 부하가 크지만, 다양한 Guest OS를 설치할 수 있으며, Host Hardware에 대한 제약도 적다.
  • 예시 : VMware Workstation/Server/Player, Microsoft Virtual PC, Oracle Virtual Box, ...



3. Container(컨테이너)

Container란?

운영체제 수준의 가상화 기술로 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술

하드웨어를 가상화하는 가상 머신과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능 상의 손실이 거의 없다.

  • 어플리케이션의 실행에 필요한 라이브러리(Library, Libs), 바이너리(Binary, Bins), 기타 구성 파일 등을 패키지로 묶어서 배포한다. 따라서 구동 환경이 바뀌어도 실행에 필요한 파일이 함께 따라다니기 때문에 오류를 최소화할 수 있음

    • Libs: 프로그램 구동 시에 필요하거나 공통으로 사용할 수 있는 특정 기능의 서브프로그램 또는 소스 코드 집합을 의미. 라이브러리에는 주로 함수(서브루틴), 클래스에 대한 정의, 구성 데이터 등 미리 작성된 코드를 포함

    • Bins: 컴퓨터 저장과 처리 목적을 위해 이진수 형식으로 인코딩된 데이터 파일을 의미하는 것으로 코드의 컴파일(Compile) 또는 압축된 결과물

    • 컴파일: 사람의 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정


Container의 장점

운영체제 수준의 가상화로 빠른 속도와 효율성

별도의 하드웨어 에뮬레이션 없이 리눅스 커널을 공유해 컨테이너를 실행하며 게스트 OS 관리가 필요 없다.

하드웨어 에뮬레이션이 없기 때문에 아주 빠르게 실행된다. 프로세스 격리를 위해 약간의 오버헤드가 있지만 크지 않다. 또한 하나의 머신에서 프로세스만큼 많이 실행하는 것이 가능하다.

높은 이식성(portability)

모든 컨테이너는 호스트의 환경이 아닌 독자적인 실행환경을 가지고 있다. 이 환경은 파일들로 구성되며 이미지 형식으로 공유될 수 있다. 리눅스 커널을 사용하고 같은 컨테이너 런타임을 사용할 경우 컨테이너의 실행 환경을 공유하고 손쉽게 재현할 수 있다.

컨테이너는 Linux, Windows, Mac 등의 운영체제를 가리지 않고, 가상 머신, 물리적 서버, 개발자 컴퓨터, 데이터 센터, 온프레미스 환경, 퍼블릭 클라우드 등 사실상 어느 환경에서나 구동되므로 개발 및 배포가 크게 쉬워진다.


활용 분야

구글에서는 2014년에 이미 모든 서비스를 컨테이너에서 운영하고 있었으며 매주 20억 개 이상의 컨테이너를 실행했다. 이에 대해서는 구글의 컨테이너 페이지에도 설명되어 있다.

Gmail에서 YouTube, Google 검색에 이르기까지 Google의 모든 제품은 컨테이너에서 실행됩니다. 
개발팀은 컨테이너화를 통해 더욱 신속하게 움직이고, 효율적으로 소프트웨어를 배포하며 
전례 없는 수준의 확장성을 확보할 수 있습니다. 
Google은 매주 20억 개가 넘는 컨테이너를 생성합니다.

현재는 구글을 비롯해 넷플릭스(Netflix), 에어비앤비(Airbnb), 핀터레스트(Pinterest), 레딧(Reddit), 포켓몬 고(Pocketmon Go), 스포티파이(Spotify), 틴더(Tinder), 라이엇 게임즈(Riot Games) 등이 컨테이너로 서비스를 운영하고 있는 것으로 알려져 있고, 국내 기업으로는 삼성전자, 삼성SDS, 당근마켓, VCNC, 우아한형제들, 엔씨소프트, 토스 등의 사례가 있다.

상세 사례 보기


4. Container vs hypervisor

(1) 경량화

  • 컨테이너가 서버 가상화 기술을 대체하며 인기를 끌고 있는 가장 큰 이유는 바로 가볍기 때문이다.

  • 기존의 서버에 하이퍼바이저를 설치하고, 그 위에 가상 OS(게스트 OS)와 앱을 패키징한 VM을 만들어 실행하는 방식인 하드웨어 레벨의 가상화와는 달리 컨테이너는 게스트 OS와 하이퍼바이저가 없는 OS 레벨 가상화 구조이기 때문에 시스템에 대한 요구사항이 적다.

  • 컨테이너에는 OS가 포함되지 않아 크기가 수십 MB에 불과하며 운영 체제 부팅이 필요하지 않아 서비스 시작 시간 또한 매우 빠름. 또한 가볍기 때문에 컨테이너에 대한 복제와 배포가 용이하다.

  • 반면, VM에는 게스트 OS가 포함되므로 크기가 수 GB를 넘고, 각각의 게스트 OS마다 운영 체제 구동에 필요한 하드웨어의 가상 복제본(CPU, RAM 등)을 모두 구동해야 하기 때문에 시스템 자원 또한 많이 소모한다.

  • 따라서 컨테이너는 더 많은 응용프로그램을 더 쉽게 하나의 물리적 서버에서 구동시키는 것이 가능하기 때문에 마이크로 서비스 구축에 최적!


(2) 컴퓨팅 자원

  • 컨테이너는 생성 및 실행되면 마치 운영 체제 위에서 하나의 어플리케이션이 동작하는 것과 동일한 수준의 컴퓨팅 자원만을 필요로 함. 때문에 기존의 가상머신 방식 대비 시스템의 성능 부하가 훨씬 적은 편이다.

  • 그리고 컨테이너에서 실행중인 서비스에 더 많은 가용성이 필요하거나 반대로 필요 없을 때, CPU 사용량 또는 사용자가 설정한 임계치에 따라 자동으로 확장 및 축소가 가능하다.


(3) 구동 방식

  • 컨테이너는 특정 클라우드 어플리케이션이 실행되기 위한 모든 라이브러리와 바이너리 파일 등이 패키지화되어 있기 때문에 기존의 시스템에서 실행하는 식으로 구동 방식이 간단하다.

  • 반면, 가상머신 방식은 특정 어플리케이션을 실행하기 위해 먼저 새로운 VM을 띄우고 자원을 할당한 다음, 필요한 게스트 OS를 부팅한 후 어플리케이션을 실행시켜야 한다.


(4) 안정성

  • 컨테이너 기술은 위와 같은 여러 장점이 있으나 안정성에 있어서는 우려되는 부분이 존재한다.

  • 가상머신 방식은 VM들이 각각 독립된 형태로 완전히 분리되어 있기 때문에 안정적인 운영이 가능하지만, 컨테이너 방식은 비록 통제된 영역이라 할지라도 호스트 OS 커널을 공유하는 구조이기 때문에 한쪽에서 장애가 발생하면 다른 컨테이너들 또한 영향을 받을 수 있다.

    • 만일 컨테이너 환경의 응용프로그램이 해킹을 당하면, 컨테이너의 단일 OS를 공격해 다른 응용프로그램에 영향을 미칠 수 있다. VM에서 응용프로그램이 해킹을 당하면 해당 서버에 있는 단 하나의 OS만 영향을 받고 VM 상의 다른 응용프로그램이나 OS는 영향을 받지 않는 것과 차이가 있다.

표로 비교하기



(출처 : https://www.samsungsds.com/kr/insights/msa.html)


출처

https://pearlluck.tistory.com/121
https://mangkyu.tistory.com/86
https://www.ciokorea.com/insider/36713
https://zigispace.net/726
https://kim-dragon.tistory.com/5
https://library.gabia.com/contents/infrahosting/9300/
https://cloud.google.com/learn/what-are-containers?hl=ko
https://m.blog.naver.com/shakey7/221600166205

profile
당근먹고 자라나는 개발자

1개의 댓글

comment-user-thumbnail
2023년 2월 3일

정리 진짜 잘되있네요 감사합니다.

답글 달기