home       inleiding       sysadmin       services       links       bash       werk       nothing      

KVM

 
Met KVM draaien we een hypervisor type 1 rechtstreeks op onze hardware. KVM staat voor kernel virtual machine. De kernel draait rechtstreeks op de hardware. KVM modificeert de kernel dusdanig dat die ook hypervisor wordt. (https://www.linux-kvm.org/page/Main_Page)
 
KVM werkt samen met QEMU, een HOST-manager en hardware emulator. Grosso modo houdt KVM zich bezig met CPU en RAM terwijl QEMU alle andere hardware emuleert, en een user-interface voorziet.
 
QEMU kan het ook alleen, maar dan gedraagt die zich eerder als een soort virtualbox, hypervisor type2: een programma dat zich voor een guest-OS voordoet als hardware (heel veel soorten hardware), en voor een host-OS als een stuk software. (https://www.qemu.org/ )
 
Op een client-PC installeren we straks een GUI: virt-manager, om ons geheel te beheren.
 

  1. installatie
     
    We gebruiken een ubuntu 16.04 server. En die moet draaien, rechtstreeks op hardware, niet in vmware-station en niet in virtualbox, of iets anders.
     
    We installeren de volgende software (met dependencies +200 pakketten):
     
    $ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
     
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
    adwaita-icon-theme at-spi2-core augeas-lenses cgmanager colord colord-data
    dconf-gsettings-backend dconf-service ebtables fontconfig fontconfig-config
    fonts-dejavu-core gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking
      . . .
    The following NEW packages will be installed:
    adwaita-icon-theme at-spi2-core augeas-lenses bridge-utils cgmanager colord
    colord-data cpu-checker dconf-gsettings-backend dconf-service ebtables fontconfig
    fontconfig-config fonts-dejavu-core gir1.2-freedesktop gir1.2-libosinfo-1.0
    glib-networking glib-networking-common glib-networking-services
    gsettings-desktop-schemas hicolor-icon-theme humanity-icon-theme ipxe-qemu
      . . .
    0 upgraded, 209 newly installed, 0 to remove and 0 not upgraded.
    Need to get 63,7 MB of archives.
    After this operation, 389 MB of additional disk space will be used.
    Do you want to continue? [Y/n] y

     

  2. hardware nakijken:
     
    cpu-checker kijkt de processor na, en dat doen we zo ...:
     
    $ kvm-ok
    INFO: /dev/kvm exists
    KVM acceleration can be used
     
    We kunnen dit ook met het volgende commando:
    $ egrep '(vmx|svm)' /proc/cpuinfo
    flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl ***vmx***  est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm kaiser tpr_shadow vnmi flexpriority ept vpid dtherm ida

    En dan zien we het woord vmx ('x' keer voor elke processor thread) ergens op de derde regel ...
     

  3. netwerk opzetten:
     
    Een bron van moeilijkheden is het manueel aanpassen van de netwerk-settings,
    in /etc/network/interfaces.
     
    Die ziet er nu nog zo uit:
    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The HOME network interface
    auto eno1
    iface eno1 inet static
    address 192.168.0.19
    netmask 24
    gateway 192.168.0.11
    dns-nameservers 8.8.8.8 192.168.0.11

    En we passen die aan als volgt:

    # The loopback network interface
    auto lo
    iface lo inet loopback
     
    # The HOME network interface
    # auto eno1 
    # -> keeps itself busy with being a layer2-bridge port
    # so can be declared as 'manual'
    iface eno1 inet manual
    iface eno1 inet6 manual
    #
    auto br0
    iface br0 inet static
        address 192.168.0.19
        netmask 24
        gateway 192.168.0.11
        dns-nameservers 8.8.8.8 192.168.0.11
    ## bridge config:
        bridge_ports eno1
        bridge_stp off
        bridge_maxwait 0
        bridge_fd 0
     
    ## what's all this:
    ##      bridge_ports eno1       ## doorverwijzen naar interface eno1
    ##      bridge_stp off          ## geen spanning tree protocol
    ##      bridge_maxwait 0        ## bridge not waiting for setup scripts
    ##      bridge_fd 0             ## bridge forward delay (should be 0 seconds)

    ... na het aanpassen van /etc/network/interfaces
    kunnen we het netwerk herstarten met ...
    $ sudo systemctl restart networking
    maar soms werkt alleen een systeem herstart.
     
    Met ifconfig zien we dan (ingekort) het volgende:

    br0       Link encap:Ethernet  HWaddr 00:22:19:69:15:43  
          inet addr:192.168.0.19  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::222:19ff:fe69:1543/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:26469 (26.4 KB)  TX bytes:24275 (24.2 KB)
     
    eno1      Link encap:Ethernet  HWaddr 00:22:19:69:15:43  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX bytes:31036 (31.0 KB)  TX bytes:24033 (24.0 KB)
     
    lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX bytes:72496 (72.4 KB)  TX bytes:72496 (72.4 KB)
     
    virbr0    Link encap:Ethernet  HWaddr 52:54:00:72:ab:af  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

    We krijgen een bridge-interface br0
    die eno1 lijkt te hebben overgenomen, ook in ipv6,
    met hetzelfde MAC-address als eno1
     
    Er komt ook een extra netwerk-adapter bij:
    virbr0 wordt een virtueel aangrijpingspunt, en fungeert straks als NAT-gateway voor de virtual guests (als we die zo instellen).
     
    Indien er meerdere netwerkkaarten zijn, moeten die zonodig elk afzonderlijk worden gebridged.