Ist eine Container-Lösung die richtige Wahl für meine Applikation?

Simi Dez 5, 2018
Ist eine Container-Lösung die richtige Wahl für meine Applikation?

Der Firma geht es gut. Die Applikation hat endlich die nötige Zugkraft gewonnen. Der Load steigt. Aber auch die allgemeinen IT-Kosten. Vielleicht hatten Sie schon Downtime, das Bug-Fixing dauert zu lange und die Deployment-Strategie ist noch nicht ausgefeilt. Eine Lösung könnte der Wechsel auf eine containerbasierte Umgebung sein. Ist das aber wirklich die richtige Wahl und passt sie gut zum Setup Ihrer Applikation? Lesen Sie mehr über die Anforderungen sowohl aus organisatorischer als auch aus technischer Sicht.

 


Das Wichtigste zuerst: Alles beginnt mit einer passenden Entwicklungs- und Deployment-Strategie.


Egal, ob Sie auf Container umsteigen oder nicht: Viele der oben genannten Probleme können mit der richtigen Deployment-Strategie und den richtigen Deployment-Prozessen gelöst werden. Man kann einen perfekten CI-/CD-Prozess komplett ohne Container einrichten. Bereits ein höheres Level an Automatisierung im Entwicklungs- und Deployment-Prozess reduziert Fehler und neuer Code kann viel schneller in eine neue Umgebung weitergeleitet werden. Durch die Behandlung der Umgebung als unveränderlich und das Bereitstellen von Anpassungen über das Design-Pattern “Infrastructure as Code” wird mit Hilfe von Version Control, automatischen Updates und nachvollziehbaren Änderungen eine konsistente Umgebung sichergestellt. Ein gut funktionierendes Team und gute Kontrollmechanismen sind angesichts den sich ständig verändernden Herausforderungen beim Betrieb von Produktions-Software unabdingbar.

 

Was sind die technischen Voraussetzungen, wenn ich Container-Technologien nutzen möchte?

Die gute Nachricht ist, dass man fast jede App containerisieren kann. Hier einige wichtige Punkte, die dabei zu beachten sind:

  • Wie hoch die Komplexität ist, hängt davon ab, ob die App zustandslos oder zustandshaltig ist.

  • Bei zustandshaltigen Apps muss sichergestellt werden, dass zum Speichern des Zustands konsistente Festplatten oder Datenbanken verwendet werden.  

  • Apps sollten plattformunabhängig sein, da Container die gesamten Informationen der Umgebung beinhalten.

  • Im Idealfall sollte es möglich sein, die App in Microservices aufzuteilen, sodass jeder Prozess in einem separaten Container laufen kann. (Zu beachten ist, dass dies bei Windows-Containern nicht möglich ist.)

  • Wie bereits oben erwähnt, ist es unabdingbar sicherzustellen, dass die Umgebung, in der der Container-Betrieb stattfindet, konsistent bleibt. Dies wird durch Automatisierung ermöglicht.

 


Was bedeutet Containerisierung für den Entwicklungsprozess?


Das Erstellen der Container ist der einfache Teil. Der schwierige Teil liegt darin, alles um die Container herum so auszuarbeiten, dass das System bereit für die Produktion ist. Zum Beispiel denken Sie vermutlich bei der Entwicklung Ihrer Container nicht an die Einzelheiten bestimmter Problematiken wie etwa des Container-Networkings:  

  • Es ist wichtig, dass Sie sich tiefgehendes Wissen darüber aneignen, wie die Verbindungen zwischen Containern verwaltet werden, egal ob Sie mit einem einzelnen Host oder einer Cluster-Lösung arbeiten.

  • Je nachdem, ob Sie Docker benutzen oder mit Kubernetes arbeiten, unterscheiden sich die Konzepte. Es ist wichtig, dass Sie die Unterschiede und Einschränkungen der jeweiligen Lösungen kennen.

  • Bei Docker gibt es verschiedene Arten von Netzwerk-Modellen, die jeweils unterschiedliche Abwägungen bei Nutzerfreundlichkeit, Sicherheit und Kapselung mit sich bringen.

  • Wenn Sie Container mit verschiedenen Hosts betreiben, kann das IP-Mapping schnell kompliziert werden.

  • Angesichts dieser Komplexität ist es verständlich, wenn Sie sich stattdessen lieber für eine Orchestrierungs-Plattform entscheiden, die viel von der Komplexität wegnimmt und die Konfiguration über yaml-Objekte zulässt. Allerdings ist auch das nicht ohne Aufwand möglich und eine gute Kenntnis der verfügbaren Optionen ist nötig.

 

An weiteren Informationen rund um die Container-Technologie und
Cloud Computing interessiert? Dann abonnieren Sie jetzt unseren Blog: 


Jetzt für den nine Blog anmelden

 

 

Welche Voraussetzungen gibt es aus organisatorischer Sicht?

Am wichtigsten ist es, dass Sie sämtliches Wissen sammeln, das Sie benötigen, um Applikationen auf einer Container-Plattform zu betreiben: das Wissen darüber, wie man Container erstellt und orchestriert, und das Wissen darüber, wie die API der Plattform funktioniert. Es ist wichtig, ein Team zu haben, das die neue Arbeitsweise akzeptiert und bereit ist, Änderungen wo nötig umzusetzen. Aufgrund der hohen Komplexität der Container-Orchestrierungs-Plattformen ist es eventuell ratsam, alles auszulagern, was nicht direkt zum Wert des Unternehmens beiträgt: die Plattform selbst und die sie unterstützenden Services können von jemand anders betrieben werden, während Sie sich auf Ihre Applikation konzentrieren.

 

Okay, und wie viel Zeit braucht das alles?

Diese Frage ist nicht einfach zu beantworten, da viele Abhängigkeiten zu betrachten sind. Es kommt auf die Komplexität des Projektes an. So ist zum Beispiel ein Container für eine Golang-App, die keine C-Libraries benötigt, in einigen Stunden gemacht. Wenn man aber eine komplexe PHP-Applikation mit Apache, was viele Module benötigt, containerisiert, kann man schnell zwei Wochen damit verbringen, alle Schwachstellen auszubügeln. Wenn man den Container einmal hat, ist die Orchestrierung ebenfalls abhängig von der App, dem Abweichungsgrad der Belastung, davon, welche anderen Services benötigt werden, welche Secret- und Config-Objekte bei der Runtime injiziert werden müssen, ob es spezielle Netzwerk-Konfigurationen gibt... Dies ist natürlich keine abschliessende Liste.

 

Fazit: Es ist die Anstrengung wert.

Das alles scheint viel Arbeit zu sein. Auf lange Sicht ermöglicht die Nutzung von Automatisierung und der richtigen Tools den Entwicklern aber, Code viel schneller als vorher zu schreiben, zu überprüfen und weiterzuleiten. Die Automatisierung sowohl der Applikation als auch von Deployments der Umgebung spart Zeit und Geld, da der exakte Status bekannt ist, was zu Reproduzierbarkeit und weniger Fehlern führt. Das “Infrastructure as Code”-Pattern führt zu Setups, die selbst-dokumentierend sind. Mit einem zuverlässigen Partner, der sich um die Infrastruktur kümmert, haben Sie mehr Zeit für Ihre Applikation und Ihr Geschäft.

 

 

Simi

Product Marketing Manager at nine internet solutions