Intern:IT:HowTo:Ganeti
Ganeti
Installation
Aktuell ist auch die Version 2.6 stabil (und von Falkland supported)
Manual (inkl. Install Howto Debian/Fedora): http://docs.ganeti.org/ganeti/2.6/html/install-quick.html
Für die Installation auf Gentoo:
Annahme ist, dass kein LVM und DRBD verwendet wird, sondern statt dessen Ceph.
KVM wird als Hypervisor verwendet, der in den Modulen des Falkland-Kernels enthalten ist.
emerge -av ganeti ganeti-instance-image ganeti-instance-debootstrap ceph openssh \ bridge-utils iproute2 arping simplejson dev-python/pyparsing pynotifier pycurl \ ctypesgen socat fping =sys-libs/libseccomp-1.0.1
Je nach Anwendungsfall können evtl. zstl. USE-Flags eingesetzte werden:
USE=""kvm rbd filestorage haskell-daemons htools sharedstorage xen"
Wenn libseccomp-2.x installiert ist, kann die KVM-Version nicht gefunden werden ("Unable to get KVM version")
Wenn das System nur als Ganeti-Hypervisor eingesetzt werden soll, kann auch ein "emerge -avuND" verwendet werden, der alle (dep.) Packete, wenn möglich updated.
Zur Info hier die Ausgabe von eix (Stand August 2013):
[I] app-emulation/ganeti Available versions: ~*1.2.9 2.0.6 2.1.8 2.2.2 2.3.1 2.4.5-r1 ~2.5.2-r2 ~2.6.0 ~2.6.1 (~)2.6.2{tbz2} (~)2.6.2{tbz2}[1] {drbd +filestorage haskell-daemons htools ipv6 kvm lxc rbd sharedstorage syslog test xen} Installed versions: 2.6.2{tbz2}(18:54:35 05/21/13)(filestorage ipv6 kvm rbd -drbd -haskell-daemons -htools -lxc - sharedstorage -syslog -test -xen) Homepage: http://code.google.com/p/ganeti/ Description: Ganeti is a virtual server management software tool
* app-emulation/ganeti-htools Available versions: 0.2.8 ~0.3.0 0.3.1 {doc test} Homepage: http://code.google.com/p/ganeti/ Description: Cluster tools for fixing common allocation problems on Ganeti 2.0 clusters.
* app-emulation/ganeti-instance-debian-etch Available versions: ~*0.3 ~*0.4 Homepage: http://code.google.com/p/ganeti/ Description: Debian Etch instance example for Ganeti
[I] app-emulation/ganeti-instance-debootstrap Available versions: 0.9 0.11{tbz2} ~0.12 Installed versions: 0.11{tbz2}(17:10:50 05/17/13) Homepage: http://code.google.com/p/ganeti/ Description: Scripts to build Ganeti VMs with debootstrap
[I] app-emulation/ganeti-instance-image Available versions: 0.5 0.5.1{tbz2} ~0.6 Installed versions: 0.5.1{tbz2}(17:18:45 05/17/13) Homepage: http://code.osuosl.org/projects/ganeti-image Description: Scripts to build out CD or image based VMs using Ganeti
[1] "falkland" /var/lib/layman/falkland
Konfiguration
Netzwerk in /etc/conf.d/net
bridge_br0="eth0" config_eth0=( "null" ) config_br0=( "10.1.0.11 netmask 255.255.254.0" ) routes_br0=( "default gw 10.1.0.1" ) # make sure eth0 is up before configuring br0 depend_br0() { need net.eth0 }
Hostname in /etc/conf.d/hostname
HOSTNAME="node1.example.org" # nicht nur node1
Um die DNS-Auflösung für den Anfang zu umgehen, kann die /etc/hosts genutzt werden
# /etc/hosts: Local Host Database 127.0.0.1 localhost 10.1.0.11 hv-kvm1.pilarkto.org hv-kvm1 10.1.0.12 hv-kvm2.pilarkto.org hv-kvm2 10.1.0.10 ganeti.pilarkto.org ganeti
Wichtig: Die IP für ganeti.pilarkto.org darf nicht vergeben sein. Sie wird durch ganeti später als master-ip verwendet.
Kernel für Instanzen (auf beiden Knoten)
cd /boot ln -s vmlinuz-XXX vmlinuz-3-kvmU
Initialisierung
Von hv-kvm1 aus, der als (erster) Master fungieren soll.
gnt-cluster init -s 10.1.0.11 --no-drbd-storage --no-lvm-storage --enabled-hypervisors=kvm \ --master-netdev=br0 -N mode=bridged,link=br0 ganeti.pilarkto.org
Zum Prüfen der Parameter und ob der Cluster angelegt wurde, kann man mit
gnt-cluster info
oder
gnt-cluster verify
Anpassungen
Für KVM wird kein (externer) Kernel verwendet:
gnt-cluster modify -H kvm:kernel_path=""
Das standardmäßige VNC-Interface
gnt-cluster modify -H kvm:vnc_bind_address="0.0.0.0"
Das hat zur Folge, dass man den VNC-Socket nur über einen SSH-Port-Tunnel erreichen kann, aber es ist eine sicherheitstechisch empfehlenswerte Variante.
genutzt werdenb kann, ist eine SSH-Verbindung per "-L" Parameter notwendig. Mehr Infos hier
Man kann dann bei erfolgreicher Verbindung per "localhost::PortDesVM-VNC" einen der VNC-Ports des Servers erreichen.
Ganeti Instance anlegen
z.B. mit
gnt-instance add -t DISK_TEMPLATE -s DISKSIZE --no-start --no-install --no-ip-check --no-name-check -n Hypervisor1:Hypervisor2 -o image+default VMName
Eine neue DRBD-Disk einer existierenden VM hinzufügen
gnt-instance modify --disk add:size=4g VMName
wenn die vg noch mit angegeben werden möchte:
gnt-instance modify --disk add:size=4g,vg=vg-data VMName
Disk-Template converting
Wenn man in der Situation ist, dass man, wie im Kapitel danach, ein Update durchführen will oder man z.B. aus Platzgründen das "disk_template" wechseln will, muss je nach Template und Richtung bestimmte Dinge beachtet werden (Stand Mai 2015)
http://docs.ganeti.org/ganeti/2.13/html/design-disk-conversion.html#id2
DRBD -> File/Plain
2.13 (current stable)
https://code.google.com/p/ganeti/wiki/CommonIssues#Converting_disk_templates or
2.15 (current beta)
http://docs.ganeti.org/ganeti/2.15/html/design-disk-conversion.html
RBD -> DRBD
Shutdown VM
gnt-instance shutdown VMName
Backup/Export RBD nach (raw) image file
Zunächst die passende RBD-ID finden
gnt-instance info VMName |grep rbd |grep logical_id |cut -d "," -f 2 |sed s/\'//g |sed s/]//
Dann der eigentliche Backup/Export
rbd export rbd/RBD-ID VMName.img
Und die Ganeti-VM-Konfiguration sichern
gnt-instance info VMName >> VMName.info
Nun muss die alte Ganeti-Instance gelöscht werden
gnt-instance remove VName
Wenn auf Grund von Problemen mit den VM, diese nicht gelöscht werden kann, aber der Backup erfolgreich war, kann man auch diese Fehler ignorieren
gnt-instance remove --ignore-failures VMName
Neue VM mit DRBD-Disk-Template anlegen
s. Befehl oben http://wiki.open-laboratory.de/Intern:IT:HowTo:Ganeti#Ganeti_Instance_anlegen
Wichtig ist, dass in diesem Fall das neue Disk-Template DRBD ist und die Disk-Größe gleich ist. Natürlich empfiehlt es sich auch die anderen Parameter, wie RAM, VCPUs und NICs zu prüfen.
gnt-instance info VMName |diff - VMName.info
Backup von alter VM in neue Disk convertieren
Das macht man am besten mit qemu-img, da damit im Normalfall auch der Boot-Sektor korrekt gesetzt wird.
gnt-instance info VMName
In der Ausgabe nach dem ersten (child 0) Device suchen und dort das "device" für "on primary" in die Zwischenablage.
qemu-img convert -O raw VMName.img ABSOLUTER-PFAD-ZU-DEM-ON-PRIMARY-DEVICE
Und dann starten
gnt-instance start VMName
Sollte die VM nun nicht wieder starten, kann das z.B. am Bootloader oder auch an einer NIC dessen MAC sich ja nun geändert hat, liegen.
Wenn hier Korrekturbedarf ist, ist es empfehlenswert zunächst über VNC nachzusehen, was nicht funktioniert und evtl. mit einer GRML-CD zu booten und den/die Fehler zu korrigieren.
Troubleshooting
Wenn zwei Nodes eingerichtet sind, einer von beiden aber nicht erreichbar ist (beim Starten von Ganeti), wird der ganeti-Cluster nicht starten, bis der fehlende Server wieder erreichbar ist.
Um das zu umgehen, kann man folgendes auf dem verbleibenden Node eingeben:
ganeti-masterd --no-voting --yes-do-it
Dies ist aber nur in solchen Ausnahmefällen sinnvoll und ist mit Vorsicht zu genießen.
Weitere Doks
Man-Pages der Unterprogramme gibt es hier: http://docs.ganeti.org/ganeti/2.6/man/ </br>
Allgemeine Kommandos Infos hier: http://wiki.osuosl.org/public/ganeti/common_commands </br>
Ganeti_instance Howto: https://code.osuosl.org/projects/ganeti-image/wiki/HOWTO_-_Ganeti_Instance_Image
Updates
Mit Ganeti können Updates durchgeführt werden ohne die VMs herunterzufahren.
Eine (bereits erfolgreich getestete) Anleitung gibt es hier (z.B. für Version 2.9.) :
http://docs.ganeti.org/ganeti/2.9/html/upgrade.html
Ganeti WebManager
Aktuelle Version 0.10.2
Dokumentation: http://ganeti-webmgr.readthedocs.org/en/latest/
Installation
Quellen Github: https://github.com/osuosl/ganeti_webmgr Die aktuelle Doku befindet sich unter ReadTheDocs.
ganeti_webmgr
WebManager herunterladen und entpacken
wget https://code.osuosl.org/attachments/download/3321/ganeti-webmgr-0.10.2.tar.gz tar -xvf ganeti-webmgr-0.10.2.tar.gz cd ganeti_webmgr
Python-dev Pakete
Installation von fabric, pip, virtualenv, twisted, django
Bei gentoo (Stand Sept. 2013) sind das min. diese Pakete
[D] dev-python/fabric Available versions: ~1.1.1^t ~1.2.2^t ~1.4.0^t ~1.4.1^t ~1.4.2-r1 ~1.4.3 ~1.5.0 ~1.5.1 ~1.5.2 ~1.5.3 ~1.6.0-r1 ~1.6.1-r1 ~1.7.0 Vorlage:Doc python targets python2 5 python targets python2 6 python targets python2 7 test Installed versions: 1.6.0{tbz2}(17:57:27 05/09/13)(-doc -test) Homepage: http://fabfile.org http://pypi.python.org/pypi/Fabric Description: A simple pythonic tool for remote execution and deployment.
[I] dev-python/pip Available versions: 1.3.1^t{tbz2} ~1.4^t ~1.4.1^t Vorlage:Python targets python2 5 python targets python2 6 python targets python2 7 python targets python3 1 python targets python3 2 python targets python3 3 zsh-completion Installed versions: 1.3.1^t{tbz2}(17:54:57 05/09/13)(python_targets_python2_7 python_targets_python3_2 -python_targets_python2_5 -python_targets_python2_6 -python_targets_python3_1 -python_targets_python3_3 -zsh-completion) Homepage: http://www.pip-installer.org/ http://pypi.python.org/pypi/pip/ Description: Installs python packages -- replacement for easy_install
[I] dev-python/virtualenv Available versions: 1.9.1-r1{tbz2} ~1.10-r1 ~1.10.1 Vorlage:Doc python targets pypy1 9 python targets pypy2 0 python targets python2 5 python targets python2 6 python targets python2 7 python targets python3 1 python targets python3 2 python targets python3 3 test Installed versions: 1.9.1-r1{tbz2}(19:33:29 08/11/13)(python_targets_python2_7 python_targets_python3_2 -doc -python_targets_pypy1_9 -python_targets_pypy2_0 -python_targets_python2_5 -python_targets_python2_6 -python_targets_python3_1 -python_targets_python3_3 -test) Homepage: http://www.virtualenv.org/ http://pypi.python.org/pypi/virtualenv Description: Virtual Python Environment builder
[I] dev-python/twisted-core Available versions: 10.2.0 11.0.0{tbz2} ~11.1.0 ~12.0.0 ~12.2.0 12.3.0 ~13.0.0 ~13.0.0-r3 Vorlage:Crypt gtk python targets python2 6 python targets python2 7 serial Installed versions: 12.3.0(12:23:08 09/03/13)(crypt -gtk -serial) Homepage: http://www.twistedmatrix.com/ Description: An asynchronous networking framework written in Python
[I] dev-python/twisted-pair Available versions: ~11.1.0 ~12.0.0 ~12.2.0 12.3.0 ~13.0.0 ~13.0.0-r1 Vorlage:Python targets python2 6 python targets python2 7 Installed versions: 12.3.0(12:23:14 09/03/13) Homepage: http://www.twistedmatrix.com/ Description: Twisted low-level networking
[I] dev-python/twisted-web Available versions: 10.2.0 11.0.0{tbz2} ~11.1.0 ~12.0.0 ~12.2.0 12.3.0 ~13.0.0 ~13.0.0-r1 Vorlage:Python targets python2 6 python targets python2 7 soap Installed versions: 12.3.0(12:23:18 09/03/13)(-soap) Homepage: http://www.twistedmatrix.com/ Description: Twisted web server, programmable in Python
[I] dev-python/django Available versions: ~1.2.7 1.3.2 ~1.3.4 1.3.7 1.4.1 ~1.4.2 ~1.4.2-r2 1.4.5 ~1.5-r1 ~1.5.1 **9999 Vorlage:Doc mysql postgres python targets python2 5 python targets python2 6 python targets python2 7 python targets python3 2 python targets python3 3 sqlite test vhosts Installed versions: 1.4.5(03:28:45 08/17/13)(python_targets_python2_7 sqlite -doc -mysql -postgres -python_targets_python2_5 -python_targets_python2_6 -test -vhosts) Homepage: http://www.djangoproject.com/ http://pypi.python.org/pypi/Django Description: High-level Python web framework
[I] dev-python/django-registration Available versions: (~)0.8-r1 (~)1.0{tbz2} Vorlage:Python targets python2 6 python targets python2 7 Installed versions: 1.0{tbz2}(11:33:10 09/02/13)(python_targets_python2_7 -python_targets_python2_6) Homepage: http://www.bitbucket.org/ubernostrum/django-registration/wiki/ http://pypi.python.org/pypi/django-registration Description: An extensible user-registration application for Django
Um die django-registration zu installieren, muss noch in der Datei /etc/portage/package.accept_keywords folgendes eingetragen werden
dev-python/django-registration ~amd64
Deploy
fab deploy
Einstellungen
cp settings.py.dist settings.py # sqlite ist default und vorkonfiguriert
Für externen (nicht-localhost) Zugang zum webmgr und der (No)VNC-Console sind folgende zusätzliche Anpassungen der "settings.py" nötig:
SITE_DOMAIN = 'servername:8000'
VNC_PROXY = 'servername:8888'
servername ist die in der /etc/hosts oder im DNS eingetragene FQDN, dessen IP vorallem nicht "localhost" ist.
Initialisierung
virtualenv
source venv/bin/activate
locale mit "locale" prüfen, ob diese gesetzt sind. Wenn nicht:
export LANG="de_DE.UTF-8" #oder eben en_US...
Init ganeti.db
./manage.py syncdb --migrate
und den Superuser einrichten (innerhalb des MIgrations-Prozess).
./manage.py rebuild_index
Starten
Zum erstmaligen Starten/Testen empfiehlt sich ein "screen":
cd /root/ganeti_webmgr source venv/bin/activate twistd --pidfile=/tmp/proxy.pid -n vncap -c tcp:8888:interface=servername & twistd --pidfile=/tmp/policy.pid flashpolicy & ./manage.py runserver servername:8000 &
Troubleshooting
Um den bind des Ganeti-Webmgr nicht auf localhost zu setzten (default), muss man den alternativcen bind beim starten des Server-Dienstes angeben
./manage.py runserver servername:8000
Vorraussetzung ist, dass "servername" aufgelöst werden kann in eine IP-Adresse des Servers.
Ebenfalls notwendig ist das laden der Virtualenv:
source venv/bin/activate
(in der gleichen shell wie die zum starten des Servers verwendet werden soll)
Um den Initalisierungs-Prozess erneut zu starten, kann man:
1. die Ganeti DB löschen
ganeti_webmgr # rm ganeti.db
2. die DB neu ausetzten
./manage.py syndb --migrate #u.s.w.
Weitereführendes
https://code.osuosl.org/projects/ganeti-webmgr/wiki/VNC#VNC-AuthProxy
https://code.osuosl.org/projects/twisted-vncauthproxy/wiki/Setup