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

[1]

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&section=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

[4] http://openvz.org

Das könnte dich auch interessieren …