== Installationshinweise: Virtualisierungs-Server unter LibVirt mit KVM == <> === Festplattenpartitionierung (im Detail) === Im ersten/zentralen Virtualisierungs-Server werden schnelle SAS-Festplatten (geringe Kapazität, schneller Zugriff, teuer) und langsamere SATA-Festplatten (größere Kapazität, langsamerer Zugriff als bei SAS-Platten, kostengünstiger) eingebaut. * Die schnellen SAS-Festplatten werden für die Benutzerverzeichnisse von Lehrer/innen und Schüler/innen und für die Ablage der Boot-Images der Diskless-Workstations verwendet. * Auf den nicht ganz so performanten SATA-Festplatten liegen die Betriebssysteme der Server sowie Daten deren Zugriff nicht geschwindigkeitskritisch ist. Die Einteilung der Festplatten fällt von Schule zu Schule unterschiedlich aus. Sie ist abhängig von der Zahl und Größe der Festplatten, sowie der Größe des eingebauten Arbeitsspeichers. '''__Beispiel:__''' * Jeder Virtualisierungs-Server enthält eine gerade Anzahl von Festplatten, für Festplatten-Spiegelung wird in den meisten Fällen der RAID-Level-1 verwendet * RAID-Systemen werden stets mit der Software-Lösung im Linux-Kernel realisiert (sog. /dev/md-Devices) * SATA-Festplatte 1 und 2 werden 20 GByte als Raid (Level 1, Plattenspiegelung) für Betriebssystem des Virtualisierungs-Server reserviert * Swap-Partitionen: Größe des Arbeitsspeichers plus 2GByte auf alle schnellen SAS-Festplatten verteilt * Raid-Basis für LVM Volumes: jeweils zwei gleichgroße Partitionen auf baugleichen Festplatten zu RAID-Devices vom Level-1 zusammenfügen{{{ $ mdadm --create /dev/md1 -l1 -n2 /dev/sda2 /dev/sdb2 $ mdadm --create /dev/md2 -l1 -n2 /dev/sdc2 /dev/sdd2 # weitere RAID-1 Devices einrichten... $ [...] # alle RAID-1 Devices nach Neustart verfügbar machen... $ /usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf $ dpkg-reconfigure mdadm }}} * LVM Volume Groups anlegen: * Volume Group {{{vm-slow-vg}}} beinhaltet alle Level-1 RAIDs der langsameren Festplatten (SATA) * Volume Group {{{vm-fast-vg}}} beinhaltet alle Level-1 RAIDs der schnellen Festplatten (SAS){{{ $ pvcreate /dev/md1 $ pvcreate /dev/md2 $ [...] # alle RAID-1 Devices der SATA-Festplatten zu einer Volume Group zusammenführen $ vgcreate vm-slow-vg /dev/md /dev/md [...] # alle RAID-1 Devices der SAS-Festplatten zu einer Volume Group zusammenführen $ vgcreate vm-fast-vg /dev/md /dev/md [...] }}} * LVM Volumes anlegen: * Logical Volumes für virtuelle Maschinen anlegen. Namenskonvention für LVs: {{{_sd{a,b,c,d,...}}}}{{{ $ lvcreate vm-slow-vg -n tjener.intern_sda -L 400G $ lvcreate vm-fast-vg -n tjener.intern_sdb -L 400G $ lvcreate vm-slow-vg -n disklserver.intern_sda -L 40G $ lvcreate vm-fast-vg -n disklserver.intern_sdb -L 80G }}} FixMe: LTSP-Server ergänzen? === Netzwerk einrichten === Bislang wurde für die beschriebenen Installationsschritte eine vom DHCP-Server des Internet/DSL-Routers vergebene IP-Adresse für den zu installierenden Virtualisierungs-Server verwendet. Im nächsten Schritt wird nun eine feste IP-Adresse für die Backbone-Netzwerkschnittstelle festgelegt und auch die Schnittstelle für das Pädagogische Netzwerk (Debian Edu / Skolelinux Netzwerk) vorbereitet. Der zentrale Virtualisierungs-Server besitzt typischerweise zwei Netzwerkschnittstellen. (ACHTUNG: seit Debian 10 heißen die Netzwerk-Interfaces nicht mehr ethX, sondern werden bekommen einen eindeutigen Schnittstellennamen innerhalb eines Systems, z.B. enp3s0 oder eno1. Vorteil ist, dass die Schnittstellennamen nicht mehr von der Reihe des Ladens der Kerneltreiber abhängen, Nachteil ist, man muss sich die Schnittstellennamen genau in der Ausgabe von {{{ip a}}} oder {{{ifconfig --all}}} anschauen). Das Netzwerk-Setup benötigt die Paket {{{bridge-utils}}} und ggf. {{{vlan}}}: {{{ root@virt-man-01:~# apt-get install bridge-utils vlan }}} Sobald das Netzwerk-Setup über {{{ifupdown}}} sauber bei Neustart des Servers gestartet wird, kann das Paket {{{network-manager}}} vom VIRT-MAN-Host entfernt werden: {{{ root@virt-man-01:~# apt-get autoremove --purge network-manager }}} ==== Netzwerk einrichten (ohne VLAN-Trunk) ==== * Die Nummerierung der Netzwerk-Bridges lassen wir den daran angeschlossenen VLAN IDs entsprechen. * Die erste Schnittstelle ist für das Backbone-Netz ({{{172.16.0.0/24}}} vorgesehen. Diese Schnittstelle wird als Netzwerk-Bridge bereitgestellt. * Die zweite Schnittstelle stellt das Subnetz für die Schulinfrastruktur bereit ({{{10.0.0.0/8}}}). Diese Schnittstelle wird über eine Netzwerk-Bridge an die virtuellen Maschinen übergeben. '''__Beispiel__''': (Datei: {{{/etc/network/interfaces}}} auf {{{virt-man-01}}}, ohne VLANs){{{ auto lo iface lo inet loopback # backbone interface auto eth0 iface eth0 inet manual # for Backbone network iface br3 inet static bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports eth0 address 172.16.0.1 netmask 255.255.255.0 broadcast 172.16.0.255 gateway 172.16.0.253 # edu interface auto eth1 iface eth1 inet manual # for Debian Edu network auto br2 iface br2 inet manual bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports eth1 }}} Nach der Neukonfiguration die Schnittstellen muss das Netzwerk (bzw. zum Testen der korrekten Funktion beim System-Boot: der Server) neu gestartet werden. ==== Netzwerk einrichten (ohne VLAN-Trunk, aber mit mehreren Bridges für Edu-Netz) ==== * Die Nummerierung der Netzwerk-Bridges lassen wir den daran angeschlossenen VLAN IDs entsprechen. * Die erste Schnittstelle ist für das Backbone-Netz ({{{172.16.0.0/24}}} vorgesehen. Diese Schnittstelle wird als Netzwerk-Bridge bereitgestellt. * Die zweite Schnittstelle stellt einen Zugang zum Subnetz für die Schulinfrastruktur bereit ({{{10.0.0.0/8}}}). Diese Schnittstelle wird über eine Netzwerk-Bridge an die virtuelle Maschine TJENER übergeben. * Die dritte Schnittstelle stellt auch einen Zugang zum Subnetz für die Schulinfrastruktur bereit ({{{10.0.0.0/8}}}). Diese Schnittstelle wird aber über eine Netzwerk-Bridge an die virtuelle Maschine DISKLSERVER übergeben. '''__Beispiel__''': (Datei: {{{/etc/network/interfaces}}} auf {{{virt-man-01}}}, ohne VLANs){{{ auto lo iface lo inet loopback # The loopback network interface auto lo iface lo inet loopback auto eno1 iface eno1 inet manual auto br3 iface br3 inet static bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports eno1 address 172.16.0.1 netmask 255.255.255.0 broadcast 172.16.0.255 gateway 172.16.0.253 auto enp3s0f0 iface enp3s0f0 inet manual auto br21 iface br21 inet static bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports enp3s0f0 auto enp3s0f1 iface enp3s0f1 inet manual auto br22 iface br22 inet static bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports enp3s0f1 }}} Nach der Neukonfiguration die Schnittstellen muss das Netzwerk (bzw. zum Testen der korrekten Funktion beim System-Boot: der Server) neu gestartet werden. ==== Netzwerk einrichten (mit VLAN-Trunk und Uplink mit echter Internet-IP) ==== * Die erste Schnittstelle ist die primäre Schnittstelle des Virtualisierungsrechners und hat eine Internet-IP * Die zweite Schnittstelle ist ein VLAN-Trunk auf der mehrere VLANs für das Intranet konfiguriert sind. * VLAN ID 1: OpenLAN * VLAN ID 2: EduLAN * VLAN ID 3: Backbone Netz * VLAN ID ...: etc.pp. '''__Beispiel__''': (Datei: {{{/etc/network/interfaces}}} auf {{{virt-man-01}}}, mit VLANs){{{ # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 123.45.67.0/27 gateway 123.45.67.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 123.45.67.1 dns-search institut.uni-irgendwo.de bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports eth0 # The secondary network interface (for internal VLANs) auto eth1 iface eth1 inet manual # The VLAN Trunk as a network bridge (so, accessible from VMs) auto br1 iface br1 inet manual bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports eth1 # OpenLAN VLAN auto vlan1 iface vlan1 inet manual vlan-raw-device br1 # Debian Edu VLAN auto vlan2 iface vlan2 inet manual vlan-raw-device br1 # Backbone VLAN auto vlan3 iface vlan3 inet manual vlan-raw-device br1 # OpenLAN (untagged) bridge auto br11 iface br11 inet manual bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports vlan1 # EduLAN (untagged) bridge auto br21 iface br21 inet manual bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports vlan2 # Backbone (untagged) bridge auto br31 iface br31 inet static address 172.16.0.1/24 bridge_fd 0 bridge_hello 2 bridge_maxage 12 bridge_stop off bridge_ports vlan3 }}} Nach der Neukonfiguration der Schnittstellen muss das Netzwerk (bzw. zum Testen der korrekten Funktion beim System-Boot: der Server) neu gestartet werden. === Virtuelle Maschinen einrichten === Das Programm ''Virtual Machine Manager'' dient der Verwaltung und Steuerung der virtuellen Maschinen. In ihm werden die virtuellen Festplatten konfiguriert, und Arbeitsspeicher sowie Prozessorkerne den virtuellen Maschinen zugeteilt. * Den User {{{locadm}}} der Gruppe {{{libvirt}}} hinzufügen.{{{ $ sudo adduser locadm libvirt }}} * Grafisch am Virtualisierungs-Server als {{{locadm}}} anmelden. * Den "Virtual Machine Manager" starten. * Mit der rechten Maustaste localhost auswählen, dann Details auswählen. Mit ''Speicher hinzufügen'' folgende virtuelle Festplatten anlegen: * vm-fast-vg (LVM Volume Group, s.o.) * vm-slow-vg (LVM Volume Group, s.o.) In ''Virtual Machine Manager'' können jetzt virtuelle Maschinen angelegt werden (genaue Beschreibung auf den Seiten, die die einzelnen VMs beschreiben).