Intern:IT:HowTo:Ganeti

Aus PILARKTO.ORG Open Laboratory e.V.
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

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