Template 생성 방법

이 문서는 U-XEN 2 Template을 생성하는 방법을 기술합니다.

template 생성

현재 uxen에서 template 생성은 xeus web interface에서 지원하지 않는다. 따라서 linux shell상에서 cli로 직접 설치를 진행하여야 한다.

OS 설치 이미지 (iso) 복사

scp, sftp등을 이용해 설치하고자 하는 os의 iso 파일을 노드의 /data/iso에 위치시킨다. 각 클러스트의 node는 서로 공유되어 있다면(예를들어 nfs등) 한 node에만 복사하면 된다. 아래의 예는 debian wheezy의 최신 stable iso파일인 debian-7.7.0-amd64-DVD-1.iso로 진행하였다.

node:/data/iso # ls -al
drwxr-xr-x 2 root root       4096 11??25 10:40 .
drwxr-xr-x 5 root root         98  1?? 5 14:10 ..
-rw-r--r-- 1 root root 3942645760 11??18 18:32 debian-7.7.0-amd64-DVD-1.iso

template uuid 생성, 디렉토리 생성

uxen에서는 vm과 vm의 disk등을 구별하기 위해 구별자로 uuid (universally unique identifier)를 사용한다. 임의로 uuid를 생성하고, uxen 구조에 맞게 디렉토리 및 파일을 생성해야 한다. 모두 /data/template 하위에 위치한다. 생성할 디렉토리, 파일들은 아래와 같다.

  • xen config file : / data / template / {vm_uuid} / {vm_uuid}.cfg
  • vm disk image : / data / template / {vm_uuid} / {vm_disk_uuid}.{vhd|qcow2}

먼저 vm의 uuid를 생성한다. 아래의 명령으로 random한 uuid를 생성할 수 있다.

# uuidgen
6460ee09-faa5-4720-858e-4978e6d8f6a8

생성한 uuid로 디렉토리를 만든다.

# mkdir -p /data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8

아래와 같이 사용해도 된다.

# mkdir -p /data/template/$(uuidgen)

VM 디스크 이미지 생성

vm의 uuid와 마찬가지로 vm의 disk도 역시 별개의 uuid를 갖는다. uuidgen을 이용해 vm disk의 uuid값을 생성하고 VM의 디스크로 사용할 vhd 파일을 생성한다.

# cd /data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8
# uuidgen
4d96e48e-faa8-44e1-a55b-550ac17baca3
# qemu-img create -f vpc 4d96e48e-faa8-44e1-a55b-550ac17baca3.vhd  30G

qemu-img의 -f 옵션은 type을 의미한다. 위에서는 30G의 vhd 파일을 생성했다.

만약 -f qcow2의 옵션이라면 qcow2가 생성된다.

# qemu-img create -f qcow2 4d96e48e-faa8-44e1-a55b-550ac17baca3.qcow2  30G

vmware image(vmdk) uxen image(qcow2) 변환

vmware의 vmdk 이미지를 qcow2 이미지로 변환 후 uuidgen을 이용하여 uuid값 파일로 변경한다. 우선 ova 파일을 압축해제한 뒤 vmdk 이미지를 qemu-img 유틸로 컨버팅이 가능하지만 현재 uxen2에서 설치되어져 있는 qemu-img(version 1.7)에서는 vmdk version3을 지원하지 않아 qemu-img 버젼 업데이트(version 2.1) 후 컨버팅이 가능하다. LG U+ 상암에 경우 현재 uxeus(192.168.12.21) 서버에 qemu-img 버젼 업데이트가 되어져 있는 상태이다.

# cd /data/template/vmware_v2v/CENT7/CENTOS7/
# tar xvf CENTOS7_150G_x64.ova
# qemu-img convert -f vmdk -O qcow2 CENTOS7_150G_x64-disk1.img CENTOS7_150G_x64-disk1.qcow2
# mv CENTOS7_150G_x64-disk1.qcow2 {disk uuid}

아래의 convert format 형식을 참조하여 다른 image format을 convert 할 수 있다.

Image format Argument to qemu-img
QCOW@(KVM,Xen) qcow2
QED(KVM) qed
raw raw
VDI(VirtualBox) vdi
VHD(Hyper-V) vpc
VMDK(VMware) vmdk

추가적인 예로 vhd format의 iamge를 convert 할 경우 아래와 같이 작업이 가능하다.

# qemu-img convert -f vpc -O qcow2 image.vhd image.qcow2

xen configure 형식

복사한 iso 파일과 생성한 이미지 파일을 가지고 vm을 실행하려면 xen configure을 생성해야만 한다. xen config파일은 다소 복잡하여 직접 생성하기 보다 아래의 틀(template)를 복사하여 수정이 필요한 부분만 수정하는 것이 편리하다.

# name = "{template의 이름}"
# os = "{template의 os}"
# os_type = "{template의 os 종류}"
# description = "{template의 설명}"
name = "{VM의 UUID}"
uuid = "{VM의 UUID}"
builder = "hvm"
vcpus = {VM의 vcpu core 수}
memory = {VM의 memory (MB)}
disk = ["tap2:qcow2:{template의 이미지 파일 위치},hda,w", “tap2:aio:{OS의 ISO 파일 위치},hdc:cdrom,r”]
vif = ["bridge={bridge interface 이름},model=e1000"]
boot = "{부팅순서}"
hap = 1
pae = 1
acpi = 1
apic = 1
nx = 1
hpet = 1
nestedhvm = 0
localtime = 1
xen_platform_pci = 1
viridian = 0
vga = "stdvga"
vnc = 1
vnclisten = "0.0.0.0"
vncdisplay = {vnc port}
vncunused = 0
usb = 1
usbdevice = "tablet"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "coredump-restart"
bios = "seabios"
device_model_version = "qemu-xen"
device_model_override = "/usr/bin/qemu-system-x86_64"
  • # name = "{template의 이름}"

configure 파일의 위 4줄은 “#”으로 시작된다. 이 라인들의 값은 vm에 미치는 영향은 없으나 추후에 xeus db에 입력되게 된다. template의 이름을 지정한다. 예) debian_wheezy_template

  • # os = "{template의 os}"

template의 os 이름을 관리자 임의로 입력한다. 예) debian_wheezy

  • # os type= "{template의 os type}"

template의 os type을 입력한다. 예) linux 계열 = Linux, windows 계열 = Windows

  • # description = "{template의 설명}"

template에 대한 설명을 기록할 수 있다. 예) wheezy template (basic)

  • name="{VM의 UUID}"

template uuid 생성, 디렉토리 생성에서 uuidgen으로 생성했던 vm의 uuid를 입력한다. 예) 6460ee09-faa5-4720-858e-4978e6d8f6a8

  • uuid="{VM의 UUID}"

uuidgen로 생성했던 vm의 uuid를 입력한다. 위 name과 동일하다. 예) 6460ee09-faa5-4720-858e-4978e6d8f6a8

  • vcpus={VM의 vcpu core 수}

template 설치시 구동할 vm의 vcpu를 설정한다. template으로부터 생성된 vm에는 영향이 없다. 예) 4

  • memory={VM의 memory (MB)}

template 설치시 구동할 vm의 memory를 설정한다. MB단위로 위 vcpus와 마찬가지로 template 생성 시에만 사용된다. 예) 4096

  • disk=["tap2:qcow2:{template의 이미지 파일 위치},hda,w", “tap2:aio:{OS의 ISO 파일 위치},hdc:cdrom,r”]

1-3, 1-1에서 각각 생성하고 복사한 이미지, iso파일의 절대경로를 입력한다. 만약 image 파일이 vhd이라면 tap2:vhd:{file}으로 설정한다.file type이 aio는 raw image를 의미한다. 예) /data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8/4d96e48e-faa8-44e1-a55b-550ac17baca3.qcow2,hda , /data/iso/debian-7.7.0-amd64-DVD-1.iso

  • vif=["bridge={bridge interface 이름},script=vif-openvswitch,model=e1000"]

template vm이 사용할 관리 bridge network interface를 설정할수 있다. 관리 네트워트 대역을 지정하여야만 vm 배포 후 정상적으로 구동이 가능하다.ovs(openvswitch)를 사용할 경우 빨간색 라인에 script 문구를 추가하여 준다. 예) xenbr1

  • boot="{부팅순서}"

vm 구동시 부팅 미디어의 순서를 지정한다. c는 hardisk(vhd), d는 cdrom(iso)를 의미한다. 원하는 순서대로 입력한다. 예) dc

  • vncdisplay={vnc port}
vm 구동시 사용하게 될 vnc의 listening port를 설정한다. 이미 떠 있는 vm의 vnc port와 겹치지 않게 유의한다. 5900부터 시작되므로 1로 설정할시 5901의 vnc port가 열리게 된다.
예) 100

xen configure 생성

위의 configure template을 참고하여(copy&paste) configure 파일을 생성한다. /data/template/{vm_uuid}/{vm_uuid}.cfg로 파일을 생성한다. 아래는 완성된 configure 파일의 예이다.

# vi /data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8.cfg
# name = "debian_wheezy_template"
# os = "debian_wheezy"
# os_type = "Linux"
# description = "wheezy template (basic)"
name="6460ee09-faa5-4720-858e-4978e6d8f6a8"
uuid="6460ee09-faa5-4720-858e-4978e6d8f6a8"
builder="hvm"
vcpus=4
memory=4096
disk=["tap2:vhd:/data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8/4d96e48e-faa8-44e1-a55b-550ac17baca3.vhd,hda,w", “tap2:aio:/data/iso/debian-7.7.0-amd64-DVD-1.iso,hdc:cdrom,r”]
vif=["bridge=xenbr1,model=e1000"]
boot="dc"
hap=1
pae=1
acpi=1
apic=1
nx=1
hpet=1
nestedhvm=0
localtime=1
xen_platform_pci=1
viridian=0
vga="stdvga"
vnc=1
vnclisten="0.0.0.0"
vncdisplay=100
vncunused=0
usb=1
usb device="tablet"
on_poweroff="destroy"
on_reboot="restart"
on_crash="coredump-restart"
bios="seabios"
device_model_version="qemu-xen"
device_model_override="/usr/bin/qemu-system-x86_64"

template vm 구동

template vm을 구동하여 os의 설치를 진행한다.

# xl create 6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8.cfg

error가 발생해 vm이 구동되지 않았을 경우 가용 memory, disk image, iso 파일의 위치, vncport 충돌을 확인해보도록 한다.

vnc 접속

구동된 vm에 원격(vnc) 접속해 OS 설치를 진행한다. 따라서 VM console에 접속할 vncviewer(client)가 필요하다. windows의 경우 많은 vnc client 프로그램이 있으니, 아래의 경로를 참고하여 Download 할수 있다. 아래의 경우 realvnc viewer로 node ip 192.168.0.21에 vncport 100 (6000)에 접속한 경우이다.

리눅스에서는 아래와 같이 진행 할 수도 있다.

client$ apt-get install vncviewer
client$ vncviewer 192.168.0.21:100

vnc client downloads

os 설치

접속이 되면 OS의 설치를 진행할 수 있다. OS의 설치는 Physical Machine에서의 일반적인 OS 설치와 다르지 않으므로 생략한다. 설치가 완료되면 vm이 rebooting된다. 이때 xen config에서 booting 순서를 바꾸지 않으면 CD(iso)로 부팅이 되어 또 다시 OS설치를 진행하게 되므로, vm을 종료시키고 hard disk(vhd)로 먼저 부팅하게끔 booting 순서를 변경해야 한다.

# xl destroy  6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8
# xl list  6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8
# vi /data/template/6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8.cfg
boot="c"
# xl create  6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8.cfg

pv driver 설치

os가 설치되고 부팅이 되면 pv driver를 설치하도록 하자. vm의 os에 pv(paravirtualization) driver가 설치되어 있지 않다면, emualte된 장치를 사용하여 performance에 영향이 있다. pv driver를 설치하면 disk, network에 더 나은 performance를 기대할 수 있다. 리눅스의 경우 kernel 2.6.36 이상일 경우 pv driver가 포함되어 있어 추가로 설치할 필요는 없다. vm에서 아래의 명령으로 확인 할 수 있다.

# dmesg | egrep -i 'xen|front’

windows의 경우 아래의 주소에서 os별로 download 할 수 있다.

OS 설정 및 어플리케이션 설치

vm 배포시 template 그대로 vm에 복사된다. 따라서 필요한 설정이나 package들을 모두 반영해 놓아야 나중에 추가로 설치할 필요가 없어진다. network의 경우 dhcp로 설정해야 vm 배포 후에 정상적으로 사용 가능하다. 네트워크를 제대로 작동하는지, 추가로 설치된 프로그램들은 정상적인지 등등 전체적으로 점검을 진행하는 것이 좋다.

template vm 종료

os 설정 및 어플리케이션 설치가 끝나면 vm을 종료한다. template이 구동 중일 때 vm 배포가 시작되면 filesystem이 깨질수 있으므로 template vm이 종료중인지 꼭 확인한다.

# xl list  6460ee09-faa5-4720-858e-4978e6d8f6a8/6460ee09-faa5-4720-858e-4978e6d8f6a8

xeus에 template 등록

uxen은 5분마다 추가된 template이 있는지 확인하고 자동으로 xeus db에 등록을 시도한다. 아래의 명령으로 xeus db에 즉시 반영할 수도 있다.

# su - orchard
$ python /var/www/uxen/manage.py uxen_api sync_template --settings=settings.production

마지막으로 xeus 에 접속 후 template이 정상적으로 보이는지 확인한다.