문득 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 volume의 pool로 쓴다. ###
root@youngjulee-ThinkPad-S2:~# lvcreate -V20G -T youngju-group/vms_thinpool -n rhgs_template
### vms_thinpool 에서 rhgs_template 라는 logical volume을 만드는데 size를 20G로 한다. -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 volume의 path
–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 순서대로 $1이 rhgs_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 volume을 snapshot을 뜬다. -T 옵션은 snapshot을 뜰 thin volume을 지정해준다. -s 옵션은 snapshot을 뜨겟단 뜻 ###
root@youngjulee-ThinkPad-S2:~# lvchange -kn youngju-group/rhgs_template
### 중요한건데 snapshot volume은 만들어지면 default로 active가 안되게끔 attr 의 마지막 k 가 켜져 있다. 뭔말이냐면 이 마지막의 k는 lvchange –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 용량 + 가상머신들이 부팅 후 실제 사용한 용량“ 이 된다. 내경우 8대 install 만 하니까 2GB도 안쓰더라.
Ovirt 가 이런식으로 가상머신 image 관리 하는것 같음.