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

3 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: machdichdaraus

also beachten: bei den befehlen die ?? in doppelte bindestriche (2x -) umwandeln


Von: machdichdaraus

grml die links funzen nimmer -.-

und bei den befehlen wurden die doppelte -- in ?? umgewandelt - warum auch immer :/


Von: pbpromotion

Ich versuche openvz zu installieren nur leider hängts bereits hier


root@pl ~ # apt-get install linux-image-openvz-amd64Reading package lists... DoneBuilding dependency treeReading state information... DoneE: Unable to locate package linux-image-openvz-amd64


 


Ich habe Debian 8.5 am laufen.


 


 


mfg