Installation und Konfiguration von OpenVZ auf einem Debian Server
Agenda:
1. Allgemein
2. Installation OpenVZ
3. Installation VEs
4. Netzwerkkonfiguration
5. Ressourcenmanagement
6. Templates
7. Quellenverzeichnis
1. Allgemein:
Ich habe mich bemüht, in diesem Howto alle verwendeten Quellen mit anzugeben, um sie so auch später bei z.B. Updates von Debian noch nutzen zu können.
Genutzte Quellen werden in eckigen Klammern dargestellt ([#]) und im Quellenverzeichnis angegeben.
Außerdem versuche ich jeden einzelnen Schritt genau zu erklären – so versteht ihr, warum ich was gemacht habe und ihr könnt die Installation leichter euren eigenen Wünschen anpassen.
Ich selbst habe für dieses Howto die derzeit stable Debianversion „Lenny“ (sowohl für Wirt, als auch Gastsystem) und den Editor „vim“ verwendet.
2. Installation OpenVZ
Ich habe in meiner /etc/apt/source.list nur die Standard-Repositories:
deb http://ftp.de.debian.org/debian stable main deb-src http://ftp.de.debian.org/debian stable main deb http://security.debian.org/ stable/updates main deb-src http://security.debian.org/ stable/updates main
Also ggf. die /etc/apt/source.list anpassen:
vim /etc/apt/sources.list
OpenVZ setzt auf Host-Betriebssystem auf und liegt als Virtualisierungsschicht darüber.
Abhängig von der verwendeten Rechnerarchitektur stehen dazu unterschiedliche Kernel zur Verfügung:
- linux-image-openvz-686
- linux-image-openvz-amd64
Um den OpenVZ-Kernel zu installieren folgenden Befehl eingeben (anstelle von <kernel> einen der o.g. Kernel angeben):
apt-get install <kernel>
Um nun auch von dem gerade installiertem Kernel booten zu können, muss noch der Bootloader aktualisiert werden:
update-grub
Danach neustarten…
init 6
…und im GRUB-Menü den OpenVZ-Kernel auswählen (sollte standardmäßig aktiviert sein).
Nun müssen einige Kernelparameter angepasst werden. Diese Parameter werden in der Datei /etc/sysctl.conf gespeichert.
Also die Datei öffnen…
vim /etc/sysctl.conf
…und anschließend überprüfen, ob folgende Einstellungen darin übereinstimmen:
# On Hardware Node we generally need # packet forwarding enabled and proxy arp disabled net.ipv4.conf.default.forwarding=1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.ip_forward=1 # Enables the magic-sysrq key kernel.sysrq = 1 # we do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0
Wenn Einstellungen geändert wurden, müssen die geänderten Parameter mit folgendem Befehl geladen werden:
sysctl -p
Abschließend könnt ihr noch einen symbolischen Link erstellen, um die Kompatibilät zu älteren Versionen zu gewährleisten.
ln -s /var/lib/vz /vz
Installation VEs
Nun können wir die virtuellen Umgebungen (virtual Environment, kurz: VE oder auch Container, kurz: CT oder auch oft verwendet wird Virtual Private Server, kurz: VPS) einrichten.
Dazu benötigen wir die OpenVZ-Tools:
apt-get install vzctl vzquota
Dabei ist vzctl ein Werkzeug, um die VEs zu verwalten (erstellen, löschen, starten, stoppen etc.) und vzquota, um die Zuteilung von Festplattenspeicher zu verwalten. Letzteres wird aber häufig durch vzctl eingesetzt. Also überlegt euch, ob ihr es installieren wollt.
Mit OpenVZ kann man alle Linuxdistributionen virtualisieren. Dazu gibt es bereits vorgefertigte Templates.[2]
Da diese allerdings selten aktuell sind, zeige ich euch im Punkt 6. wie ihr eure Eigenen erstellen könnt.
Um eine VE zu installieren, muss zuvor ein Template unter /var/lib/vz/template/cache/ gespeichert werden.
Templates sind komprimierte Abbildungen des Systemes. OpenVZ macht nichts anderes, als diese zu entpacken und in ein Verzeichnis einzubinden.
Jede VE erhält dabei eine ID (im folgenden: VEID), die man bei der Einrichtung auswählt. Sie muss über 100 liegen und für jede VE einmalig sein. Am Einfachsten wählt man eine ID, die Rückschlüsse auf die IP des jeweiligen Servers gibt (die VEID wird nach außen nicht angezeigt), als Beispiel: mein erster Server innerhalb der virtuellen Umgebung hat die IP 192.168.80.10, also hab ich für die VEID 8010 gewählt.
Habt ihr das vorgefertigte Debian Lenny-Template von der 2. Quelle heruntergeladen und in das o.g. Templateverzeichnis eingefügt, könnt ihr darauf aufbauend eine VE erstellen:
vzctl create 8010 ??ostemplate debian-5.0-x86 ??config vps.basic
Anstatt der 8010 könnt ihr natürlich eure eigene VEID angeben und anstelle von „debian-5.0-x86“ ein anderes Template aus dem Templateverzeichnis. In den folgenden Befehlen bleibe ich aber bei dem Beispiel mit der 8010 als VEID.
Um die VE beim hochfahren des Server automatisch starten zu lassen, führt ihr folgenden Befehl aus:
vzctl set 8010 -–onboot yes –-save
Andernfalls könnt ihr sie damit manuell starten:
vzctl set 8010 start
Um einen Hostnamen und eine IP-Adresse für die VE einzutragen, gebt ihr folgendes ein:
vzctl set 8010 ??hostname Server1 ??save
vzctl set 8010 ??ipadd 192.168.80.10 ??save
Der neue Server braucht noch einen Nameserver:
vzctl set 8010 ??nameserver 192.168.180.10 ??nameserver 192.168.180.11 ??save
Nun braucht ihr noch ein Passwort für euren root-Account:
vzctl exec 8010 passwd
Achtung! – das Passwort wird dabei auf dem Bildschirm angezeigt
Ihr könnt über exec jegliche Befehle in der VE ausführen. Einfacher ist es jedoch, sich in diese einzuklinken:
vzctl enter 8010
…oder auf dem Server einen SSH-Server einzurichten.
Weitere Befehle:
um die VE zu verlassen
exit
…zu stoppen
vzctl stop 8010
…neuzustarten
vzctl restart 8010
…zu löschen
vzctl destroy 8010
um eine Liste aller (auch der gestoppten) VEs anzeigen zu lassen:
vzlist -a
4. Netzwerkkonfiguration
Es gibt zwei Möglichkeiten unter OpenVZ die Netzwerkkarte einzubinden.
Standardmäßig wird bei der Einrichtung einer VE die Netzwerkkarte als „Virtual Network Device (kurz: Venet) eingebunden. Die Alternative heißt „Virtual Ethernet Device“ (kurz: Veth).
Beide haben Vor- und Nachteile die in folgender Tabelle dargestellt werden:
Netzwerkkarte | Veth | Venet |
MAC-Adresse Broadcasts innerhalb VE Datenverkehr mitschneiden Brückbar mit anderen Interfaces Geschwindigkeit Ergebnis der Netzwerksicherheit |
ja ja ja ja langsam schwach |
nein nein nein nein schnell hoch |
Anwendungsbereich | Serverdienste | Testumgebungen |
Quelle: [3]
Um eine Veth bei der VE einzurichten, müsst ihr folgendes eingeben:
vzctl set 8010 ??netif_add eth0,00:D0:59:31:F1:9A,veth8010.1,00:77:BF:93:65:34 ??save
Nun könnt ihr innerhalb der VE ganz normal über die /etc/network/interfaces die Netzwerkeinstellungen vornehmen.
5. Ressourcenmanagement
Standardmäßig sind die Ressourcen der VE recht niedrig. Wenn diese an ihre Grenzen stoßen, erhält man zumeist keinerlei Antwort der VE mehr.
Mit folgendem Befehl erhält man eine Übersicht über verwendete und zugewiesene Ressourcen:
vzctl exec 8010 cat /proc/user_beancounters
Standardmäßig dürftet ihr nun dies angezeigt bekommen:
Version: 2.5 uid resource held maxheld barrier limit failcnt 0: kmemsize 2459419 4119257 2147483647 2147483647 0 lockedpages 0 0 2147483647 2147483647 0 privvmpages 9178 14072 2147483647 2147483647 0 shmpages 659 675 2147483647 2147483647 0 dummy 0 0 2147483647 2147483647 0 numproc 52 74 2147483647 2147483647 0 physpages 1611 1868 2147483647 2147483647 0 vmguarpages 0 0 2147483647 2147483647 0 oomguarpages 1611 1868 2147483647 2147483647 0 numtcpsock 3 3 2147483647 2147483647 0 numflock 1 6 2147483647 2147483647 0 numpty 1 1 2147483647 2147483647 0 numsiginfo 0 3 2147483647 2147483647 0 tcpsndbuf 29568 29568 2147483647 2147483647 0 tcprcvbuf 49152 0 2147483647 2147483647 0 othersockbuf 4480 21760 2147483647 2147483647 0 dgramrcvbuf 0 1216 2147483647 2147483647 0 numothersock 24 27 2147483647 2147483647 0 dcachesize 543611 644525 2147483647 2147483647 0 numfile 931 1199 2147483647 2147483647 0 dummy 0 0 2147483647 2147483647 0 dummy 0 0 2147483647 2147483647 0 dummy 0 0 2147483647 2147483647 0 numiptent 10 10 2147483647 2147483647 0
Sobald in der letzten Zeile etwas anderes als einer 0 steht, überschreiten die jeweiligen Ressourcen (die Zeile in der die andere Ziffer steht) ihre Grenze und müssen neu zugewiesen werden.
Dies erreicht man z.B. mit:
vzctl set 101 ??kmemsize $((2147483647*2)):$((2147483647*2)) ??save
In diesem Beispiel wurden Grenze und Limit der Ressource „kmemsize“ (der Wert in den Klammern entspricht dem Wert in der Tabelle) verdoppelt.
Neben der o.g. Ressourcen verbraucht sich auch der Festplattenspeicher recht schnell.
Hiermit könnt ihr euch den Festplattenverbrauch ansehen:
vzctl exec 8010 df
Für die Inodes nutzt ihr df -i. Sind die %-Werte zu hoch, muss der VE zusätzlicher Speicher zugewiesen werden.
Um die von OpenVZ vordefinierten Grenzen und Limits der Festplattenspeicher einzusehen:
vzquota stat 8010
Mithilfe dessen, könnt ihr folgenden Befehl nutzen, um den Speicher zu verdoppeln:
vzctl set 8010 ??diskspace $((1048576*2)):$((1153434*2)) ??save
…oder um die Inodes verdoppeln:
vzctl set 8010 ??diskinodes $((200000*2)):$((220000*2)) ??save
6. Templates
Wie bereits beschrieben, werden die Templates unter /var/lib/vz/template/cache/ als komprimierte tar-Archive gespeichert.
So könnt ihr ganz leicht eigene Templates erstellen. Am einfachsten auf Basis der vorgefertigten Templates. [2]
Mithilfe dessen eine VE erstellen, diese updaten und entsprechend konfigurieren (ihr könnt z.B. Serverdienste installieren und damit ein Template erstellen, dass diese Dienste für kommende Server bereitstellt).
Vorrausgesetzt ihr habt eure VE erstellt und entsprechend eingestellt, dazu die Befehle, um daraus ein Template zu erstellen:
cd /var/lib/vz/private/VEID/
tar -zcf /var/lib/vz/template/cache/templatename.tar.gz .
Der abschließende Punkt gehört dabei mit zum Befehl. Mit dieser Variante könnt ihr komplette Images eurer VE erstellen. Das Template befindet sich dann gleich im bereits vielfach erwähnten /var/lib/vz/template/cache/-Verzeichnis und kann bei der Erstellung einer VE benutzt werden.
Noch ein paar andere wichtige Verzeichnisse:
Einhängepunkt der VEs
/var/lib/vz/private/VEID/
Konfiguration der jeweiligen VE (als VEID.conf gespeichert)
/etc/vz/conf/
Diese könnt ihr übrigens auch manuell bearbeiten und mit folgendem Befehl überprüfen:
vzcfgvalidate /etc/vz/conf/VEID.conf
Wer sich noch mehr mit OpenVZ auseinandersetzen möchte, dem empfehle ich die Diplomarbeit von Stephan Küffner [3] und natürlich das Wiki der offiziellen (größtenteils englischen) OpenVZ-Seite. [4]
7. Quellenverzeichnis
[1] http://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=all&keywords=openvz
[2] http://wiki.openvz.org/Download/template/precreated
[3] http://www.dn.fh-koeln.de/download/arbeiten/stephan_kueffner_2008.pdf