가상화(Virtualization)

황승우·2023년 6월 3일
0

1. 가상화

가상화란

  • 가상화(virtualization)란 클라우드 컴퓨팅을 가능하게 하는 가장 기본이 되는 기술로, 컴퓨터 자원(resource, CPU, 메모리, 하드디스크, 네트워크 등)들의 가상화(추상화)된 버전을 제공하는 기술
    • 추상화
      • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
      • 1개의 자원을 여러 개로 나눌 수 있는 것처럼 여기거나, 여러 개의 자원을 하나인 것처럼 생각하는 과정들을 자원을 '추상화'한다고 함.
  • 가상화는 하나의 실물 컴퓨팅 자원을 마치 여러 개인 것처럼 가상으로 쪼개서 사용하거나, 여러 개의 실물 컴퓨팅 자원들을 묶어서 하나의 자원인 것처럼 사용하는 것.
  • 가상화는 하드웨어의 효율적인 사용과 애플리케이션의 쉬운 배포를 목적으로 사용

가상화 장점

  • 유연성
    • 동일한 하드웨어에서 여러 운영 체제를 동시에 실행할 수 있음
  • 민첩성
    • 한 물리적 서버에서 다른 물리적 서버로 파일이나 사진을 이동하는 것처럼 운영 체제 이동이 가능
  • 내결합성
    • 물리적 서버에 장애가 발생하면 관리 소프트웨어는 이용 가능한 다른 서버로 신속하게 인스턴스를 마이그레이션하여 물리적 하드웨어 장애가 발생했다는 것 조차 알 수 없도록 조치함
  • 비용 효율성
    • 필요한 물리적 서버 수를 줄일 수 있고 전기 요금과 운영 및 유지보수 비용도 절감할 수 있음

가상화 작동 원리

  • 물리적 서버 하드웨어도 물론 계속 필요하지만 해당 하드웨어에 운영 체제를 직접 설치하는 대신 HyperVisor(하이퍼바이저) 소프트웨어를 설치하여 하나의 물리적 시스템을 가상 머신이라는 분리된 여러 가상 환경으로 분할하는 방식을 구현

    • HyperVisor란?

      • VM을 코디네이션하는 소프트웨어 계층

      • 하드웨어의 물리적인 리소스를 VM들에게 제공하고, VM과 하드웨어간의 I/O(Input / Output) 명령을 처리.

      • Virtualization Layer(가상 레이어)에 위치하며 하드웨어와 다수의 VM들 사이의 인터페이스

      • 유형

        • 제 1형 하이퍼바이저
          • 네이티브 또는 베어메탈 하이퍼바이저라고도 부르며, 하드웨어에 직접 설치되어 하드웨어를 게스트 OS를 설치할 수 있는 여러 개의 가상 머신으로 분할해줌
          • 서버에 여러 인스턴스를 실행할 때 가상 머신에 할당되는 전체 RAM을 기반 하드웨어의 전체 물리적 메모리 용량보다 큰 값으로 설정할 수 있음.+이유 찾기
        • 제 2형 하이퍼바이저
          • 호스트 하이퍼바이저라고도 부르며 호스트의 운영 체제 내에 설치되기 때문에 하이퍼바이저 관리 콘솔이 필요하지 않음
          • RAM의 초과/동적 할당을 지원하지 않으므로, 가상 머신에 리소스를 할당할 때 주의 필요
  • 가상화 유형

    • 데스크탑 가상화
    • 네트워크 가상화
    • 스토리지 가상화
    • 데이터 가상화
    • 애플리케이션 가상화
    • 데이터 센터 가상화
    • CPU 가상화
    • GPU 가상화
    • Linux 가상화
    • 클라우드 가상화
  • 가상화 종류

    • CPU Protected Rings(CPU 권한)

      • Ring3 : 사용자 모드 / 일반 유저 모드
      • Ring0 : 커널 모드 / 특권 명령어 실행과 원하는 작업 수행을 위한 작업 접근을 가능하게 하는 모드.
    • 전가상화
      - 호스트 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과 같이 성능의 불이익 없이 가상화를 할 수 있음.

2. VM vs Container

VM

  • 기존에는 프로그램은 ISA와 OS에 해당하는 플랫폼에 귀속되어 이외는 사용하지 못했음.
  • VM은 이러한 상황에서 프로그램에 플랫폼(ISA + OS) 의존성을 없애기 위해 등장.
  • VM이란?
    - 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터
    - 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화하고자 가상화층을 만들고 그 위에 OS를 새로 설치하는 기법

    - 종류
    • 프로세스 VM
      - 프로세스의 가상화(Ex: Alpha CPU 위에서 x86 어플리케이션 작동)
      - 런타임시에 작동
    • 시스템 VM
      - 모든 시스템에 대한 가상화(Ex: Windows 위에서 Linux 작동)
      - VMM/Hypervisor를 통한 가상화

Container

  • 컨테이너화란
    • 커널 하나에 격리된 여러 개의 사용자 공간 인스턴스가 포함될 수 있도록 애플리케이션 수준에서 이루어지는 가상화의 일종
  • 컨테이너의 장점
    • 가벼움
      • 컨테이너는 서버에서 가상 머신보다 공간을 더 적게 차지하며, 시작하는 데에 일반적으로 몇 초 밖에 걸리지 않는다.
    • 탄력성
      • 컨테이너는 매우 탄력적이어서 리소스를 별도로 할당할 필요가 없다. 따라서 컨테이너는 서버의 리소스를 더 효율적이고 동적으로 사용할 수 있다. 컨테이너 하나에 대한 수요가 감소하면 여분의 리소스를 다른 컨테이너에서 사용할 수 있다.
    • 밀도
      • 밀도란 물리적 서버 한 대에서 동시에 실행할 수 있는 개체 수를 의미한다. 컨테이너화를 사용하면 호스트 서버의 리소스를 완전히 이용하지만 과다하게 이용하지 않는 밀집된 환경을 조성할 수 있다. 컨테이너는 전용 운영 체제를 호스트할 필요가 없으므로 컨테이너화는 기존 가상화와 비교하여 보다 밀집한 환경 조성이 가능하다.
    • 성능
      • 리소스 압박이 큰 경우 애플리케이션 성능은 하이퍼바이저를 사용하는 것보다 컨테이너가 훨씬 우수하다. 기존 가상화에서는 게스트 OS도 자체 메모리 요구 사항을 충족해야 하기 때문에 귀중한 RAM을 호스트에서 가져와야 한다.
    • 유지관리 효율
      • 운영 체제 커널이 하나 밖에 없기 때문에 운영 체제 수준에서 업데이트 또는 패치 작업을 한 번만 수행하면 변경 사항이 모든 컨테이너에 적용된다. 이를 통해 서버를 더 효율적으로 운영하고 유지/관리할 수 있다.
  • 하이퍼바이저를 통한 가상화와 차이점

하이퍼 바이저 형 가상화컨테이너 형 가상화
시작 시간몇 분몇 초
이미지 크기수 GB ~ 수백 GB / OS를 포함하여 애플리케이션과 필요한 런타임 소프트웨어~ 수백 MB /
애플리케이션과 런타임 소프트웨어만
Guest OSWindows/Linux 등 다양한 선택 가능호스트 OS 와 동일한 OS
이식성대부분 가상 이미지에 대한 변환이 필요함컨테이너 이미지 그대로 사용 가능
데이터 관리VM 내부또는 연결된 스토리지에 저장컨테이너 내부에 있는 데이터는 종료시 소멸되며, 필요에 따라 스토리지를 이용하여 저장
Guest OS 와의 관계Guest OS는 하드웨어(가상)로 인식Host OS를 커널 수준으로 분리하여 OS를 가상화 형태로 사용하여 필요에 따라 호스트와 리소스 공유 가능

  • 컨테이너 대표 기술

    • 도커

      • 대표적인 리눅스 기반 컨테이너 오픈소스

      • 사실상 도커 컨테이너는 호스트OS 상에서 동작하는 프로세스

      • 그렇다면 가상화의 주요 쟁점인 자원의 추상화는 어떻게 이루어지나?

        1. cgroup(control group)

          • CPU 시간, 시스템 메모리, 네트워크 대역폭 등의 자원을 프로세스 그룹 단위로 제어하는 리눅스 커널의 기능.
          • 즉, 특정 프로세스들에 할당되는 '자원'을 제한하는 기능.
        2. namespace

          • 같은 이름의 함수나 변수 등도 각기의 프로세스에서는 유일하고 독립적인 존재로 만들어 주는 개념.
          • 즉, 특정 프로세스들이 다른 프로세스를 참조할 수 있는 '범위'를 제한하는 기능.
        3. union mount

          • 통합이란 뜻의 union과 물리자원을 디렉토리에 연결하는 과정인 mount의 합성어로 여러 디렉토리를 한 마운트에서 표현되도록 겹쳐 놓은 것
        4. chroot

          • 프로세스가 실행되는 루트를 변경하는 시스템콜
          • 유닉스 계열 OS의 파일시스템은 root(/) 디렉토리를 기준으로 다른 파일을들 탐색할 수 있는데, 어떤 A라는 프로세스를 '/'가 아닌 그 밑의 특정 디렉토리를 루트 디렉토리로 가지게 만들면 A프로세스는 '/'를 root로 가지는 다른 파일에 접근할 수 없게 됨.
          원래 '/' -> 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

https://anweh.tistory.com/67

profile
백엔드 개발자

0개의 댓글