Virtualisierung und Containerisierung

Was ist Virtualisierung?

Virtualisierung erlaubt es, eine Hardware gegenüber dem Nutzer als mehrere (virtuelle) Maschinen darzustellen. Das Virtualisierungs-System sorgt dafür, dass die Hardware auf die verschiedenen Gast-Systeme verteilt wird. Auf jedem Gast-System wird ein vollständiges Betriebssystem für den Nutzer installiert. Im Kontext dieses Betriebssystems kann der Nutzer seine Applikationen laufen lassen.

Vorteile

Durch die Virtualisierung kann ich mich von der Hardware unabhängig machen und bestehende Systeme stärker ausnutzen. Damit erspare ich mir aufwendige Beschaffungsprozesse. Gleichzeitig kann ich für verschiedene Applikationen unterschiedliche Betriebssystem-Versionen zur Verfügung stellen. Damit weiche ich Konflikten aus, die durch unterschiedliche Versionen von Shared-Libraries entstehen.

Nachteile

Der Ansatz ist sehr schwergewichtig. Ich muss in jeder virtuellen Maschine ein vollständiges Betriebssystem einrichten und pflegen. Der Kontextwechsel zwischen den Systemen ist ebenfalls schwergewichtig und funktioniert nur auf Hardware, die das direkt unterstützt. Mittlerweile ist dies bei aktuellen Prozessoren durchgehend der Fall.

Das Aufsetzen einer virtuellen Maschine ist vergleichbar mit dem Aufsetzen eines Servers und verbraucht substantiell Zeit. Deswegen tendieren Teams dazu, aufgesetzte Maschinen nicht zu löschen. Das wirkt dem Ansatz "Immutable Systems" entgegen.

Schwerwiegende Nachteile entstehen, wenn eine Masse von virtuellen Maschinen verwaltet werden muss. Hier aktuelle Versionen vom Betriebssystem vorzuhalten und entsprechende Sicherheits-Infrastruktur (Firewall, Virenschutz) sind eine Herausforderung für viele Unternehmen.

Die Virtualisierungs-Bewegung hat deswegen der automatischen Administration und Konfektionierungstools Auftrieb gegeben.

Nutzen für die Agilität

Teams können virtuelle Maschinen schneller bekommen als reale Hardware. Das gilt insbesondere für größere Unternehmen. Damit wird es möglich, Anforderungen in einem Sprint umzusetzen. Gleichzeitig hilft Virtualisierung die Arbeit zu entkoppeln, da für verschiedene Applikationen unterschiedliche virtuelle Maschinen genutzt werden können. Abstimmungsbedarf zum Betriebssystem entfällt.

Herausforderung für agile Teams

Die Teams müssen sich stärker Gedanken machen, wie sie ihre Anwendung aufteilen wollen und welche virtuellen Maschinen sie dafür benötigen. Die Konfiguration der virtuellen Maschine wird zum expliziten Thema im Entwicklungsteam.


Was ist Containerisierung?

Containerisierung erlaubt es ebenfalls auf eine Maschine mehrere unabhängige Kontexte zu haben, in denen Applikationen laufen können. Im Gegensatz zur Virtualisierung ist dieser Ansatz leichtgewichtiger, weil nicht für jeden Kontext ein vollständiges Betriebssystem zur Verfügung gestellt wird. Anstelle dessen wird das vorhandene Betriebssystem über geschickte Dateisystem-Schichten unterschiedlich konfiguriert.

Vorteile

Wiederum können auf einer Hardware unterschiedliche Applikationen unabhängig voneinander laufen. Durch die stärkere Nutzung des Host-Betriebssystems ist der Ansatz leichtgewichtiger. In jedem Kontext kann das Betriebssystem anders konfiguriert werden. Wenn gewünscht sehen sich die verschiedenen Applikationen nicht.

Während Virtualisierung vorwiegend den Server-Bereich adressiert kann Containerisierung problemlos auf jedem Maschinentyp installiert werden. Damit erschließen sich auch Entwicklungsrechner.

Die Beschreibung einer Container-Konfiguration wird ebenfalls zum Artefakt im Entwicklungsprozess.

Nachteile

Um die Leichtgewichtigkeit zu ermöglichen, müssen für Container andere Konzepte erlernt werden. Während bei Virtualisierung noch die bekannten Konzepte eins-zu-eins übertragen wurden, ist es bei Containern wichtig, die Dateisystem-Schichtung und weitere Spezialkonzepte zu verstehen.

Nutzen für die Agilität

Container lassen sich in sehr kurzer Zeit hochziehen. Damit geben Sie dem agilen Entwicklungsteam weitere Möglichkeiten, um kurzfristig Feedback zu bekommen. Z.B. lassen sich Test-Installationen einer verteilten Anwendung jederzeit hochziehen. Jeder Entwickler kann für sich die komplette Applikations-Landschaft auf dem eigenen Rechner betreiben.

Herausforderung für agile Teams

Die schlichte Menge an Containern macht die Situation ggf. unübersichtlich.

Entwickler müssen sich mit der Beschreibungssprache für Container auseinander setzen. Die Konfiguration der Basismaschine ihre Applikation wird zum Gegenstand im Entwicklungsprozess. Die Trennung von Operations und Development verwischt.