Cloud-Infrastruktur für Entwickler: Mit Open-Source-Software lokale Server zur privaten Cloud machen

Mit der Open-Source-Software Eucalyptus lässt sich eine lokale Cloud-Infrastruktur aufbauen, die zudem noch kompatibel zu Amazons Cloud-Lösung ist.
Um eine Cloud-Infrastruktur zu nutzen ist es hilfreich, einige neue Paradigmen zu verstehen. Dieser Artikel gibt Hinweise, wie diese neue Infrastruktur genutzt werden kann, zeigt was von ihr zu erwarten ist und beschreibt erste Schritte mit der in Ubuntu integrierten Cloud-Lösung Eucalyptus.
Der Weg zur privaten Cloud
In den letzten Jahren haben Entwickler gelernt, gemeinsam an Projekten zu arbeiten. Modulare und prozedurale Programmierung hat sich zur objektorientierten Programmierung weiterentwickelt. Aus der Weitergabe von Dateien wurde die Versionskontrolle, darauf folgte die verteilte Versionskontrolle. All das hat dazu beigetragen, dass Entwickler heute ihre Ergebnisse besser mit anderen teilen, an größeren Projekten mitarbeiten und ordentliche Prozesse definieren können. Dennoch gibt es eine Ausnahme von dieser Entwicklung: Der Kampf um die Hardware.
Lokales Cloud Computing kann hier Abhilfe schaffen, indem es eine zusätzliche Abstraktionsschicht einführt: Das Maschinen-Image. Es verhält sich dabei wie ein eigenständiger Server, inklusive Betriebssystem, Software und allem was dazu gehört. Jeder Nutzer einer Cloud-Infrastruktur kann sein eigenes Maschinen-Image vorbereiten und so oft instantiieren, wie die Infrastruktur es erlaubt. Da die Cloud-Infrastruktur darauf ausgelegt ist, mehre Benutzer zu haben, können verschiedene Maschinen-Images von verschiedenen Nutzern zeitgleich betrieben werden. Jedes Image läuft in einer eigenen virtuellen Umgebung, vom Netzwerk bis zur Applikation sind alle Instanzen voneinander abgeschottet. Dadurch werden ungewollte Interaktionen zwischen den Instanzen verhindert. Wenn ein Benutzer der Infrastruktur bekannt ist, kann er Instanzen ohne großen Aufwand starten und stoppen. Ein und dieselbe Hardware-Infrastruktur kann dabei natürlich nicht nur von Entwicklern genutzt werden, sondern auch von anderen IT-Nutzern im Unternehmen, die Rechenleistung benötigen.
Cloud Computing mit Open Source
Die bekannteste und am meisten genutzte öffentliche Cloud-Infrastruktur ist ohne Zweifel Amazons Elastic Cloud Compute (EC2). Da es keine Standard-Cloud-API gibt, haben sich Open-Source-Projekte im Bereich Cloud Computing wie Nimbus [1], Open Nebula [2] und Eucalyptus [3] dazu entschlossen, die EC2-API als Referenz zu nutzen. Aus Benutzersicht hat diese API einige Eigenschaften, die überraschend sein können:
- Instanzen sind nach einem Reboot nicht persistent.
- Images sind die einzig persistente Form einer Maschine.
- Administratoren definieren Basis-Architekturen für die Bereitstellung von Maschinen (32 oder 64 Bit, RAM, …) und Nutzer entscheiden, welche Architektur sie benötigen.
- Peristenter Speicherplatz ist über alternative Technologien erhältlich.
Flexibilität durch Modifikation
Nutzer einer Cloud-Infrastruktur können sich verschiedene virtuelle Maschinen (also Maschinen-Images) vorbereiten, die sie regelmäßig nutzen. Bestehende Maschinen-Images können dazu modifiziert und als neues Maschinen-Image gespeichert werden. Dieser Prozess nennt sich re-bundling.
Es gibt allerdings noch einen einfacheren Weg, um individuelle Anpassungen vorzunehmen. Während ein Maschinen-Image gestartet wird, kann man ihm optional Daten übergeben, die dann während der Initialisierung verwendet werden. Dadurch ist es möglich, Maschinen zu verändern, ohne das Image zu re-bundeln. Nutzer verwenden ein Basis-Image (zum Beispiel Ubuntu Server Edition) und rufen ein Skript auf, dass die Instanz anhand der übergebenen Daten anpasst. Ein gute Anlaufstelle für Maschinen-Images auf Basis von Ubuntu und Debian ist die Website alestic.com. Betreiber Eric Hammond stellt dort diverse vorkonfigurierte Images zum Download bereit.
Persistenz in der Cloud
Um persistenten Speicher zu erhalten, kann eine Instanz eine von zwei Service-Typen nutzen:
- Simple Storage Service (S3): ein Datei-basierter Speicher, der dem http-Dienst sehr ähnlich ist
- Elastic Block Storage (EBS): ein Block-basierter Speicher, der wie eine Festplatte formatiert und gemountet werden kann
Auch die Speicherung in einer Datenbank kann als Service in einer Cloud angeboten werden. Amazon stellt dazu beispielsweise SimpleDB zu Verfügung. Diese ist eine einfache Key-Value-basierte Datenbank, die allerdings nicht sehr häufig eingesetzt wird. Verbreiteter ist der Einsatz von bekannten Datenbanksystemen wie MySQL, PostgreSQL oder auch CouchDB.
Grundsätzlich kann man sagen, dass der Fokus beim Cloud Computing eher auf Widerstandsfähigkeit denn auf Fehlertoleranz liegt. Anstatt eine Architektur mit komplexen Failover-Szenarien zu entwicklen, sollte das Prinzip der Redundanz von schnell und günstig startbaren Instanzen im Vordergrund stehen – ein ähnliches Prinzip, wie es beim Konzept von RAID Systemen gegenüber einzelnen Festplatten zum Einsatz kommt.
Die Eucalyptus-Cloud
Wie bereits erwähnt, kann man sich mit Hilfe von frei verfügbarer Open-Source-Software eine komplette eigene Cloud-Infrastruktur aufbauen. Alle oben genannten Projekte nutzen die gleiche API, so dass sich das Verhalten der Clouds ähnelt. Das Projekt Eucalyptus bietet dabei den Vorteil, dass es unter dem Namen „Ubuntu Enterprise Cloud“ in aktuellen Ubuntu-Versionen (seit Version 9.04) bereits enthalten ist [4].
Die Eucalyptus-Architektur ist modular ausgelegt. Eine Cloud besteht aus fünf einfachen Elementen, die skaliert werden können:
- Cloud Controller (CLC)
- Walrus Storage Controller (WS3)
- Elastic Block Storage Controller (EBS)
- Cluster Controller (CC)
- Node Controller (NC)
Jedes Element stellt einen unabhängigen Web Service dar, der per WDSL (Web Service Description Language) eine API definiert. Der Cloud Controller (CLC) ist das von außen sichtbare Element der Eucalyptus-Architektur. Hier ist das Interface angesiedelt, mit dem der Nutzer agiert. Der CLC übernimmt auch die Kommunikation mit den Cluster Controllern (CC) und ist verantwortlich für die Allokation neuer Instanzen.

In einer Eucalyptus-Cloud können die Node Controller (NC) komplett in einem privaten Netzwerk betrieben werden. Nur der Cloud Controller (CLC) und die Cluster Controller (CC) sollten über ein öffentliches Netzwerk erreichbar sein. Der S3-Service von Eucalytpus (Walrus) befindet sich auf der gleichen Ebene wie der CLC, der Elastic Block Storage (EBS) auf der gleichen Ebene wie die CC.
Der Walrus Storage Controller (WS3) und der Elastic Block Storage Controller (EBS) besitzen die gleiche Funktionalität wie diese Speichermethoden innerhalb von Amazon EC2. Der WS3 kann auf jeder beliebigen Maschine laufen, wird aber per Default auf dem CLC installiert. EBS läuft auf der gleiche Maschine wie
der Cluster Controller und wird automatisch konfiguriert, wenn der Cluster Controller installiert wird.
Der Cluster Controller (CC) ist die Verbindung zwischen Node Controller (NC) und Cloud Controller. Daher braucht der CC einen Netzwerkpfad zum CLC und einen Netzwerkpfad zum NC. Der CC entscheidet, welcher NC eine Maschinen-Instanz laufen lassen wird. Weiterhin ist der CC zuständig für das Bereitstellen und Routen von virtuellen Netzwerken zu den Maschinen-Instanzen. In einfachen Deployments laufen CC und CLC auf der gleichen Maschine.
Die Node-Controller-Software läuft auf der Maschine, auf der die Maschinen-Instanzen laufen. Die Rolle des NC ist es, die Verbindung zwischen dem Betriebssystem und dem Hypervisor auf der Maschine herzustellen. Der NC wird vom Cluster Controller aus gesteuert.
Der Einsatz von Ubuntu Enterprise Cloud (UEC) kann unter Ubuntu Server Edition 9.10 direkt aus dem Installationsmenü erfolgen. Das erleichtert den Einstieg zum Testen und Ausprobieren. Eine ausführliche Anleitung beschreibt zudem Schritt für Schritt, wie der Einsteig gelingt [5].
Fazit
Die Verbreitung von Cloud Computing wird in den nächsten Monaten und Jahren weiter stark zunehmen. Die Vorteile in den Bereichen Skalierbarkeit und Flexibilität sind einfach zu überzeugend, als dass man sich ihnen verschließen könnte. Mit Open-Source-Projekten wie Eucalyptus & Co. werden Entwickler und IT-Abteilungen jetzt in die Lage versetzt, sich ihre eigene Cloud-Infrastruktur aufzusetzen – die zudem noch kompatibel zum Cloud-Universum von Amazon ist. Bestehende und neue Hardware lässt sich so optimal auslasten und Entwickler bekommen eine Plattform geboten, mit der sie agiler entwickeln können.