KVM presentatie

KVM = Qemu + libvirt

L. Baes 2011-08-24

Linuxbabbel - Izegem

Virtualisatie: 3 soorten

    • Native hypervisors: KVM, Xen, VMWare VSphere

    • Containers: LXC, OpenVZ, Linux-Vserver, FreeVPS

    • = dit is een soort chroot; dezelfde hardware, afgeschermde omgeving.

    • Emulation: Qemu, draaien van bv ARM-software op i368-hardware:

    • = softwarematig nabootsing van de hardware.

What?

  • kvm = Kernel Based Virtual Machine

    • Een volledige virtualisatie oplossing voor Linux op x86 hardware (64-bit) door gebruik te maken van de virtualisatie extenties in de cpu's van Intel VT or AMD-V.

      • Eigenlijk is kvm = qemu + hardware-versnelling via de cpu.

  • Soorten virtualisaties:

    • Open source: QEMU, KVM, XEN, vserver, OpenVZ, LXC

      • Closed: VirtualBox, vmware, hyper-v

      • Installatie van kvm

      • Hoe detecteren of je systeem kvm ondersteunt?

        • egrep --color '(vmx|svm)' /proc/cpuinfo

        • Deze is ook goed ;-)

          • egrep '^flags.*(vmx|svm)' /proc/cpuinfo >/dev/null && echo OK || echo KO

      • Installeren debian-ubuntu:

        • sudo apt-get install kvm libvirt-bin virt-manager

      • Installatie van kvm

      • Controle of de kvm-kernelmodule geladen is:

        • lsmod | grep kvm

        • kvm_amd 51180 0 of kvm_intel

        • kvm 268970 1 kvm_amd

      • De libvirt-daemon automatisch laten opstarten bij het booten.

      • In "/etc/default/libvirt-bin" wijzig:

        • # Start libvirtd to handle qemu/kvm:

        • start_libvirtd="yes"

          • Installatie van kvm

            • Na installatie van libvirt-bin moet de gebruiker van kvm lid zijn van de groep, debian 'libvirt' en ubuntu 'libvirtd'.

              • DEBIAN : sudo adduser $USER libvirt

              • UBUNTU : sudo adduser $USER libvirtd

            • Beheren van virtuele images:

            • libvirt-bin: comment-line beheer van kvm (virsh).

            • virt-manager: grafisch beheer van kvm:

            • Momenteel ondersteunt libvirt-bin Xen, QEmu, KVM, LXC,

            • Voordelen:

            • Echte en vrije virtualisatie,

            • Zit in de distro-kernel, dus geen extra compilatie van extra kernel-modules (vmware, virtualbox),

            • Updates volgen de normale update-strategie,

            • Geen extra commando's te leren:

            • df -h, kill, htop, ... blijven werken,

            • KVM werkt op alle pc-types, servers, desktops, laptops, embedded, met dezelfde configuratie-tools,

            • Alle filesystemen, ondersteund door de kernel, kunnen gebruikt worden <-> VSphere,

            • Life migratie en klonen.

              • Nadelen:

              • Soms nog command-line nodig (maken van images),

              • Grafisch zitten hier en daar wel wat bugs tussen (raw - qcow2),

              • Zit in de gewone updates.

                • Networking

              • Er bestaan 3 mogelijkheden:

                1. Bridging: de virtuele nic (vnet0) wordt doorgesluisd naar een fysieke nic (eth0),

                2. NAT: de virtuele machines krijgen een virtueel netwerk (virbr0), zoals een router je eigen netwerk masqeert,

                3. Fysieke nic: een fysieke nic wordt toegewezen aan een virtuele machine.

                  • 1. Bridging

                  • Install software:

                  • aptitude install bridge-utils

                  • Configuratie in "/etc/network/interfaces"

                  • #iface eth0 inet dhcp

                  • # Set up interfaces manually, avoiding conflicts with, e.g., network manager

                  • iface eth0 inet manual

                  • # Bridge setup

                  • auto br0

                  • iface br0 inet static

                  • #iface br0 inet dhcp

                  • # er was een probleem met de oudere igb-module

                  • pre-up rmmod igb

                  • pre-up modprobe igb

                  • address 172.26.254.16

                  • netmask 255.255.0.0

                  • network 172.26.254.0

                  • broadcast 172.26.254.255

                  • gateway 172.26.254.1

                  • bridge_ports eth0

                  • bridge_stp off

                  • bridge_maxwait 5

                  • bridge_fd 9

                  • bridge_hello 2

                  • dns-nameservers 192.168.0.1 208.67.222.123

                  • dns-search VTI

                  • Reboot de pc.

                  • sudo /etc/init.d/networking restart

                  • sudo invoke-rc.d networking restart

                  • Controleer de bridge br0

                  • /sbin/ifconfig

                  • br0 Link encap:Ethernet HWaddr 00:26:2d:08:70:f9

                  • inet addr:172.26.254.16 Bcast:172.26.254.255 Mask:255.255.0.0

                  • inet6 addr: fe80::226:2dff:fe08:70f8/64 Scope:Link

                  • UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

                  • RX packets:277734 errors:0 dropped:0 overruns:0 frame:0

                  • TX packets:223035 errors:0 dropped:0 overruns:0 carrier:0

                  • collisions:0 txqueuelen:0

                  • RX bytes:16474265 (15.7 MiB) TX bytes:35099972 (33.4 MiB)

                  • eth0 Link encap:Ethernet HWaddr 00:26:2d:08:70:f9

                  • inet6 addr: fe80::226:2dff:fe08:70f8/64 Scope:Link

                  • UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

                  • RX packets:4867773 errors:0 dropped:0 overruns:0 frame:0

                  • TX packets:1575647 errors:0 dropped:0 overruns:0 carrier:0

                  • collisions:0 txqueuelen:1000

                  • Wanneer een virtuele machine draait, komt er een virtuele netwerkkaart bij:

                  • /sbin/ifconfig vnet0

                  • vnet0 Link encap:Ethernet HWaddr fe:54:00:47:cd:e1

                  • inet6 addr: fe80::fc54:ff:fe47:cde1/64 Scope:Link

                  • UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

                  • RX packets:72 errors:0 dropped:0 overruns:0 frame:0

                  • TX packets:267 errors:0 dropped:0 overruns:0 carrier:0

                  • collisions:0 txqueuelen:500

                  • RX bytes:6633 (6.4 KiB) TX bytes:36645 (35.7 KiB)

                  • Alle netwerkverkeer wordt via vnet0 doorgesluisd naar br0 en vandaar naar eth0.

                  • 2. NAT

                  • Kies NAT bij 'NIC' voor het maken van een afzonderlijk netwerk.

                  • Virt-manager stelt dit automatisch in.

                  • ifconfig

                  • virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00

                  • inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0

                  • UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

                  • RX packets:0 errors:0 dropped:0 overruns:0 frame:0

                  • TX packets:43 errors:0 dropped:0 overruns:0 carrier:0

                  • collisions:0 txqueuelen:0

                  • RX bytes:0 (0.0 B) TX bytes:5870 (5.8 KB)

                  • 3. Fysieke NIC

                  • In virt-manager kies je voor een bepaalde driver voor een NIC.

                  • Images [-f fmt]

                  • Ondersteunde formaten:

                  • raw: Raw disk image format (default), simpel maar neemt veel ruimte in beslag,

                  • qcow2: Meest gebruikt; gecomprimeerde kleinere, aangroeiende images,

                  • qcow: oud, niet meer gebruikt,

                  • vdi: formaat van VirtualBox,

                  • vmdk: formaat van VMware,

                  • ... , zie man qemu-img

                  • Aanmaken van een qcow2 image:

                  • Steeds via commandline doen, virt-manager ondersteunt enkel 'raw',

                  • qemu-img create -f qcow2 VMName.qcow2 10G

                  • Deze image importeren in virt-manager,

                  • Pas op met oudere versies, zoals virt-manager 0.8.4-8 op debian-squeeze!

                  • Telkens je iets verandert aan de virtuele disken in de configuratie van virt-manager (image verwijderen of toevoegen), moet je de volgende commando's uitvoeren.

                  • Virt-manager slaat elke image op als 'raw'-type.

                  • Met de unstable-versie en bij ubuntu kan je kiezen welk formaat je image is dat je toevoegd in virt-manager.

                  • Waar plaats je de images?

                  • Ik zet ze onder een map "/virtual-servers/images":

                  • ll /virtual-servers/images/

                  • total 0

                  • drwxr-xr-x 2 ic ic 92 Aug 23 18:52 ltsp-debian

                  • drwxr-xr-x 2 ic ic 47 Aug 23 14:44 win2008-oud

                  • Wijzigen van 'raw' naar 'qcow2' formaat:

                  • Bepaal de vm-naam:

                  • sudo virsh -c qemu:///session list --all

                  • Id Name State

                  • ----------------------------------

                  • - VMName shut off

                  • Hiervoor moet je root zijn, omdat deze xml-bestanden niet leesbaar zijn in '/etc/libvirt/qemu/'.

                  • ll /etc/libvirt/qemu/

                  • -rw------- 1 root root 2112 2011-08-24 15:08 VMName.xml

                  • Exporteer de vm-instellingen naar een xml-file:

                  • virsh -c qemu:///session dumpxml VMName > /tmp/VMName.xml

                  • Pas het hard-disk formaat aan in de xml-file:

                  • <driver name='qemu' type='raw'/>

                  • to

                  • <driver name='qemu' type='qcow2'/>>

                  • Importeren van de gewijzigde xml-file:

                  • sudo virsh -c qemu:///session define /tmp/VMName.xml

                  • user.group-permissies terug goedzetten na virsh-gebruik:

                  • sudo chown ic.ic VMName.qcow2

                  • Bronnen:

                  • http://www.linux-kvm.org

                  • https://help.ubuntu.com/community/KVM

                  • https://help.ubuntu.com/community/KVM/Virsh

                  • Bridge: http://wiki.debian.org/BridgeNetworkConnections

                  • http://www.vogelweith.com/debian_server/14_kvm.php

                  • Bron code presentatie: http://kwlug.org/node/690