Virtualisierung mit Solaris

Solaris Zones und Logical Domains ermöglichen mehrere Solaris-Instanzen und andere Betriebssysteme wie Linux auf demselben Server.

Artikel erschienen in Swiss IT Magazine 2007/18

     

Während man bei der x86-Plattform erst jetzt so richtig auf den Geschmack der Virtualisierung kommt, kennen Solaris-Administratoren dieses Feature schon länger. Denn die SPARC-Plattform bietet wie IBMs Power Unterstützung für Virtualisierung und dynamische Partitionierung. Aber auch das Betriebssystem (Open)Solaris selber bietet Softwarelösungen, die plattformunabhängig verfügbar sind.


Eingeteilt in Zonen

Mit Solaris 10 wurde eine neue einfache Virtualisierungslösung eingeführt, die Solaris Zonen. Auf eine bestehende Solaris-10-Installation können dank der Zonen mit einfachen Mitteln weitere Solaris-Instanzen installiert und hochgefahren werden. Dabei wird nicht die Hardware virtualisiert, sondern ein spezieller Kern geladen, welcher eine definierte Umgebung für die Zonen-Prozesse bietet. Alle Prozesse einer Zone werden vom Kern in der Mutterzone verwaltet.


Die Ressourcenverteilung (Speicher, Scheduling, Prozessorzuteilung, Netzwerkzuteilung usw.) erfolgt dabei über den Mutterkern. Deshalb sind von der Mutterzone aus gesehen auch sämtliche Prozesse aus einer Zone sichtbar. Umgekehrt sind aber die in der Zone laufenden Prozesse komplett von der Mutterzone abgeschottet: Man sieht sozusagen in eine Zone hinein, aber nicht heraus.




Weitläufig sind die Zonen mit einem FreeBSD Jail oder einer Chroot-Umgebung verwandt. Auch bei diesen Lösungen wird eine definierte Umgebung für Prozesse geschaffen. Allerdings sind Prozesse jeweils untereinander sichtbar. Programme werden einfach nur von der Betriebssystem-Instanz in einem Jail oder einer Chroot-Umgebung gestartet. Speicher, Prozessorzuweisung, Netzwerk-Interfaces – all dies unterscheidet sich aber von der Hauptinstanz nicht:



Jeder Prozess sieht gleich viel Speicher oder hat dasselbe Netzinterface. Bei den Zonen fährt ein komplettes Solaris hoch, mit eigenen Init-Skripten, installierten Paketen und Programmen, einem Kern, zugewiesenen Ressourcen (Platten, Speicher, Netzwerkinterfaces) und eben Sichtbarkeit nur der innerhalb der Zone laufenden Programme. Unter Linux bieten Produkte wie OpenVZ oder Linux vServer ähnliche Funktionalität.



Es gibt natürlich Vor- und Nachteile dieser Lösung. Ein Nachteil wäre beispielsweise, dass bestimmte Ressourcen wie Netzwerk-Interfaces bei der Installation der Zone definiert werden und von innerhalb der Zone nicht verändert werden können. Man kann so keine neue IP-Adresse zuweisen. Dies geht nur über die Mutterzone. Auch kann man auf andere Ressourcen, etwa Plattenplatz, nicht direkt zugreifen. Auch dies muss immer über die Mutterinstanz gemacht werden.


Ausserdem können Teile des Systems – je nach gewählter Installation – als nur lesbar markiert werden. Dann werden die Systemwerkzeuge und Bibliotheken einer Zone mit denen der Mutterzone verlinkt. Das spart Plattenplatz, da Binaries und Bibliotheken so nur einmal vorgehalten werden müssen. Der Vorteil, der daraus resultiert, ist, dass solch ein System per se schon einen gewissen Grad an Sicherheit bietet. Denn für Veränderungen am System bleibt so wenig Spielraum.




Solaris Zones (Containers)


Einfache Einrichtung

Das Einrichten und Verwalten von Zonen ist denkbar einfach. Gerade mal drei Befehle sind dafür notwendig:


- zonecfg zum Einrichten und Konfigurieren einer Zone.

- zoneadm zum Verwalten einer Zone (Initialisierung, Laden, Neustarten).

- zlogin zum Einloggen auf der Konsole der Zone. Dazu steht mit zonename noch ein Befehl zur Verfügung, mit dem sich der Name der aktuellen Zone ausgeben lässt.


Als Beispiel soll eine Zone «myzone» eingerichtet werden. Als Dateisystem für die Zone wird der Pfad /zonen/myzone verwendet. Die Zone soll beim Booten des Servers automatisch hochgefahren werden und alle Pakete, die in der Mutterzone unter /opt installiert sind, sollen automatisch in der Zone mit installiert werden.



# zonecfg -z myzone

myzone: No such zone configured. Use 'create' to begin configuring a new zone.

zonecfg:myzone> create

zonecfg:myzone> set
zonepath=/zonen/myzone

zonecfg:myzone> set
autoboot=true

zonecfg:myzone> add
inherit-pkg-dir

zonecfg:myzone:inherit-pkg-dir> set dir=/opt

zonecfg:myzone:inherit-pkg-dir> end



Damit ist die Zone grundsätzlich eingerichtet. Nun gilt es, das Netzwerk zu konfigurieren.



zonecfg:myzone> add net

zonecfg:myzone:net> set address=131.188.3.30

zonecfg:myzone:net> set physical=ge1

zonecfg:myzone:net> end



Für myzone wird das physikalische Netz-Interface ge1 verwendet, welches die IP-Adresse 131.188.3.30 bekommt.
Nun wird noch überprüft, ob bei der Einrichtung kein Fehler gemacht wurde (verify), bevor die Änderung abgespeichert wird und die Einrichtung beendet werden kann.



zonecfg:myzone> verify

zonecfg:myzone> commit

zonecfg:myzone> exit




Die Konfigurationsdateien der Zone liegen unter /etc/zones. Man sollte aber davon absehen, sie manuell zu modifizieren. Änderungen sollten nur mit dem Befehl zonecfg vorgenommen werden.


Zone initialisieren

Jetzt ist die Zone konfiguriert, aber noch nicht initialisiert, was sich mit zoneadm list -cv überprüfen lässt. Initialisiert wird die Zone mit zoneadm -z myzone install. Nach einigen Minuten sind die benötigten Dateien kopiert, und die Zone kann nun mit zoneadm -z myzone boot gestartet werden. Dann kann man sich auf die Konsole der neu gebooteten Zone einloggen: zlogin -C -e@ myzone. Die Kommandozeilen-Switch -C steht für Konsole und
-e@ definiert @ als Escape Character, mit dem man aus der Konsole wieder raus kommt.


Linux in den Zonen

Neu eingezogen in das letzte Solaris-10-Release sind die sogenannten LX Branded Zones, kurz BrandZ. Sie ermöglichen, auf einem Solaris-Server eine Linux-Instanz in einer Zone zu betreiben, die sonst eigentlich nur Solaris unterstützt. Aktuell unterstützt BrandZ nur die x86-Plattform und die Linux-Distributionen CentOS 3.x sowie Red Hat Enterprise Linux 3.x in ihrer 32-Bit-Ausgabe.



Technisch funktionieren Branded Zones so, dass Solaris die System Calls des Gastbetriebssystems in jene von Solaris umsetzt. Ausserdem werden die Spezial-Devices
/dev und /proc emuliert und zur Verfügung gestellt. Diese Art der Emulation über an das Muttersystem weitergereichte System Calls verwenden auch andere Produkte, etwa der Windows-Emulator WINE. Auch hier stellt WINE die Windows-Systemaufrufe nach und reicht sie an das eigentliche Betriebssystem weiter. Der Geschwindigkeitsverlust zu nativ laufendem Linux soll laut Sun bei etwa 4 Prozent liegen.





Linux Branded Zones sind laut Sun erst der Anfang, da es mit dieser Methode auch möglich ist, andere Gastbetriebssysteme in einer Zone zu betreiben. Man darf also gespannt sein, was die Zukunft, insbesondere die vor kurzem beschlossene Kooperation mit Microsoft, noch bringen wird.


Domänen mit Logik

Ebenfalls neu hat Sun als weitere Virtualisierungslösung Logical Domains (LDOM) eingeführt. Basierend auf Suns Ultrasparc T1 respektive T2 kann ein Sun-Server mit bis zu 32 (entspricht der Anzahl der Threads, welche die Maschine parallel verarbeiten kann) LDOMs versehen werden. LDOMs funktionieren ähnlich wie Xen mit einem Hypervisor, der den Zugriff auf die Ressourcen für die einzelnen Instanzen regelt. Allerdings sitzt diese bei Sun sehr dünne Softwareschicht in einem PROM auf dem Motherboard und wird nicht über das Wirtssystem geladen.



Um LDOMs nutzen zu können, wird Solaris 10 ab Release 11/06 und eine aktuelle PROM-Firmware auf dem Server benötigt. Die Einrichtung der LDOMs selbst erfolgt dann über ein installiertes Solaris, welches gleichzeitig als Kontroll-Domäne fungiert. Diese entscheidet über Partitionierung der Ressourcen und deren Zuteilung sowie Kommunikationskanäle zwischen den einzelnen LDOMs. Weiter muss es eine sogenannte I/O-Domäne geben, die aber in der Regel mit der Service-Domäne identisch ist. Diese Domäne hat direkten Zugriff auf die Hardware. Alle weiteren LDOMs greifen über diese dann auf die Devices zu.




Die Einrichtung von LDOMs ist, wie die der Zonen, recht einfach: Als erstes muss das SUNWldm Paket installiert sein, der Logical Domain Manager.




# pkgadd SUNWldm

# svcadm ldmd start

# ldm list



Damit sieht man, dass bislang nur eine Domäne installiert ist – die Service-Domäne. Werden dieser Domäne Ressourcen (zuerst Festplatte, dann Netzwerk) zugewiesen, wird die Service-Domäne gleichzeitig zur I/O-Domäne.



# ldm add-vdiskserver primary-vds0 primary

# ldm add-vswitch
net-dev=e1000g0 primary-vsw0 primary


Mit dem folgenden Befehl werden die Konsolen der zukünftigen LDOMs auf die Ports zwischen 5000 bis 5100 gelegt:



# ldm add-vconscon port-range=5000-5100 primary-vcc0 primary


Als nächstes werden die Ressourcen zugewiesen.



# ldm set-vcpu 4 primary

# ldm set-mem 1g primary



Die primäre Domäne erhält damit 4 CPUs (eigentlich Threads) und 1 GB Speicher.
Mit ldm add-config initial wird die Konfiguration im Service-Prozessor des Servers gespeichert. Beim Neustart wird diese Domäne darauf initialisiert und der Rechner wie konfiguriert als 4-Prozessor-Maschine mit 1 GB Hauptspeicher geladen. Im nächsten Schritt kann das erste Gastsystem initialisiert werden:



# ldm create domain1

# ldm set-vcpu 2 domain1

# ldm set-mem 2g domain1

# ldm add-vnet vnet1 primary-vsw0 domain1

# ldm add-vdiskserverdevice /dev/dsk/DEVICE vol1@primary-vds0

# ldm add-vdisk vdisk0 vol1@primary-vds0 domain1



Als Gastsystem wurde eine 2-Prozessor-Maschine mit 2 GB Hauptspeicher konfiguriert, der vnet1 als Netzwerkinterface und DEVICE als Festplatte zugewiesen wurden. Mit folgendem Befehl wird die virtuelle Maschine «gebunden» und ist ab sofort benutzbar. Anschliessend wird die Konfiguration noch unter dem Namen «domain1» gespeichert.



# ldm bind domain1

# ldm add-config domain1



Die «domain1» kann dann mit ldm start domain1 geladen werden. Nachher kann man sich mit der Console verbinden und eine normale Installation (CD-ROM, Jumpstart) starten.




Logical Domains (LDOMs)


Der Autor

Gregor Longariva (longariva@softbaer.de) ist Solaris-Administrator am Rechenzentrum der Universität Erlangen-Nürnberg und Spezialist für unixoide Betriebssysteme.




Artikel kommentieren
Kommentare werden vor der Freischaltung durch die Redaktion geprüft.

Anti-Spam-Frage: Wieviele Fliegen erledigte das tapfere Schneiderlein auf einen Streich?
GOLD SPONSOREN
SPONSOREN & PARTNER