Overview
오늘은 libvirt에 대해서 공부해보려고 한다.
libvirt란?
libvirt는, Xen에 대응한 API로서 개발이 시작되었지만, 현재는 "Linux상에서 움직이는 다양한 가상화환경을 조작, 관리하기 위한 공용 인터페이스(추상화라이브러리) 툴킷으로서 개발" 되고 있다.
가상머신의 관리뿐만 아니라, 가상머신이 이용하는 "각종 리소스의 관리기능도 제공" 되고 있다.
libvirt의 개념은 추상화에서 시작된것이다 Hypervior들은 공통된 중요 핵심 기능들이 있을것이다.
핵심기능들은 어떤 Hypervisor든지간에 반드시 가지고 있어야 하는 기능들이다.
핵심기능들을 추상화 개념을 통해서 뽑아내는 것이다. 그래서 공통된 API, 함수들의 모음인 libvirt를 만들어낸 것이다
libvirt 특징
첫 번째로 C 라이브러리이다. c 또는 c++라고 하는데, 두 방식은 비슷하니 별 상관은 없지 않을까 싶다.
어쨌든, C로 쓰여진 함수들이기 때문에 우리들에게 매우 친숙할지도 모른다.
또한 C라고 작성되었다고 해서 다른 언어에서 못쓰는것은 아니다.
펄, 자바, 루비, php, 파이썬 등 다양한 언어로 바인딩 또한 가능하다.
- libvirt를 이용하기위한 API로서의 언어
C/C++(표준)
C#
java
OCaml
Perl
PHP
Python
Ruby
두 번째로 libvirt는 툴이 아니다.
단지 함수들의 모음일 뿐이다. 이 함수들의 모음들을 통해서 Hypervisor를 만드는 응용프로그램을 만드는 것이다.
그렇기에 libvirt는 hypervisor를 관리하기 위한 라이브러리이지, 그 자체로 관리한다는 이야기는 아니다.
이름에서부터 볼 수 있듯이 lib(라이브러리) virt(virtualization의 약어)이다.
- 아래 그림에서 보자면 libvirt를 통해 Mgmt(Management) 프로그램을 만든다.
Hypervisor와 host 사이에 app을 껴놓지 않은 이유가 바로 그것이다. Hypervisor도 host 위에서 돌아가는, 어쨌거나 프로그램이다. Mgmt app 또한 프로그램이다.
Mgmt app을 통해서 Hypervisor를 관리하는 것이지, Mgmt app 위에서 Hypervisor가 돌아가는 것이 아니기 때문이다.
세 번째로 다양한 Hypervisor들을 지원한다. 그 Hypervisor들은 다음과 같다.
- libvirt가 지원하는 가상화환경
KVM/Qemu
Xen
LXC
OpenVZ
VirtualBox
Vmware ESX/GSX/Workstation
Hyper-V
IBM PowerVM
네 번째로 원거리 관리를 지원한다. 다음 그림을 보도록 하자. 이 그림들은 libvirt 개발 사이트에 있는 그림이다.
어딜 가든지간에 libvirt를 설명할 때는 이 그림이 쓰이는 듯 싶다. 위에서 새로운 용어가 나왔다.
정리하고 가자면 node는 물리적 장치(컴퓨터 등)을 말한다.
domain은 그 node 위에서 돌아가는 os를 말한다(hypervisor 위에 올려진 것도 Domain이라 칭한다).
그럼 이제 설명을 하자면, 우리는 원격으로 Hypervisor를 관리하고 싶다. 회사에 있는 Node위에 있는 Hypervisor를 집에서 관리하고 싶다면? host os에 libvirt를 통한 libvirt demon이 설치되어 있으면 집에서도 libvirt app을 통해서 관리가 가능하다.
demon이란 사용자가 관리하지 않고서도 시스템 background에서 작동하는 process의 총칭이다.
libvirt kvm 사용법
VM의 가상 디스크와 사용중인 운영 체제의 ISO를 저장하기 위해 KVM에서 다른 스토리지 풀을 사용하려고 한다.
virsh default pool 삭제 후 나만의 pool 생성 (dong)
$ virsh pool-list
Name State Autostart
-------------------------------------------
default active yes
$ virsh pool-destroy default
Pool default destroyed
$ virsh pool-undefine default
Pool default has been undefined
$ virsh pool-define-as --name dong --type dir --target /data/dong/images
Pool dong defined
libvirt 데몬이 시작될 때 시작되도록 풀을 설정
$ virsh pool-autostart dong
Pool dong marked as autostarted
$ virsh pool-start dong
Pool dong started
$ virsh pool-list
Name State Autostart
-------------------------------------------
dong active yes
$ virsh pool-list --details
Name State Autostart Persistent Capacity Allocation Available
------------------------------------------------------------------------------------
dong running yes yes 3.04 TiB 2.14 TiB 923.89 GiB
만약 사용하던 이미지의 경로를 변경하려면 어떻게 해야할까?
$ virsh shutdown <vm 이름>
# vm 종료
$ virsh pool-edit dong
# 경로 편집
<pool type='dir'>
<name>dong</name>
<uuid>cc870b55-dd26-407a-b78f-672189005437</uuid>
<capacity unit='bytes'>3346677964800</capacity>
<allocation unit='bytes'>2430694768640</allocation>
<available unit='bytes'>915983196160</available>
<source>
</source>
<target>
- <path>/data/dong/disk</path> # 삭제
+ <path>/data/dong/images</path> # 추가
<permissions>
<mode>0755</mode>
<owner>1000</owner>
<group>1000</group>
</permissions>
</target>
</pool>
:wq
$ sudo mkdir /data/dong/images/
$ sudo mv /data/dong/disk /data/dong/images/
$ sudo chown 600 -R /data/dong/images
# 해당이미지를 복사한다.
$ sudo systemctl restart libvirt
# 데몬 재실행
'Understand different OS Concepts > Virtualization' 카테고리의 다른 글
Proxmox란? (0) | 2024.05.24 |
---|---|
Xen Orchestra란? (0) | 2024.05.21 |
Enable Nested Virtualization IN KVM In Linux (0) | 2022.09.02 |
libvirt 자주 쓰는 명령어 정리 virsh (0) | 2022.08.12 |
KVM와 Qemu (0) | 2022.08.08 |