OpenBSD VMM kasutamine

Allikas: Imre kasutab arvutit

Sissejuhatus

Operatsioonisüsteem OpenBSD v. 6.1 võimaldab kasutada virtuaalseid arvuteid. Lisaks on v. 6.1 koosseisus man switch lahendus, mis peaks kunagi asendama man bridge.

Mõisted

  • vmm - virtual machine monitor
  • vmd - deemon, mis haldab virtuaalseid arvuteid
  • vmctl - vmd deemoni juhtimise utiliit
  • bridge - nn legacy virtuaalne võrguseade
  • switch - nn uus virtuaalne võrguseade
  • vio - virtuaalne arvuti võrguseade
  • /etc/firmware/vmm-bios - virtuaalne arvuti kaustab vaikimisi seda bios'i

Tööpõhimõte

Virtualiseerimist saab kasutada ainult sobiva riistvaraga, tavaliselt kaasaegne riistvara sobib ja sellest annab tunnistust

# dmesg | grep ^vmm
vmm0 at mainbus0: VMX/EPT

Virtuaalsete arvutite kasutamist kirjeldab selline skeem

    vm1             vm2             vm3
 10.10.10.11     10.10.10.12     10.10.10.13   -   gw 10.10.10.254
   _____           _____           _____
  |     |         |     |         |     |
  |     |         |     |         |     |
  |_____|         |_____|         |_____|
     |   vio0        |   vio0        |   vio0
     |               |               |
     |               |               |
   --|---------------|---------------|---- virtuaalne võrk
                     |
                   __|__
    tap0, tap1 .. |     |  host arvuti
                  |     |  vehter0 - 10.10.10.254
    switch0 või   |_____|  
    bridge0         | | 
               em0  | |  em1

                füüsiline võrk

kus

  • vmN - virtuaalsed arvutid
  • vio0 - virtuaalsetes arvutites olevad võrguseadmed (ip aadressidega 10.10.10.11 ... ning vaikelüüsiga 10.10.10.254)
  • em0, em1 - füüsilise arvuti võrguseadmed
  • tapN - virtuaalsete arvutite võrguseadmetele vastavad füüsilises arvutis olevad võrguliidesed
  • host arvutis on seadistatud käima nn legacy bridge0 seade või kaasaegne switch0 seade
  • vether0 - seade on vajalik switch0 kasutamisel, selleks, et host ise näeks virtuaalsete arvutite võrku
  • bridge või switch seadme abil saab ühendada kokku virtuaalsete arvutite võrgu füüsilise võrguga
  • host - füüsiline arvuti
  • jooned tähistavad võrguühendusi (virtuaalsel arvutil võib olla ka enam kui üks võrguliidest)

Üks nö töövoog virtuaalsete arvutitega tegelemisel võiks olla

  • tekitada host arvutisse switch seade käisiti
  • moodustada virtuaalsed arvutid käsitsi
  • seadistada /etc/switchd.conf, /etc/vm.conf ja /etc/hostname.* seadistusfailid selliselt, et host arvuti operatsioonisüsteemi alglaadimisel käivitatakse võrk ja virtuaalsed arvutid automaatselt

Väited

  • man switch ei oska kasutada vlan silte
  • virtuaalse arvuti plokkseadmetele vastavad failid host arvuti failisüsteemis tõmmistena

Ettevalmistused

Enne virtuaalsete arvutite kasutamist maksab läbi mõelda

  • mida virtuaalsed arvutid tegema hakkavad
  • kus host arvuti failisüsteemis hakkavad asuma virtuaalsete arvutite plokkseadmetele vastavad tõmmis failid
  • kuidas hakkab tööle võrk (millised seadmed omavahel kokku ühendatakse, kas bridge või switch abil)
  • kui palju mälu jt ressursse saavad virtuaalsed arvutid kasutada

Käesoleval juhul on valitud

  • virtuaalsete arvutite tõmmised asuvad /srv/vm kataloogis
  • install materjal asub kataloogis /srv/vm-install
  • võrk on korraldatud man switch abil

Veenduda, et virtuaalse arvuti bios tõmmis on olemas, nt

# fw_update
vmm-firmware-1.10.2p2: ok

# ls -ld /etc/firmware/vmm-bios*                                                        
-rw-r--r--  1 root  bin  65536 Mar 27 17:59 /etc/firmware/vmm-bios
-rw-r--r--  1 root  bin   7639 Mar 27 17:59 /etc/firmware/vmm-bios-license

Tõenäoliselt on vaja lülitada host arvutis sisse ruutimine

# sysctl -w net.inet.ip.forwarding=1

parem

# cp /etc/examples/sysctl.conf /etc/sysctl.conf
# grep net.inet.ip.forwarding /etc/sysctl.conf
net.inet.ip.forwarding=1        # 1=Permit forwarding (routing) of IPv4 packets

ning paketifiltris kasutada nt src nat teisendusi, nt

# cat /etc/pf.conf
..
set skip on lo
match out on egress inet from !(egress:network) to any nat-to (egress:0)
...

Virtuaalsetesse arvutitesse saab praktiliselt paigaldada ainult 6.1+ versioon OpenBSD operatsioonisüsteemi. Install materjal peab olema kasutada nt host arvuti failisüsteemist

# ls -ld /srv/vm-install/*
-rwxr-xr-x  1 root  wheel     9431142 Apr 16 15:19 /srv/vm-install/bsd.rd
-rw-r--r--  1 root  wheel   294092800 Apr 16 17:19 /srv/vm-install/install61.fs

switch kasutamine

vether seadme moodustamiseks, nii ta tekib ka alglaadimise järel automaatselt

# cat /etc/hostname.vether0
inet 10.10.10.254/24
# sh /etc/netstart vether0

Käsitsi switch tekitamiseks sobib öelda

# ifconfig switch0 create

ning lisada sinna vether liides nö lokaalses režiimis

# ifconfig switch0 addlocal vether0

Arvuti alglaadimisel käivitab switchi sobivalt

# cat /etc/hostname.switch0
up
!rcctl -f start switchd
!switchctl connect /dev/switch0
!ifconfig switch0 addlocal vether0
!ifconfig vether0 up

Switchi käsitsi käivitamiseks tuleb käivitada flow controller switchd ning ühendada switch flow kontrolleriga

# /etc/rc.d/switchd -f start
# switchctl connect /dev/switch0

Alglaadimiseks, aga seda pole vaja kuna käivitatakse hostname.switch0 seest

# rcctl set switchd status on

bridge kasutamine

TODO

Virtuaalse arvuti moodustamine ja käivitamine

Virtuaalse arvuti plokkseadmele vastava tõmmise tekitamiseks sobib öelda

# mkdir /srv/vm
# cd /srv/vm
# vmctl create vm1.drive -s 2g 
vmctl: imagefile created

Enne vmctl käsude andmist peab töötama vmd protsess, alustuseks sobib see käivitada tühja või puuduva seadistusfailita /etc/vm.conf

# /etc/rc.d/vmd -f start

Alglaadimisel käivitamiseks

# rcctl set vmd status on

Virtuaalse arvuti paigaldamiseks sobib öelda

# vmctl start "vm1" -c -m 1G -i 1 -d vm1.drive -d /srv/vm-install/install61.fs -b /srv/vm-install/bsd.rd

kus

  • "vm1" - virtuaalse arvuti nimi
  • -c - käivitatud arvutile ühendatakse konsool külge
  • -m - mälu
  • -i - võrguliideste hulk
  • -d - virtuaalise arvuti plokkseadmed, järjekorras
  • -b - millega arvuti käivitatakse, installeriga

Seejärel käivitub arvuti ja installer ning tuleb läbida installer tavalisel viisil. sd0 on arvuti enda plokkseade, sd1 on install61.fs materjal. Peale paigaldust sobib lõpus öelda

# halt -p

host arvutis saab jälgida virtuaalse arvuti olukorda

# vmctl status  
   ID   PID VCPUS  MAXMEM  CURMEM     TTY        OWNER NAME
    3 71875     1    1.0G    169M   ttyp3         root vm1

Paigaldatud arvuti käsitsi käivitamiseks sobib öelda (st ilma vm.conf failita)

# vmctl start "vm1" -c -m 1G -i 1 -d vm1.drive

seejuures maksab tähele panna, et host'i tekib võrguseade tapX, nt tap0 ja selle ühendamiseks switchiga sobib öelda

# ifconfig switch0 add tap0

Tulemus paistab nii, nüüd peavad saama host ja virtuaalne arvuti üksteist pingida

# ifconfig switch0                                                                                          
switch0: flags=41<UP,RUNNING>
        description: switch1-local0
        index 31 llprio 3
        groups: switch
        datapath 0x19a7a825507b982d maxflow 10000 maxgroup 1000
        tap0 flags=0<>
                port 33 ifpriority 0 ifcost 0
        vether0 flags=1000<LOCAL>
                port 4294967294 ifpriority 0 ifcost 0

Töötava arvuti konsoolile saab külge ühenduda

# vmctl console ID

Taustal töötab

root     13266  0.0  0.0   408  1312 p1  I+p    3:38PM    0:01.65 /usr/bin/cu -l /dev/ttyp2 -s 9600

Konsoolist saab lahti (klaviatuuri abil shift+tilde klaht kaks korda ja punkti klahv) abil

~~.

Virtuaalse arvuti riistvara paistab selline, protsessor sama mis host arvutil

# sysctl hw                                                           
hw.machine=amd64
hw.model=Intel(R) Pentium(R) CPU J3710 @ 1.60GHz
hw.ncpu=1
hw.byteorder=1234
hw.pagesize=4096
hw.disknames=sd0:a35570cddd43a473
hw.diskcount=1
hw.sensors.vmmci0.timedelta0=-289.509179 secs, OK, Sun Apr 16 19:07:46.461
hw.cpuspeed=1600
hw.vendor=OpenBSD
hw.physmem=1056956416
hw.usermem=1056944128
hw.ncpufound=1
hw.allowpowerdown=1

Virtuaalsete arvutite töötamisega kaasnevad sellised protsessid, lisaks muudele kaasneb iga virtuaalse arvutiga üks vmd protsess

# ps aux | grep vm     
_vmd     55137  0.0  0.0    1168  1656 ??  Isp    7:02PM    0:00.03 vmd: control (vmd)
root     32399  0.0  0.0    1104  1564 ??  Is     7:02PM    0:00.02 vmd: priv (vmd)
root     46264  0.0  0.0    1404  1588 ??  Isp    7:02PM    0:00.01 /usr/sbin/vmd
_vmd     38095  0.0  0.0    1240  1716 ??  Isp    7:02PM    0:00.02 vmd: vmm (vmd)
_vmd     34198  0.0  0.4 1051300 73836 ??  Ip     7:02PM    3:11.36 vmd: vm1 (vmd)
_vmd      4400  0.0  0.4 1051296 72796 ??  Ip     7:02PM    3:11.72 vmd: vm2 (vmd)

vm.conf kasutamine

Selleks, et arvuti juba paigaldatud ja seadistatud arvuti käivitamine toimuks hõlpsamini sobib kasutada nt sellist vmd seadistusfaili /etc/vm.conf

# cat /etc/vm.conf 

switch "local0" {
        interface switch0
}

vm "vm1" {
        memory 1G
        disk "/srv/vm/vm1.drive"
        interface {
          switch "local0"
        }
}

vm "vm2" {
        memory 1G
        disk "/srv/vm/vm2.drive"
        interface {
          switch "local0"
        }
}

kus

  • füüsilises arvutis olevale switch0 seadmele viidatakse vm.conf failis local0
  • arvuteid saab käivitada lihtsustatult, nt
# vmctl start vm2

Märkused

  • Tundub, et mingil hetkel võib peale virt arvutis halt -p ütlemist tekkida selline olukord
# vmctl status 
   ID   PID VCPUS  MAXMEM  CURMEM     TTY        OWNER NAME
    -     -     1    1.0G       -       -         root vm1
    -     -     1    1.0G       -       -         root vm2

kui ühtegi virtuaalset arvutit ei tööta, siis lahenduseks sobib vmd protsessi stop ja start

# rcctl -f stop vmd
# rcctl -f start vmd

Kasulikud lisamaterjalid