kvm 에서 vm template 만들기

문득 kvm에서 template를 만들어 쓸 순 없을까 라는 생각을 했다.

Disk 용량도 부족한데 … 1개의 가상머신에 10GB 되는 용량을 매번 부여하기가 힘들었다.

그래서 찾아봤는데 lvm thin provisioning 을 이용해서 tempate을 만드는게 잇더라.

정확히 말하면 lvm을 이용해서 template를 만드는게 있었는데 난 거기다 thin volume을 만들어서 좀더 용량을 아끼고 싶엇다. (회사에서 노트북 사줫는데 storage 용량이 198GB임… ; 그래도 memory 32GB랑 기능이 많아서 대 만족중 ㅎㅎ)

내가 참조한 site는 여기 !! https://dnaeon.github.io/creating-a-template-for-kvm-virtual-machines/

일단 나는 lvm thin provisioning volume을 만들어서 template(만든다음 그냥 안쓰기 ㅋ) 한 다음, 이걸 snapshot 을 이용해서 volume을 만들고 이걸 이용해서 kvm virtual machine 을 만든다.

시작!

먼저 lvm 을 이용해서 thin volume 을 만들자.

root@youngjulee-ThinkPad-S2:~# lvcreate –thinpool youngju-group/vms_thinpool -L 40G

### youngju-group 이라는 vgs(volume group) vms_thinpool 이라는 logical volume을 만드는데 이걸 thin volumepool로 쓴다. ###

root@youngjulee-ThinkPad-S2:~# lvcreate -V20G -T youngju-group/vms_thinpool -n rhgs_template

### vms_thinpool 에서 rhgs_template 라는 logical volume을 만드는데 size20G로 한다. -V 옵션은 가상 size를 정하는 옵션으로 실제로 쓴 용량만큼만 할당 하는데 20G 까지 쓸 수 있다는 뜻이다. ###

virt-install script 를 만들엇다.

root@youngjulee-ThinkPad-S2:~# cat virt-install.sh

#!/bin/bash

VMNAME=$1

VMVOLUEM=$2

VMISO=$3

virt-install –connect qemu:///system \ ### localhost qemu hypervisor 에 접속

–name $VMNAME \ ### virtual mathine name

–memory 4096 \ ### memory

–vcpus 2 \ ### cpus

–disk path=/dev/youngju-group/$VMVOLUEM \ ### template 으로 사용할 logical volumepath

–network network=youngju-thinkpad \ ### 사용할 network 기본으로 default

–virt-type kvm \ ### virtual machine type kvm 으로 함.

–os-variant auto \ ### os 종류 인데 fedora 등등 하고 싶은거 하면되는데 auto로 하면 iso이미지 보고 지가 알아서 해줌 별로 중요한건 아니다.

–graphics vnc \ ### console type

–hvm \ ### hardware virtual machine 으로 hardware의 도움을 받아 가상머신을 만들겟다는뜻. 그러니까 full virtualization type으로 만들겟다. Para virtualization hardware의 도움 필요없이 virthal mathine 만들기가 가능한데 os에다가 vmm(virtual machine monitor)기능을 하는 코드를 심어 줘야 한다고 알고잇음.

–cdrom /home/youngjulee/iso/$VMISO ### install cdrom path

### $1 $2 $3 은 이 script를 실행 했을때 위치매개변수를 지정한다. 쉽게말해 virt-install.sh rhgs_template rhgs_template_volume rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso 이렇게 3 개의 위치 argument 가 들어가면 명령어는 $0 순서대로 $1rhgs_template (이름) $2 rhgs_template_voluem (logical volume name) $3 rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso (설치할 iso 이미지) 이렇게 되어 있다. ###

root@youngjulee-ThinkPad-S2:~# ./virt-install.sh rhgs_template rhgs_template rhgs-3.1-u2-rhel-7-x86_64-dvd-2.iso

os install 이 끝나고 나면, system 에서 쓸 tool들을 설치하고 나서 # sys-unconfig 를 한다.

root@youngjulee-ThinkPad-S2:~# sys-unconfig

### windows sysprep 같은건데 system uuid 나 이런것들을 삭제시켜 준다. 재 부팅 시 다시 만들어줌. ###

root@youngjulee-ThinkPad-S2:~# lvcreate -s -T youngju-group/rhgs_template -n rhgs1

### rhgs_template volumesnapshot을 뜬다. -T 옵션은 snapshot을 뜰 thin volume을 지정해준다. -s 옵션은 snapshot을 뜨겟단 뜻 ###

root@youngjulee-ThinkPad-S2:~# lvchange -kn youngju-group/rhgs_template

### 중요한건데 snapshot volume은 만들어지면 defaultactive가 안되게끔 attr 의 마지막 k 가 켜져 있다. 뭔말이냐면 이 마지막의 klvchange –ay 명령어로 activation 할때 skip 하겠다는 뜻이다. 그래서 lvchange -ay activation 할때 -K option을 써서 activation skip을 무시 하고 activation 할건지 아니면 -kn option으로 activation skip option을 없애거나 해야한다. -K option을 하면 재부팅 후 자동으로 activation 되어 있지 않다.

root@youngjulee-ThinkPad-S2:~# lvs -o lv_name,attr,lv_role

LV Attr Role

home -wi-ao—- public

rhceph_template Vwi-a-tz– public

rhgs1 Vwi-a-tz-k public,snapshot,thinsnapshot

### 위의 k 때문에 일반적인 방법으로는 activation 이 안된다. 위에 기술된 내용으로 activation 시키자. ###

root@youngjulee-ThinkPad-S2:~# cat virt-install-template.sh

#!/bin/bash

VMNAME=$1

VMVOLUEM=$2

virt-install –connect qemu:///system \

–name $VMNAME \

–memory 4096 \

–vcpus 2 \

–disk path=/dev/youngju-group/$VMVOLUEM \

–network network=youngju-thinkpad \

–virt-type kvm \

–os-variant auto \

–graphics vnc \

–hvm \

–boot hd ### 요것만 틀림

### 위랑 다 똑같은데 booting hard disk로 한다. 이때 hard disk는 위에서 만든 snapshot volume으로 한다. ###

이렇게 해서 thin volume template 가 되고 snapshot이 가상머신 image 가 되엇다.

Snapshot 을 수십개 떠서 돌려도 실제로 차지하는 disk 용량은 template 용량 + 가상머신들이 부팅 후 실제 사용한 용량“ 이 된다. 내경우 8install 만 하니까 2GB도 안쓰더라.

Ovirt 가 이런식으로 가상머신 image 관리 하는것 같음.

댓글 남기기