KVM kasutamine Ubuntu 10.04 operatsioonisüsteemiga

Allikas: Kuutõrvaja
Redaktsioon seisuga 17. november 2009, kell 00:51 kasutajalt Imre (arutelu | kaastöö) (Guestide kasutamine virsh utiliidi abil)

Sissejuhatus

KVM (Kernel-based Virual Machine, ingl. k. tuumapõhine virtuaalmasin) on Linuxi kernelis asuv virtualiseerimise tugi, mis toetab nn native virtualization'it st töötab näiteks AMD-V ja Intel-VT protsessoritega.

KVM tekitab /dev/kvm seadme, mida kasutab modifitseeritud kasutajaprogramm (ingl. k. user-space program) QEMU selleks, et korraldada virtuaalsetele arvutitele aadressruumi, I/O, video jms ressursside kasutamist.

Seda operatsioonisüsteemi eksemplari, kus asub /dev/kvm seade nimetatakse host'iks (ingl. k. majutaja) ja virtuaalseid arvuteid nimetatakse guest'ideks (ingl. k. külaline).

KVMi iseloomustavad sellised asjaolud

  • nn kernel.org tuumas on kasutatav KVM tugi
  • kvm tehnoloogiat saab 2008 aasta suvel kasutada x86 arhitektuuriga arvutitest AMD-V ja Intel-VT toega protsessoritega, st praktiliselt viimastel aastatel toodetud uuemate mudelitega
  • guest operatsioonisüsteemina saab kasutada suurt hulka erinevaid operatsioonisüsteeme, muu hulgas Linux, OpenBSD, Windows

KVM arendamist korraldab Avi Kivity.

KVM hostis ei töötavad seoses guestidega kahte tüüpi protsessid

  • libvirtd - libvirt teekide vahendusel töötav KVM guestide haldusliides
  • kvm - üks või enam töötavad kvm protsesse, mis vastavad virtuaalsetele arvutitele

KVM hosti ettevalmistamine

Kui hostiks kasutatakse x86 riistvara ja mis iseenesest sisaldab Intel-VT või AMD-V tehnoloogia tuge peab veenduma, et see on ka kasutuses (nt sisselülitatud arvuti BIOS'est). Kui käsk väljastab midagi, ju siis on

 # egrep '^flags.*(vmx|svm)' /proc/cpuinfo

KVM tarkvara ja halduse abivahendite paigaldamine

Ubuntu paketihaldusest tuleb paigaldada tarkvara öeldes

 # apt-get install ubuntu-virt-server ubuntu-virt-mgmt

Lisaks on abiks vnc server ning koos sellega window manager, nt wmaker

 # apt-get install tightvncserver wmaker xterm xfonts-base

Ettevalmistused KVM guestis võrgu kasutamiseks

Selleks, et KVM guest saaks pöörduda võrku, tuleb kirjeldada KVM hostis sobivad sillad. Nt olgu hostis kaks füüsilist võrgukaart

  • eth0 - teenuse pakkumisega seotud liiklus
  • eth1 - hosti haldusega seotud liiklus

Sellisel juhul võiks kasutada nt sellist /etc/network/interfaces faili

 # The loopback network interface
 auto lo
 iface lo inet loopback
 
 auto eth0
 iface eth0 inet manual
 
 auto br0
 iface br0 inet manual
       bridge_ports eth0
       bridge_stp off
       bridge_fd 0
       bridge_maxwait 0
 
 auto eth1
 iface eth1 inet static
       address 192.168.2.122
       netmask 255.255.255.0
       gateway 192.168.2.245

kus

  • hosti operatsioonisüsteem ei kasuta br0 võrguseadet ip liikluse jaoks ja seetõttu ei ole seadistatud seal ip aadressi
  • bridge_stp off - spanning tree protocol tugi on br0 sillal välja lülitatud

Ettevalmistused KVM guestis plokkseadme kasutamiseks

KVM guesti plokseadmele võib vastata hostis

  • fail - nt /srv/kvm/arvuti-1.img
  • füüsiline ketas - nt /dev/sdc
  • LVM köide - nt /dev/serverid/arvuti_1

Muude eelistuste puudumisel võib olla LVM hea valik kuna võimaldab plokkseadmeid mugavalt provisioneerida.

Guestide kasutamine virt-manager abil

Üldiselt saab KVM guestide kasutamist juhtida libvirt liidese abil kahe haldusprogrammiga

  • virsh - konsoolis kasutamiseks shell
  • virt-manager - graafiline haldusliides

virt-manager tuleb käivitada selliselt, et tal oleks nö kuhugi graafilist pilti näidata, nt hostis töötavas VNC serveris, käivitamine toimub öeldes

 # virt-manager -c qemu:///system

ning avaneb sarane pilt

Kvm-ubuntu-1.gif

virt-manger abil saab

  • guest moodustada
  • guest käivitada
  • guest seisata
  • guest kustutada

virt-manager kasutamine on suhteliselt intuitiivne, KVM tehnikaga tutvumiseks on tõenäoliselt sobiv alustada graafilisest kasutajaliidesest.

Guestide kasutamine virsh utiliidi abil

virsh utiliide abil saab kontrollida kohalikus ning üle võrgu ssh'ga ligipääsetavat kvm süsteemi tekstiterminali kaudu, kusjuures virsh utiliiti tuleb kasutada juurkasutajana. virsh võimaldab

  • guesti moodustada
  • guesti kävitada
  • guesti seisata
  • guesti kustutada
  • guesti seadistusi uurida ja muuta

KVM kasutamise tundmaõppimiseks võiks olla efektiivne tegevuste järjekord selline, et esmalt moodustada virt-manager abil mõned guestid ning seejärel püüda neid virsh abil juhtida ja tutvuda nende omadustega; ning seejärel katsetada gueste moodustada otsekohesemalt kui virt-manager abil.

virsh abil samas arvutis töötava KVM hüperviisoriga ühendumiseks sobib öelda, jõutakse nö virsh prompti

 # virsh -c qemu:///system
 Connecting to uri: qemu:///system
 Welcome to virsh, the virtualization interactive terminal.
 
 Type:  'help' for help with commands
        'quit' to quit
 # virsh  

Näitena küsides süsteemi omadusi öeldakse nt

 virsh # nodeinfo
 CPU model:           x86_64
 CPU(s):              16
 CPU frequency:       2261 MHz
 CPU socket(s):       4
 Core(s) per socket:  4
 Thread(s) per core:  1
 NUMA cell(s):        1
 Memory size:         12318924 kB

Teise arvutis töötava hüperviisori kasutamiseks sobib öelda, tavaliselt korraldatakse seejuures, et ühest arvutist saab teise sisse logida ssh võtmega

 # virsh -c qemu+ssh://192.168.2.121/system
  • Guesti omaduste küsimiseks sobib öelda
 virsh # dominfo openbsd
 Id:             1
 Name:           openbsd_1
 UUID:           2b91444a-4cec-ec49-7098-7795ebeecb21
 OS Type:        hvm
 State:          running
 CPU(s):         1
 CPU time:       3042.3s
 Max memory:     1048576 kB
 Used memory:    1048576 kB
 Autostart:      disable
 Security model: apparmor
 Security DOI:   0
 Security label: libvirt-2b91444a-4cec-ec49-7098-7795ebeecb21 (enforcing)

Guestide käivitamine ja seiskamine

  • Kõigi KVM kontrolli all olevate guestide nimekiri
 virsh # list --all
  Id Name                 State
 ----------------------------------
   1 openbsd            running
   2 debian             shut off
  • Domeenide käivitamine ja seiskamine
 virsh # start debian
 Domain debian started

ja seiskamiseks

 virsh # shutdown debian
 Domain debian is being shutdown

Nö voolu eemaldamisega on samväärne öelda

 virsh # destroy debian
 Domain debian destroyed

Mitmete käskude andmisel tuleb arvestada, sündmuste toimumiseks kulub aeg, nt tasub peale shutdown ütlemist jälgida list abil, kas soovitud tulemus on saavutatud.

Guesti kirjelduse lisamine süsteemi

  • Domeeni kirjelduse kustutamiseks sobib öelda
 virsh # undefine arvuti
 Domain arvuti has been undefined
  • Selleks, aga hosti alglaadimise käigus guest käivituks, tuleb öelda
 virsh # autostart arvuti

Misc

  • Plokkseadme lisamine, reboot kehtestab lisa
 virsh # attach-disk arvuti /dev/serverid/arvuti_vdb vdb

Guesti kirjelduse haldamine

Guesti kirjeldused asuvad kataloogis /etc/libvirt/qemu, aktiivsed kataloogis /var/run/libvirt/qemu ja nt selleks et täpsustada guesti võrguseadme mudelit, tuleb sooritada selline järgnevus

 # virsh dumpxml virt-arvuti > /tmp/virt-arvuti.xml

Lisada tekstiredaktoris /tmp/virt-arvuti.xml faili sektsiooni

 <interface type='bridge'>
   <mac address='70:00:00:10:02:54'/>
 </interface>

juurde rida

   <model type='e1000'/>

ning öelda

 # virsh define /tmp/virt-arvuti.xml

KVM guesti konsool

KVM guesti konsoolile saab ligi kahel viisil

  • virt-manager graafilise kasutajaliidese abil

Kvm-ubuntu-2.gif

  • virsh abil ilma kasutades tekstiterminali kusjuures guesti jaoks toimub ühendus üle tema serial konsooli, st peab olema seadistatud kuulama nt getty serialile failist /etc/inittab reaga
 T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

Kvm-ubuntu-3.gif

Guesti kloonimine

Kloonimise teel saab moodustada olemasoleva guesti alusel uue virtuaalse arvuti, süsteem tagab, et need uue arvuti omadused, mis peavad olema on unikaalsed, nt UUID väärtus. Kloonida saab olemasolevat guesti, mis parasjagu ei tööta nt selliselt

 # virt-clone --connect qemu:///system -o arvuti_1 -n arvuti_2 -f /dev/serverid/arvuti_2 -m 54:52:00:32:d7:21
 This will overwrite the existing path '/dev/serverid/arvuti_2'!
 Do you really want to use this disk (yes or no)? yes
 Cloning /var/lib/libvirt/ 100% |=========================| 7.0 GB    00:56     
  
 Clone 'arvuti_2' created successfully.

kus

  • -o arvuti_1 - originaal mida kloonitakse
  • -n arvuti_2 - uue tekitatava arvuti nimi
  • -f /dev/serverid/arvuti_2 - uus arvuti asub LVM köitel
  • -m - uue arvuti mac aadress, vastasel korral kasutatakse juhuslikku väärtust

Guesti seadistusfail

Libvirt KVM guesti seadistusfail näeb välja üldiselt selline, seda sobib kasutada nt mujalt kopeeritud operatsioonisüsteemi failisüsteemi KVM all käivitamiseks

 <domain type='kvm'>
   <name>template</name>
   <uuid></uuid>
   <memory>1048576</memory>
   <currentMemory>1048576</currentMemory>
   <vcpu>2</vcpu>
   <os>
     <type arch='x86_64' machine='pc-0.11'>hvm</type>
     <boot dev='hd'/>
   </os>
   <features>
     <acpi/>
     <apic/>
     <pae/>
   </features>
   <clock offset='utc'/>
   <on_poweroff>destroy</on_poweroff>
   <on_reboot>restart</on_reboot>
   <on_crash>restart</on_crash>
   <devices>
     <emulator>/usr/bin/kvm</emulator>
     <disk type='block' device='disk'>
       <target dev='sda' bus='sda'/>
     </disk>
     <interface type='bridge'>
       <mac address='70:00:00:01:00:01'/>
       <model type='e1000'/>
     </interface>
     <interface type='bridge'>
       <mac address='70:01:68:00:00:01'/>
       <model type='e1000'/>
     </interface>
     <serial type='pty'>
       <target port='0'/>
    </serial>
    <console type='pty' tty='/dev/pts/2'>
       <target port='0'/>
     </console>
     <input type='mouse' bus='ps2'/>
     <graphics type='vnc' port='5900' autoport='yes' keymap='en-us'/>
     <video>
       <model type='cirrus' vram='9216' heads='1'/>
     </video>
   </devices>
 </domain>

kus tuleb jälgida, et unikaalsed väljad ei läheks omavahel konflikti süsteemis juba eksisteerivate guestiga

  • uuid - jätta tühjas, süsteem täitab ta ise sobiva väärtusega
  • graphics on vajalik selleks, et virt-manager pilti näitaks
  • kettaseadme bus väärtus on scsi mis nö süntaksiliselt väljendub selles, et plokkseadme nimi on guestis kujul /dev/sda; alternatiivideks oleks vastavalt ide -> hda ja virtio -> vda
  • võrgukaardi tüüp on valitud e1000, alternatiiv võiks olla samuti nt virtio, aga ka mitmed muud tuntud riistvaralised mudelid
  • mac aadressid on kaval kirjutada teisendatud vastavate ip aadressidena, antud juhul vastavalt
 10.0.10.1   -> 70:00:00:10:00:01
 192.168.0.1 -> 70:01:68:00:00:01

Mittegraafiliste vahenditega guesti paigaldamine

Tundub, et KVM kasutamine üldiselt eeldab vähemalt guest operatsioonisüsteemi paigaldamisel graafilise kasutajaliidese kasutamist. Esitatud järgnevus on üks viis paigaldada Debian Lenny operatsioonisüsteem kasutades selleks vaid tekstiterminali

  • moodutada guesti plokkseadmele vastav LVM köide
 # lvcreate -L2G -n arvuti serverid
  • moodustada plokkseadmele fdisk partitsioonitabel
 # fdisk /dev/serverid/arvuti
 ...
  • ühendada plokkseade külge
 # kpartx /dev/serverid/arvuti
 # mount /dev/serverid/arvuti1 /mnt/arvuti
  • debootstrap abil paigaldada sinna operatsioonisüsteemi failisüsteem
 # debootstrap lenny /mnt/arvuti http://ftp.ee.debian.org/debian
  • paigaldada udev ja openssh-server paketid
 # chroot /mnt/arvuti
 # apt-get install udev openssh-server
  • kohendada /etc/fstab, /etc/network/interfaces
 ...
  • paigaldada alglaadur
 # grub-install --recheck --no-floppy --root-directory=/mnt/arvuti

Guesti moodutamiseks tuleb kasutada sobivat seadistusfaili, nt eelmise punkti alusel moodustatud guesti definitsioonist ning öelda

 # virsh define arvutinimi.xml

Ning seejärel guest käivitada

 # virsh start arvutinimi

OpenBSD guesti kasutamine

OpenBSD guesti kasutamisel tuleb arvestada, et suhteliselt igasugune tegevus ajab arvuti koormuse kiiresti üles, iseenesest küll süsteem töötab, kui ei sobi praktiliselt peale manuaalide lugemise eriti muuks.

OpenBSD võrk töötab normaalsemalt e1000 seadmega kuid kõvaketta kiirus on ca 2-3 MBait/s ja koormab süsteemi. 4.6 ei boodi ilma kui UKC abil mpbios välja lülitada

 boot> bsd -c
 ...
 UKC> disable mpbios
  54 mpbios0 disabled
 UKC> quit

ning süsteemis öelda näiteks, et salvestada muudatus tuuma binaari

 # config -ef /bsd
 ...  
 ukc> disable mpbios
  54 mpbios0 disabled
 ukc> quit
 Saving modified kernel.

Guesti alglaadimine CD tõmmiselt

Guesti alglaadimiseks CD tõmmiselt tuleb seadistusfaili juure defineerida nt selline seade RIPLinux puhul

 <disk type='file' device='cdrom'>
   <target dev='hdc' bus='ide'/>
   <readonly/>
 </disk>

ning alguses peab olema kirja, et alglaadida cdrom seadmelt

 <os>
   <type arch='x86_64' machine='pc-0.11'>hvm</type>
   <boot dev='cdrom'/>
 </os>

RIPLinuxi abil on lisaks muude haldusprotseduuride tegemisele võimalik paigaldada kõvakettale GRUB alglaadur.

Guesti migreerimine

TODO

Märkused

  • kvm programmi saab käivitada privilegeerimata kasutaja eeldusel, et ta /dev/kvm seadmele lugeda ja kirjutada saab, reeglida kvm gruppi lisamisest kasutajale piisab.
  • Selleks, et VNC sessiooni sees käivitatud kvm (või qemu) saaks aru klaviatuurist, sobib kasutada lisaks muudele käsurea parameetritele võtit -k, nt '-k en-us'
  • Tundub, et vähemalt Debian Lenny guest käitub scsi plokkseadmega ebastabiilselt, virtio toimib.

Kasulikud lisamaterjalid