== Installationshinweise: Virtualisierungs-Server unter Ganeti mit KVM ==

<<TableOfContents(3)>>

Ein praktisches Cheat Sheet für die Administration von Ganeti im Terminal ist [[[https://nsrc.org/workshops/2014/btnog/raw-attachment/wiki/Track2Agenda/ganeti-cheatsheet.pdf|hier]] zu finden (externer Link!). 

=== Vorbereitungen ===

Durchführen der [[Technik/Installation/VirtServer/BasisJessie|Basisinstallation]].


=== Festplattenpartitionierung (im Detail) ===

Im allen Virtualisierungs-Servern werden schnelle SAS-Festplatten eingebaut.

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 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/sda3 /dev/sdb3
$ 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 Group {{{ganeti_vg}}} für Ganeti anlegen:{{{
$ pvcreate /dev/md1
$ pvcreate /dev/md2
$ [...]
# alle RAID-1 Devices zu einer Volume Group zusammenführen
$ vgcreate ganeti_vg /dev/md1 /dev/md2 [...]
}}}

=== 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.

 * Die erste 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.

 * Die zweite Schnittstelle ist für das Backbone-Netz ({{{172.16.0.0/24}}} vorgesehen.

'''__Beispiel__''': (Datei: {{{/etc/network/interfaces}}} auf {{{virt-man-01}}}){{{
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet manual
	bridge_fd 0
	bridge_hello 2
	bridge_maxage 12
	bridge_stop off
	bridge_ports eth0

# backbone interface
auto eth1
iface eth1 inet manual

auto br1
iface br1 inet manual
	bridge_fd 0
	bridge_hello 2
	bridge_maxage 12
	bridge_stop off
	bridge_ports eth1
	address 172.16.0.1
	netmask 255.255.255.0
	broadcast 172.16.0.255
	gateway 172.16.0.253
}}}


Nach der Neukonfiguration der Schnittstellen muss das Netzwerk (bzw. zum Testen der korrekten Funktion beim System-Boot: der Server) neu gestartet werden.

=== Ganeti einrichten ===

Ganiti unterstützt Virtualisierung verteilt über mehrere Virtualisierungsserver. Einer dieser Virtualisierungsserver muss Master-Status im Ganeti-Cluster haben. Auf unseren Schulsystemen ist dies Standardmäßig der Virt-Man-01. Ganeti ist aber so eingerichtet, das theoretisch jeder andere Knoten (in Ganeti heißen Virtualisierungsserver Knoten) Master-Status erlangen kann. Der Master bekommt den host-Namen {{{ganeti-cluster.intern}}}.

==== Vorbereitungen ====
Anpassen von {{{/etc/hosts}}}:
  * auf allen Virtualiesierungsserver müssen in /etc/hosts alle Virtualisierungsserver eingetragen sein, Beispiel:{{{
172.16.0.1 virt-man-01.backbone virt-man-01
172.16.0.2 virt-man-02.backbone virt-man-02
[...]
}}}
  * zusätzlich muss auf allen Virtualisierungsservern der Hostname des Ganetimasters in /etc/hosts eingetragen werden, Beispiel:{{{
172.16.0.240 ganeti-cluster.backbone ganeti-cluster

  * {{{/root/.ssh}}} muss angelegt sein: {{{mkdir /root/.ssh}}}

==== Ganeti Cluster initializieren ====

{{{
$ gnt-cluster init \
  --master-netdev eth1 \
  --vg-name ganeti_vg \
  --enabled-hypervisors kvm \
  --nic-parameters link=br0 \
  --hypervisor-parameters kvm:initrd_path=,kernel_path= \
  --enabled-disk-templates=plain
  ganeti-cluster.backbone
}}}

Ganeti erzeugt eine ssh-key-pair in {{{/root/.ssh}}} und hinterlegt dessen public-key in {{{/root/.ssh/.authorized_key}}}, welche auf die anderen Virtualisierungsserver kopiert werden muss.

Nun können die anderen Virtualisierungsserver den Cluster hinzugefügt werden:{{{
$ gnt-node add virt-man-<xx>
}}}

Für die Virtuellen Maschinen des DebianEdu-Netzwerkes stellen wir innerhalb von Ganeti ein Netzwerk bereit:
{{{
$ gnt-network add --network=10.0.0.0/16 --gateway=10.0.0.1 DebianEdu
$ gnt-network connect -N mode=bridged,link=br0 DebianEdu
}}}

Um die GanetiMgr Instanz (Webfrontend für Ganeti) stellen wir auch das Backbone-Netzwerk innerhalb von Ganeti bereicht.{{{
$ gnt-network add --network=172.16.0.0/24 --gateway=172.16.0.253 Backbone
$ gnt-network connect -N mode=bridged,link=br1 Backbone
}}}
==== Installation von Tjener vorbereiten ====

Nun kann mit der [[https://wiki.it-zukunft-schule.de/Technik/Installation/VM/HauptServerTjener/Jessie|Installation des Hauptservers]] fortgefahren werden.

==== Installation von GanetiMgr ====

Das Web Management Tool !GanetiMgr kann bei der Fa. [[http:das-netzwerkteam.de|DAS-NETZWERKTEAM]] beauftragt werden. Die Installation ist so spezifisch und zeitlichen Änderungen unterworfen, dass eine öffentlich Dokumentation meist immer veraltet oder ungenau ist.