KVM

From PostgreSQL_wiki
Jump to: navigation, search

Installatie fysieke host

Installeer een kale machine met ruimte voor:

  • 8 Gb voor de fysieke machine, primary partition
  • 2 Gb swap, eerste logical partition op de extended partition
  • LVM op de tweede logical partition van de extended partition

Voor testuitvoer van het KVM gedeelte zie de uitvoer van tests na configuratiestappen in kvm test.

Prepareer LVM

Creeer het physical volume.

root@host:~# pvcreate /dev/md0
root@host:~# pvcreate /dev/md1
root@host:~# vgcreate kvm-root /dev/md0
root@host:~# vgcreate kvm-data /dev/md1


root@host:~# pvcreate /dev/sda7 /dev/sdb7
 Physical volume "/dev/sda6" successfully created

en maak vervolens de volume group aan.

 root@sauron:~# vgcreate dev-kvm /dev/sda6

Bijplaatsen extra disk

Kijk een beetje uit net het geven van namen aan volume groups. Er ontstaat een duplicate vg name conflict als je twee schijven samenvoegt als ze allebei dezelfde naam voor het physical volume hebben.

root@host:~# pvscan
  PV /dev/sdb6   VG dev-xen    lvm2 [223.52 GiB / 31.52 GiB free]
  PV /dev/sda7   VG dev-xen    lvm2 [216.89 GiB / 16.89 GiB free]
  Total: 2 [440.41 GiB] / in use: 2 [440.41 GiB] / in no VG: 0 [0   ]

/dev/sda7            2081       30394   227432173+  8e  Linux LVM
/dev/sdb6            1216       30395   234374144   8e  Linux LVM

Los dit op met:
 vgimportclone -i /dev/sdb6

Bijplaatsen netwerk interface

Het toekennen van een extra netwerk interface gaat als volgt:

root@host:~# virsh attach-interface test-host --type bridge --source br1
root@host:~# virsh dumpxml test-host > /etc/libvirt/qemu/test-host.xml

NB. De host zelf moet natuurlijk wel over een tweede interface en een bridge beschiken.

LVM snapshot logical volume

KVM maakt disk image aan op de LVM en daarbinnen partities. Om een partitie te mounten is een tussenstap nodig:

# kpartx -av /dev/dev-kvm/samba
add map dev--kvm-samba1 (253:17): 0 32112640 linear /dev/dev-kvm/samba 2048
add map dev--kvm-samba2 (253:18): 0 1435650 linear /dev/dev-kvm/samba 32116734
add map dev--kvm-samba5 : 0 1435648 linear 253:18 2
# mount -t ext3 /dev/mapper/dev--kvm-samba1 /mnt/dev-kvm/samba1/

Zie ook:

LVM verwijderen van mapper

Eerst kijken met:

# dmsetup info
dan:
# dmsetup remove /dev/mapper/<naam>

Debian

De installatie verloopt vanaf een USB-stick met een netinstall, installeer een kale machine van 4 Gb met een swap space van 2 Gb. De uitvoer van tests na configuratiestappen staat in kvm test . Voorbereiding virtuele machines:
Vervolgens als de machine draait:

udell-kvm:~# apt-get install kvm qemu lvm2 libvirt-bin virtinst bridge-utils virt-manager virt-clone virt-goodies virt-top

Ubuntu Server

De installatie verloopt via een .iso image van een CDRom, dus na de install is de volgende stap nodig voor zowel de host als de guests:

root@sauron:~# apt-get update && apt-get upgrade

De networkbridge voor KVM

martin@kvm-host:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo br0 br1
allow-hotplug eth0
allow-hotplug eth1

iface lo inet loopback
# The primary network interface

iface br0 inet static
  address 10.22.23.148
  netmask 255.255.255.240
  network 10.22.23.144
  gateway 10.22.23.145
  bridge_ports eth0
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off
  post-up /usr/local/bin/post-up-br0.sh
 
iface br1 inet static
  address 10.22.23.132
  netmask 255.255.255.240
  network 10.22.23.128
#  gateway 10.22.23.129
  bridge_ports eth1
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off

martin@kvm-host:~$
udell-kvm:~# /etc/init.d/networking restart

Voeg toe aan /etc/modules

kvm
kvm-intel
udell-kvm:~# modprobe kvm kvm-intel

Inspectie dom0

Inspecteer de dom0 met:

root@sauron:~# virt-top

Zie kvm test.

Installatie domU

Prepareer een logical volume

Maak een (voorbeeld) logical partition aan op de gecreeerde volume group

 root@sauron:~# lvcreate -L 16G -n support dev-kvm

Zie kvm test voor testuitvoer.

Installatie console

De installatie verloopt middels vncviewer. Maak contact met de fysieke machine als de installatie op de fysieke machine is gestart. Let op: de -Y optie dient om grafisch weer te geven en het poortnummer is de poort waarop vnc voor de te installeren machines luistert.

martin@udell:~$ ssh -Y 192.168.1.201
Enter passphrase for key '/home/martin/.ssh/id_dsa': 
martin@sauron:~$ xvncviewer localhost:5901

VNC Viewer Free Edition 4.1.1 for X - built Apr  9 2010 18:41:55
Copyright (C) 2002-2005 RealVNC Ltd.
See http://www.realvnc.com for information on VNC.

Er verschijnt een grafisch venster, dat dienst doet als console. De installatie gaat hiervandaan verder. Soms verschijnt de volgende melding:

VNC:Rect too big

Start dan xvncviewer als volgt op:

xvnc4viewer -Autoselect=0 localhost:5900 &

Installatie Debian domU

De installatie van een virtuele machine verloopt op de Debian manier via een netinstall. virt-install haalt alle code, inclusief de netboot van de debian repository, in geval van Webhuis via een apt-cacher proxy vanwege de installatie van meerdere machines.

  • netinstall
  • generatie xml van de virtuele machine install
  • start van de install van de virtuele machine
  • voortzetting van de installatie via een vnc-console
  • generatie xml van de virtuele machine
  • start van de virtuele machine

Eerst zoekt virt-install de netinstall: De Mirror van Webhuis bevat de voor de netboot benodigde bestanden. De MANIFEST file staat in:

http:mirror.webhuis.nl/debian/dists/squeeze/main/installer-amd64/current/images. 

De installatie bestanden initrd.gz en linux staan in:

http:mirror.webhuis.nl/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64

Verversen van deze bestanden gaat met:

wget http://mirrors.nl.kernel.org/debian/dists/squeeze/main/installer-amd64/current/images/MANIFEST
wget http://mirrors.nl.kernel.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
wget http://mirrors.nl.kernel.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
root@dom0-123:~# virt-install --connect qemu:///system -n cfengine3 -r 256 --vcpus=2 --disk path=/dev/dev-kvm/cfengine3 \
                              -l http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64 os-type linux \
                              --os-variant debiansqueeze --accelerate --network=bridge:br1 --hvm --vnc --force --debug

De installatie met virt-install is vrij intelligent. Het draait om het vinden van de informatie om de installatie te starten. Na enige meldingen van de software die zijn weg zoekt in het archief vindt virt-install de voor de installatie belangrijke bestanden, het is zelfs een netinstall:

Wed, 26 Jan 2011 08:55:50 DEBUG    Fetching URI: http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/MANIFEST
Wed, 26 Jan 2011 08:55:50 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-MANIFEST.gBEjKl
Retrieving file MANIFEST...                                                                                                      | 3.3 kB     00:00 ... 
Wed, 26 Jan 2011 08:55:50 DEBUG    Detected a Debian distro
Wed, 26 Jan 2011 08:55:50 DEBUG    Fetching URI: http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
Wed, 26 Jan 2011 08:56:02 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-linux.aW2jsK=======================-  ] 176 kB/s | 2.2 MB     00:00 ETA 
Retrieving file linux...                                                                                                         | 4.6 MB     00:11 ... 
Wed, 26 Jan 2011 08:56:02 DEBUG    Fetching URI: http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
Wed, 26 Jan 2011 08:56:34 DEBUG    Saved file to /var/lib/libvirt/boot/virtinst-initrd.gz.724oyj=====================-] 210 kB/s | 6.4 MB     00:00 ETA 
Retrieving file initrd.gz...                                                                                                     |  13 MB     00:31 ... 

De xml van de virtuele machine install

Wed, 26 Jan 2011 08:56:34 DEBUG    Generated install XML: 
<domain type='kvm'>
  <name>cfengine3</name>
  <currentMemory>262144</currentMemory>
  <memory>262144</memory>
  <uuid>8c6c8c04-de68-eab9-fe18-e77b4b69b543</uuid>
  <os>
    <type arch='x86_64'>hvm</type>
    <kernel>/var/lib/libvirt/boot/virtinst-linux.aW2jsK</kernel>
    <initrd>/var/lib/libvirt/boot/virtinst-initrd.gz.724oyj</initrd>
    <cmdline>method=http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64</cmdline>
  </os>
  <features>
    <acpi/><apic/><pae/>
  </features>
  <clock offset="utc"/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>destroy</on_reboot>
  <on_crash>destroy</on_crash>
  <vcpu>2</vcpu>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu'/>
      <source dev='/dev/dev-kvm/cfengine3'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='br1'/>
      <mac address='52:54:00:48:30:e6'/>
      <model type='virtio'/>
    </interface>
    <input type='tablet' bus='usb'/>
    <graphics type='vnc' port='-1' keymap='en-us'/>
    <console type='pty'/>
    <video>
      <model type='cirrus'/>
    </video>
  </devices>
</domain>

De xml van de virtuele machine

Creating domain...                                                                                                               |    0 B     00:00     
Wed, 26 Jan 2011 08:56:34 DEBUG    Started guest, looking to see if it is running
Wed, 26 Jan 2011 08:56:34 DEBUG    Launching console callback
Wed, 26 Jan 2011 08:56:34 DEBUG    Generated boot XML: 
<domain type='kvm'>
  <name>cfengine3</name>
  <currentMemory>262144</currentMemory>
  <memory>262144</memory>
  <uuid>8c6549c04-de48-e5b9-fe12-e7596869b543</uuid>
  <os>
    <type arch='x86_64'>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>
  <vcpu>2</vcpu>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu'/>
      <source dev='/dev/dev-kvm/cfengine3'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='br1'/>
      <mac address='52:54:00:23:40:6e'/>
      <model type='virtio'/>
    </interface>
    <input type='tablet' bus='usb'/>
    <graphics type='vnc' port='-1' keymap='en-us'/>
    <console type='pty'/>
    <video>
      <model type='cirrus'/>
    </video>
  </devices>
</domain>

De installatie is gestart en virt-install heeft de melding het console niet te kunnen openen. virt-install geeft aan dat de rest van de installatie via een console.

Cannot open display: 
Run 'virt-viewer --help' to see a full list of available command line options
Wed, 26 Jan 2011 08:56:35 DEBUG    Removing /var/lib/libvirt/boot/virtinst-linux.aW2jsK
Wed, 26 Jan 2011 08:56:35 DEBUG    Removing /var/lib/libvirt/boot/virtinst-initrd.gz.724oyj
Wed, 26 Jan 2011 08:56:37 DEBUG    Domain state after install: 1
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.
root@dom0-148:~#

Openen van een console

Het openen van het console verloop via twee stappen.

  • Met de grafische optie inloggen op de host
  • vnc starten op de console
martin@dell:~$ ssh -Y 10.99.99.99
Enter passphrase for key '/home/martin/.ssh/key': 
Linux dom0-123 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64
Last login: Wed Jan 26 13:46:08 2011 from 10.68.71.149
martin@dom0-123:~$ xvnc4viewer localhost:5900

De vnc console is verre van ideaal, maar wel werkbaar en is tenslotte maar een enkele keer nodig. De machine funcitoneert pas na een handmatige start.

Installatie Ubuntu-server domU

De installatie van een virtuele Ubuntu-server domU verloopt middels een iso-image.

 root@sauron:~# virt-install --connect qemu:///system -n test01 -r 128 --vcpus=2 --disk path=/dev/dev-kvm/support \
                -c /var/lib/ubuntu-server-10.4.20100612.iso os-type linux --os-variant ubuntulucid --accelerate \
                --network=bridge:br0 --hvm --vnc --force --debug

Het nadeel van deze methode is dat het noodzakelijk is om onmiddelijk nadat de host is opgebracht een uprade uit te voeren.

root@sauron:~# apt-get update && apt-get upgrade

console virtuele machine

Een console vanaf de dom0 op een virtuele machine vereist op elke host configuratie instellingen en een eenmalig herstart of start van de geconfigureerde console.
Maak in de virtuele machine het bestand /etc/init/ttyS0.conf aan en voorzie het van de volgende inhoud:

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 xterm

Herstart de virtuele machine, of geef het volgende commando:

root@sauron:~# start ttyS0

Verbind daarna vanf de dom0 met:

root@sauron:~# virsh console <virtuele machine>

Geef nog een <enter> voor een login prompt als de virtuele console zonder login verschijnt.
Documentatie van Ubuntu: https://help.ubuntu.com/community/KVM/Access
Zie ook kvm test.

Reset root password

Het gebeurt iedereen wel eens een keer, root wachtwoord vergeten. Stel eerst de display port van de vm vast.

Start de kvm machine
Grub: esc om het boot proces te onderbreken
e voor edit van de machine
voeg aan het eind toe aan de linux regel init=/bin/bash
crtl x
in de machine mount -o remount,rw /
passwd voor een nieuw password
exec /sbin/init of /sbin/reboot

Weeggooien domU

Een domU verdwijnt met het commando:

root@sauron:~# virsh undefine <domU>

Verhuizen domU

root@hostA:~# dd if=/dev/vg/domU | gzip -1 - | ssh -i /home/jan/.ssh/id_rsa jan@hostB.webhuis.nl dd of=/media/migratie/domU.tgz
gunzip -c svn-disk.tgz | dd of=/mnt/groot/svn-disk.tar

Cloneren domU

Het cloneren van een machine is op zich een eenvoudig proces, maar er is een voozorgsmaatregel noodzakelijk. Zet een hekje in het bestand /etc/udev/rules.d/70-persistent-net.rules voor de volgende regel:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:16:36:5e:11:af", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Let op, bij een reboot van de clone machine zet udev de regel er doorleuk weer achteraan. Start het cloneren met de opdracht:

root@sauron:~# virt-clone -o clone -n server-5 -m 52:54:00:54:1c:b4 --auto-clone -f /dev/dev-kvm/server-5 

Via vncviewer is het ip adres te achterhalen en is de login op dat adres mogelijk.

Praktische toepassing virt-clone

  • Maak voor LVM eerst het volume aan
  • Specificeer het volume bij het clone commando
  • Gebruik de --force optie bij herhaald genereren
  • Denk erom de gewraakte netwerk regel uit de udev configuratie te halen na elke boot van de cloneer machine

KVM troubleshooting

qemu-system-x86 100% CPU

Soms hangen virtuele machines, terwijl de host gewoon up is, virt-top reageert niet. Dit is het beeld met top:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
 3049 libvirt-  20   0 1738m 630m 4880 S  101  3.9   4:33.60 qemu-system-x86

Een simpele reboot werkt niet in dit geval. Het volgende moet gebeuren:

root@host:~# rm /var/run/libvirtd.pid 
root@host:~# killall -9 libvirtd

Controleer of het proces qemu-system-x86 nog steeds 100% CPU heeft. In dat geval doe je een:

root@host:~# kill -9 qemu-system-x86
root@host:~# /etc/init.d/libvirt-bin start
root@host:~# top
root@host:~# virt-top

qemu-system-x86 moet na korte tijd een normale CPU hebben en virt-top is weer responsief.

pid van vm vinden

ps awx | grep qemu | grep -v grep | sed 's/\s*\([0-9]*\).*-name \(\w*\) .*/\1 \2/'

Terug naar: Webhuis bouwstenen