Eine Einführung in die Container Welt, die für die agile Applikationsentwicklung notwendig ist. Die Informationen stammen aus der praktischen Welt und Fachliteratur von www.docker.com, www.kubernetes.io, Redhat sowie www.appuio.ch.
Analogie zur Einleitung
Den eigenen See mit eigenem Boot, niemand sonst darf beides nutzen. Das wäre doch was! Doch was für eine Verschwendung! All die Boote die es heute gibt benötigen einen eigenen See, ein eigenes Meer. Hätten wir für die heutige Anzahl Boote überhaupt genügend Platz?
Die gemeinsame Nutzung der Gewässer, viele Boote auf dem gleichen See oder Meer, würde doch eine viel effizientere Nutzung zulassen.
So kann man sich das Gewässer als Server vorstellen, das Boot stellt die Applikation dar. Jede Applikation legte man früher auf einem physischen Server an. Erst mit der Server Virtualisierung durch Hypervisoren konnten mehrere virtuelle Maschinen auf einem physischen Server erstellt werden. Somit also auch mehrere Applikationen kompakter und schneller bereitgestellt werden. Doch auch diese Art und Weise, die Informations Leistungen für Firmen bereit zu stellen, hat seine Grenzen. Eine Virtuelle Maschine (VM), wird mit einer gewissen Grösse an reservierter Rechenleistung provisioniert. Die Applikation wird gestartet und läuft vom einen Wartungsfenster zum nächsten. Sobald zwischendurch etwas verändert werden soll, sind sämtliche Benutzer der Applikationskette betroffen. Mit Clustering und Loadbalancing gibt es Möglichkeiten solche Unterbrüche aufzufangen, doch sind diese Massnahmen sehr aufwändig. Die Applikationsentwicklung wird durch feste Releaszyklen eingeengt und birgt das Risiko, zu viele neu Funktionen und Korrekturen auf einmal einzuspielen.
Wieso verwendet man Containertechnologie?
Aktuelle Applikationsentwicklung erfordert komplett neue Ansätze im Datacenter! Eine agile Entwicklung muss mit Mikroservices bedient werden können. Hier kommt nun der Container Ansatz ins Spiel. Ein Container enthält die Anwendung, Betriebssystem inklusive aller Abhängigkeiten wie Konfigurationsdateien und Bibliotheken.
Riesige Containerschiffe die im Mehr schwimmen. Die Container können dabei zu jedem Zeitpunkt ergänzt und entfernt werden. Es können tausende gleiche Container zur selben Zeit dieselbe oder komplett getrennte Aufgaben verrichten, und sobald diese ihre Arbeit getan haben, werden sie wieder abgebaut. Der nächste Container der gestartet wird, verrichtet immer noch die gleiche Funktion, kann neu noch zusätzlich ein bisschen mehr als seine Vorgänger. Der Benutzer, die Benutzerin kriegt nicht mit, dass für seine zu erledigenden Aufgaben Kleinstservices gestartet und abgebaut werden. Er/Sie kriegt auch nicht mit, wenn Korrekturen oder Ergänzungen dem nächsten Service mitgegeben werden. So kann kontinuierlich weiterentwickelt werden. Es werden viele Container für Spitzenlasten in der Ausführung sein und sobald die Anfragen erledigt sind, verschwinden die Container wieder. Ebenso von Vorteil ist die Portabilität des Containers den ich auf dem einen, wie auch auf einem anderen Containerschiff starten kann. So wird ermöglicht den Container in einer Hybrid oder Multicloud auf den verschiedensten Cloud Plattformen laufen zu lassen.
Eine Auswahl möglicher Werkzeuge
Für Container Services wird zum Beispiel Docker (Alternativen sind CoreOS rkt (=Rocket), Mesos, lxc und andere) verwendet. Orchestriert (Automatisierung, Bereitstellung, Verwaltung und Skalierung) wird die Containerumgebung mit Kubernetes (Alternativen sind Ranger, AWS Fargate, Apache Mesos, Cloudify, APPUiO und andere). Mit dem Kubernetes Cloud Control Manager (CCM) kann die Verwaltung in der Multicloud bewerkstelligt werden.
Die Sicherheit in einem solchen System wird umfangreicher. Jeder Container verwendet sein eigenes Kernel, seine eigenen Konfigurationen und Bibliotheken. Aus diesem Grund können allfällige Probleme auch nicht zentral im Betriebssystem aktualisiert werden. Der Systemverwalter muss dafür sorgen, dass alle Instanzen aktuell gehalten werden. Zusätzlich muss die Daten- und Kommunikations-Sicherheit der Container gewährleistet werden. Zu diesen Themen gibt es weitere Hilfsmittel die man in den OpenSource Foren finden kann.