Network-Computing-Lablog Online: Kostenfreies Tool für Virtualisierung:
Netzwerk-Praxis: Kernel-Teilung mit OpenVZ

von Andreas Stolzenberger (ast@nwc.de), bre

13.03.2009

Alle reden über Xen, KVM, Hyper-V oder Vmware als Virtualisierungslösungen. Doch in vielen Installationen genügt eine ressourcensparende Containertechnologie. Network Computing hat sich die Open-Source-Software »OpenVZ« angesehen. Sie stellt einen Großteil der Funktionen von Parallels‘ »Virtuozzo« zur Verfügung.

Hypervisoren erstellen komplette virtuelle Maschinen, mit einem individuellen Betriebssystem. Das kostet Speicher und CPU-Zeit. Viele Anwender brauchen jedoch keinen Systemwildwuchs. Ihnen würden mehrere virtuelle Server mit demselben Betriebssystem genügen. Warum also fünf Instanzen ein und desselben Systemkerns hochfahren, wenn sich virtuelle Server auch einen Kern teilen können?

Das Management-Tool von OpenVZ zeigt an, wie viele Container der Administrator angelegt hat.

Die Systemvirtualisierung, auch als Container-Technologie bekannt, setzt einen modifizierten Kernel mit virtuellen Systemumgebungen ein. Ein Container verbraucht dabei nur so viele Ressourcen, wie die darin laufenden Threads.

Die Container arbeiten vollständig getrennt voneinander und können die Ressourcen der parallel laufenden Systeme weder einsehen noch manipulieren. Jeder Container verfügt über sein eigenes Benutzerverzeichnis, eine eigene IP-Adresse und natürlich einen eigenen Root.

Wenn der Ressourcenbedarf aller Dienste eines Servers kleiner oder nur wenig größer als der Bedarf des eigentlichen Betriebssystems ausfällt, sollte der Administrator eine Containerlösung gegenüber einem Hypervisor bevorzugen. In der Praxis finden sich Containerlösungen vor allem bei Internet-Service-Providern. Sie hosten private Web-Server, die aus Sicht des jeweiligen Nutzers wie ein vollständig eigener Rechner erscheinen.

Container machen auch in IT-Infrastrukturen regulärer Unternehmen Sinn. So lassen sich die vielen ständig benutzten LAN-Basisdienste wie DNS, LDAP-Directory, Netzwerk-Management, Monitoring oder Syslog auf Container verteilen.

Kernel ohne Distribution

Besonders flexibel arbeiten Containerlösungen unter Linux. Die eigentliche Distribution funktioniert im Prinzip unabhängig von der Kernel-Version. Ein Host-Rechner kann also parallel virtuelle Container mit Red-Hat-, Suse- und Debian-Linux betreiben.

Auch der simultane Betrieb von Containern mit der Distributions-Version 3, 4 und 5 funktioniert ohne Probleme. Die Firma Parallels [1] (früher SW-Soft) offeriert die kommerzielle Lösung »Virtuozzo«. Diese gibt es für Windows oder Linux.

Einen Großteil der Funktionen von Virtuozzo für Linux packt Parallels aber auch in die frei verfügbare Open-Source-Lösung OpenVZ [2]. Die Software ist Teil des Kernel-Source-Trees und installiert sich daher ohne großen Aufwand auf den meisten Distributionen.

Details der Testinstallation

Im den Real-World Labs Poing betreibt Network Computing eine OpenVZ-Installation auf Basis des Ubuntu [3]-Servers 8.04 x64. Als Hardware dient ein früherer Vmware-Server mit vier Single-Core-»Opteron«-Prozessoren von AMD [4] und 8 GByte Speicher.

Zunächst richtet der Verwalter den OpenVZ-Kernel und das Verwaltungstool vzctl ein:

aptitude install linux-image-openvz vzctl

Fehlende Paketabhängigkeiten löst aptitude in der Regel automatisch. Zum Abschluss erzeugt das Setup die passende initrd und trägt den OpenVZ-Kernel in das Grub-Menü ein, jedoch nicht als Default.

Verwalter, die eine getrennte /boot-Partition für die Kernel-Images verwenden, müssen aufpassen, dass genug freier Platz vorhanden ist, weil die Installation der initrd sonst scheitert. Zur Sicherheit sollte der Verwalter vor der Installation alte Kernel-Images entsorgen.

Vor dem Neustart muss der Administrator noch die /etc/sysctl.conf nach den Vorgaben von Parallels modifizieren (beschrieben auf www.openvz.org [5]). Ohne die Modifikationen arbeiten die virtuellen LAN-Adapter in den Containern nicht richtig. Alle zu OpenVZ gehörenden Daten liegen unterhalb von /var/lib/vz. Manche Tools erwarten die Dateien jedoch unter /vz, weshalb sich ein symbolischer Link von /var/lib/vz auf /vz empfiehlt.

Network Computing verwendet im Host-System eine recht bescheidene Festplatte, welche nur das Basissystem aufnimmt. Für die Container greift der Server auf ein schnelles SAN-Laufwerk zu, das der physische Server direkt nach /vz einbindet und symbolisch nach /var/lib/vz verlinkt.

Buntes Nebeneinander

Nach dem Neustart geht es dann an die virtuellen Systeme. Einen frischen Container kann der Administrator im Prinzip nicht verwenden, weil er zunächst völlig leer ist. Auf der Web-Seite des OpenVZ-Projekts kann sich der Anwender daher Dutzende vorgefertigter Templates für Debian, Ubuntu, Suse oder Fedora herunterladen.

Messungen mit einem Apache-Server mit 768 MByte RAM zeigen, dass auch schwächere Maschinen etwa bis zu 120 Container verkraften, beovr die Antwortzeiten das akzeptable Maß übersteigen.

Diese erhalten ein Basis-Set an Tools und den jeweiligen Paket-Manager der Distribution, um über das Netzwerk weitere Software nachzurüsten. Alle Templates landen im Verzeichnis (/var/lib)/vz/templates/cache.

Das Kommando-Zeilen-Tool vzctl erstellt Maschinen und weist ihnen IP-Adressen, Namen sowie Ressourcen zu. Über vzctl kann der Verwalter auch von außen in abgeschaltete VEs eingreifen, um Systemparameter zu ändern, User anzulegen oder Konfigurationsdateien nachzuladen.

Die folgenden Kommandos erstellen einen Container mit der 32-Bit-Verison von Fedora Core 9 und weisen dem Setup eine IP-Adresse, Nameserver und einen Host-Namen zu:

vzctl create 11 --ostemplate fedora9-x86

vzctl set 11 --hostname vz11.nwc.local --save

vzctl set 11 --ipadd 10.11.8.11 --save

vzctl set 11 --nameserver 10.11.2.1 –save

Der Verwalter kann den Container dann starten und sich auf dessen Kommandozeile begeben:

vzctl start 11

vzctl enter 11

Das virtuelle System hat zu diesem Zeitpunkt noch kein Root-Passwort. Das muss der Administrator als erstes setzen. Danach lassen sich über den jeweiligen Paket-Manager die nötigen Dienste einrichten. In der Regel enthält jedes Template einen Open-SSH-Server, so dass der Verwalter die Secure-Shell zur Steuerung des Containers nutzen kann.

Dem Container gaukelt OpenVZ ein auf / gemountetes Dateisystem vor, das stets 1 GByte freien Speicher behält. Der Container darf bis zur maximalen Größe des darunter liegenden Dateisystems wachsen, wenn der Administrator die virtuelle Plattengröße nicht mit vzquota einschränkt. Vzlist gibt jederzeit Auskunft über die laufenden Container und deren Auslastung. Vzctl steuert außerdem viele Regler, welche den Ressourcenbedarf der einzelnen Container individuell begrenzen können.

Wer die Kommandozeile von vzctl verschmäht, kann das Open-Source-Web-GUI WebVZ [6]nachinstallieren. Das Tool benötigt Ruby on Rails und bringt einen eigenen Web-Server mit. Einmal gestartet, erzeugt es ein einfaches Web-GUI für das Containermanagement.

Verteilte Dienste

Im Labor funktionieren fast alle OS-Templates recht gut. Die Ubuntu-Vorlage kommt jedoch mit einer stark eingeschränkten Quellenliste für apt. Eines der 64-Bit-Fedora-Templates hat Probleme mit dem Netzwerkzugriff. In der Praxis funktionieren Container mit den 32-Bit-Ausgaben von CentOS oder Fedora sehr zuverlässig.

Für den weiteren Laborbetrieb soll nun der zugrunde liegende Ubuntu-Server 8.10 x64 als MySQL-Datenbankserver arbeiten. Diverse Container werden Dienste wie SNMP-Monitoring, Syslog, LDAP und Ähnliches übernehmen und ihre Daten dabei zentral in der MySQL-Datenbank des Hosts ablegen.

Wer OpenVZ nicht mithilfe der Kommandozeile bedienen möchte, kann au das Web-GUI WebVZ zurückgreifen.

Wenn das wie erhofft funktioniert, verlagert Network Computing später alle Basis-Netzwerkdienste wie DHCP, DNS, Mail und Print in einzelne Container und integriert deren Konfigurationen in ein zentrales LDAP-Verzeichnis und den MySQL-Server.

Das sollte den 4-Wege-Rechner moderat belasten und dabei mindestens drei vorhandene Server ersetzen.

[1] http://www.parallels.com/
[2] http://www.openvz.org/
[3] http://www.ubuntu.com/
[4] http://www.amd.com/
[5] http://www.openvz.org/_
[6] http://webvz.sourceforge.net/