Computing

libvirt 개념 본문

Cloud/개념

libvirt 개념

jhson989 2022. 8. 29. 23:50

Overview

Fig 1. libvirt 로고[1]

 

libvirt[1]는 virtualization platforms을 관리하기 위한 도구로, RedHat에서 만든 open source 프로젝트이다. 쉽게 생각하자면, Qemu-KVM, Xen, VMware 등 다양한 hypervisor들 작동시키기 위한 통합 API라고 생각하면 좋다. 이 API 하나만으로도 여러 hypervisors 및 그들에 의해 생성된 여러 virtual machine(VM)s을 조작할 수 있다. 

 

가상화 소프트웨어에는 QEUM-KVM, Xen, LXC, OpenVZ, VirtualBox, VMware 등 여러 가지가 있다. 이들을 이용해 VM을 생성, 운용, 삭제하고자 할 때에는 각자의 소프트웨어에 맞는 API, CLI 등을 사용하여야 한다. 따라서 여러 가상화 소프트웨어를 동시에 사용할 때에 큰 불편함이 발생한다. 하지만 libvirt는 이러한 불편함을 없애기 위한 통합된 API를 제공하며, 오로지 libvirt API만을 이용해서 QEUM-KVM이나 LXC, VMware 등 여러 가상화 소프트웨어를 조작할 수 있게 된다. (이러한 특징을 hypervisor-agnostic API라고 한다)

 

Fig 2. libvirt 개념도 [2]

 

Fig 2. 는 이러한 통합 API를 제공하는 libvirt의 특징을 잘 나타낸 그림이다. 파란 박스는 여러 가상화 소프트웨어를, 빨간 박스는 libvirt API를 사용하는 관리 애플리케이션(management application)을 의미한다.

 

관리 애플리케이션은 가상화 기술을 사용하는 애플리케이션으로, libvirt API를 통해 VM을 생성, 운영, 삭제할 수 있다. 이때 libvirt는 통합된 API를 제공해주기에, 실제 어떤 가상화 소프트웨어를 사용하든 상관없이 관리 애플리케이션 개발이 가능하다. 여러 가상화 소프트웨어를 공부할 필요가 없이 매우 개발이 쉬워진 것이다.

 

 

 

기존과의 비교

libvirt 개념을 쉽게 표현한 그림[3]이 있어서 가져왔다. 

 

Fig 3. 기존 가상화 소프트웨어 사용 환경과 libvirt 사용 환경의 비교 [3]

 

Fig 3.은 하나의 시스템(노드)에서 가상화 소프트웨어(왼쪽) 및 libvirt(오른쪽)를 사용한 VM 운영 예시를 보여준다. 기존 가상화 소프트웨어를 사용할 때는 리눅스 호스트 위에 하이퍼바이저를 설치하고, 해당 하이퍼바이저를 직접 사용하여 VM를 생성, 운영, 삭제하였다.

 

libvirt를 사용할 경우, 리눅스 호스트 위에 하이퍼바이저와 동시에 libvirt를 설치한다. libvirt는 프로그램이 아닌 API이기 때문에 하이퍼바이저를 조종하기 위해서는 libvirt를 사용하는 관리 애플리케이션(Mgmt app)이 필요하다. 이 관리 애플리케이션을 통해 하이퍼바이저를 조종한다. 오른쪽 그림과 같이 libvirt를 사용하면 서로 다른 하이퍼바이저를 하나의 관리 애플리케이션으로 조종할 수 있게 된다. 이때 libvirt는 각각의 하이퍼바이저에 맞는 driver가 설치되어 있어야 한다.

 

 

 

libvirt를 통한 원격 하이퍼바이저 제어

사실 하나의 노드에서 여러 가상화 소프트웨어를 동시에 사용하거나, 따로 관리 애플리케이션을 만들어 VM을 운용하는 경우는 거의 없을 것이다. 하지만 수십, 수백대의 노드가 있고 그들 위에서 수 많은 VM들을 관리해야 하는 클라우드 플랫폼에서는 사용할 필요성이 있을 수 있다. 이러한 클라우드 플랫폼 관리 애플리케이션을 hypervisor-agnostic API를 사용하여 구현할 경우, 어떠한 가상화 소프트웨어도 조종할 수 있는 있는 flexible한 클라우드 애플리케이션 구현이 가능할 것이다.

 

따라서 클라우드 마스터 노드에서 컴퓨팅 노드에 있는 하이퍼바이저 원격 조종 기능이 필요한데, libvirt는 이러한 기능을 지원한다. Fig 4.는 libvirt 및 libvirt 데몬을 이용한 원격 하이퍼바이저 제어를 나타낸 그림이다.

 

Fig 4. 원격 하이퍼바이저 제어 [3]

 

Fig 4. 처럼 클라우드 플랫폼(Mgmt app)은 libvirt API를 통해 물리적으로 다른 노드에서 실행되는 VM을 생성, 운영, 삭제할 수 있다. 이때 원격 노드는 libvirtd라는 데몬이 실행되고 있어야 하는데, libvirt를 설치하면 자동으로 실행된다고 한다. oVirt, OpenStack 등 다양한 클라우드 플랫폼 애플리케이션이 libvirt를 사용하여 수 많은 VM들을 운영하고 있다. libvirt를 통해 통합된 API를 사용할 수 있기에 한번 배워두면 수 백의 노드를 사용하는 클라우드 플랫폼도 좀 더 쉽게 개발할 수 있을 것 같다.

 

(확인이 필요한 부분이 있는데, oVirt의 경우 마스터 노드에서 libvirt XML 파일을 컴퓨팅 노드에 전송하면, 컴퓨팅 노드가 직접  libvirt를 통해 전송된 libvirt XML 파일에 기반한 VM을 실행시킨다고 알고 있다. oVirt가 원격 실행을 이용하는 지는 확인해보아야 겠다.) 

 

 

Reference

[1] https://libvirt.org/

[2] https://commons.wikimedia.org/wiki/File:Libvirt_support.svg

[3] https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=236897