Container verbrauchen weniger Ressourcen als VM's, wodurch die frei gewordenen Ressourcen anderweitig eingesetzt, beziehungsweise Kosten für den Betrieb der Anwendung reduziert werden können.
Egal ob Software-Neuentwicklung oder bestehende Legacy-Anwendung; an Containern führt kaum noch ein Weg vorbei. Denn sowohl während der Entwicklung, dem Ausrollen und Verteilen sowie dem Betrieb über den gesamten Softwarelifecycle hinweg bieten sich vielfälltige Vorteile durch ihre Nutzung.
Doch die Einbindung und Anpassung an bestehende Prozesse birgt einige Fallstricke. Wir helfen Ihnen gern mit unserem Know-how beim Überführen bestehender Anwendungen in Container oder dem Adaptieren der Containertechnologien an Ihre Software-Entwicklungsprozesse.
Die Softwareindustrie hat in den letzten Jahren ein schnelles Wachstum erfahren. Immer neue, schnellere Prozessoren und eine sich immer weiter vernetzende Umwelt fordern Unternehmen heraus. Das Aufkommen von Cloud Computing und IoT-Geräten ermöglichte neue Herangehensweisen in der Softwareentwicklung. Unternehmen adaptieren diese Herangehensweisen und antworten auf die Herausforderung mit Microservices, DevSecOps und Continuous Integration, um die Nutzererwartungen zu erfüllen. In diesem Zusammenhang entwickeln immer mehr Softwarehersteller ihre Anwendungen containerbasiert (cloudnative) oder setzen gleich komplett auf Serverless Cloud Computing.
Doch wie fangen wir am besten an, Container in die eigene Entwicklung zu implementieren und müssen wir dann alles neu programmieren?
In der Tat stellt die Umstellung traditioneller Legacy-Anwendungen auf containerbasierte Microservices Unternehmen vor große Herausforderungen. Nicht zuletzt dadurch, dass zunächst die benötigte Infrastruktur für den Containerbetrieb bereitgestellt und sauber konfiguriert werden muss, da diese den standardisierten Unterbau darstellt auf dem Container-Plattformen aufsetzen. Dazu kann man auf Plattformen wie Kubernetes, Rancher oder OpenShift zurückgreifen. Im Optimalfall wendet man jedoch das Prinzip von Infrastructure as Code an und hat anschließend die benötigte Infrastruktur in wenigen Scripten automatisiert, dokumentiert und kann sie dann nach Bedarf in die Breite und mit wenigen Handgriffen auch nach oben in die Cloud skalieren.
Nachdem die Containermanagement-Plattform steht, kann mit der Migration der Anwendung begonnen werden.
Hier gibt es drei Szenarien, die denkbar sind: komplette containerbasierte oder „serverless“ Neuentwicklung, Migration der Legacy-Anwendung mit nur nötigsten Änderungen oder der Mittelweg, das Refactoring, bei dem die "alte" Anwendung so verbreitet wird, dass einzelne Dienste in Containern abgebildet werden können.
Container verbrauchen weniger Ressourcen als VM's, wodurch die frei gewordenen Ressourcen anderweitig eingesetzt, beziehungsweise Kosten für den Betrieb der Anwendung reduziert werden können.
Richtig implementiert können containerbasierte Anwendungen schnell und einfach skaliert und portiert werden - unabhängig von der Containermanagement-Plattform oder der eingesetzten Cloud.
Container lassen sich hervorragend automatisieren und je nach Anwendungsfall gestartet, gestoppt oder vermehrt werden.
Mit Continuous Integration lässt sich eine nie dagewesene Schnelligkeit beim Ausrollen neuer Features erreichen. Es gibt kein „großes“ Release ein Mal im Quartal, sondern täglich hunderte kleiner Releases mit neuen Features, die automatisch getestet und ausgerollt werden können.
Der Teufel steckt oft im Detail. Monitoring und Logging können Aufschluss über das Verhalten der Anwendung bieten. Sie sehen genau, welches Modul der Anwendung womit ein Problem hat und können dieses schnell beheben.
Bei der Migration von Legacy-Anwendungen kann alter, potenziell unsicherer Code in Containern isoliert werden, wodurch das Risiko, die Anwendung für potenzielle Angriffe von außen zu missbrauchen, gesenkt werden kann.
Seine Anwendung in einen Container zu packen und anschließend auszuführen klingt leicht. Doch tatsächlich verbirgt sich dahinter eine Reise, an deren Ende viele Punkte zu beachten sind. Damit das Deployment und der Betrieb von Anwendungen in einer Microservice-Architektur reibungslos abläuft, spielt neben dem Aufbau auch der Betrieb der Container-Plattform eine wichtige Rolle.
Darunter versteht man das “Verpacken” der Anwendung in Container Images. Üblicherweise wird dies mit Docker oder ähnlichen Tools durchgeführt. Im Container landen die Anwendung selbst und all ihre Abhängigkeiten wie Binärdateien oder Bilder der Laufzeitumgebungen. Der Anwendungsart sind dabei fast keine Grenzen gesetzt. Empfohlen wird, funktionale Teile der Anwendung voneinander zu trennen und als sogenannte Microservices in eigenen Containern zu betreiben. Dieser Prozess kann auch nach und nach umgesetzt werden.
Software muss in einem Unternehmensumfeld mehr denn je Anforderungen an Hochverfügbarkeit, Skalierbarkeit und Sicherheit genügen. Um dies umsetzen zu können, existieren ausgereifte und bewährte Automatisierungs- und Orchestrierungslösungen, wie etwa Kubernetes oder Helm. Diese ermöglichen den Betrieb der containerisierten Anwendungen in Clustern, welche die Verwaltung der Anwendungscontainer selbstständig durchführen.
Die Integration des Containerisierungsprozesses in eine Continuous Integration-/Continuous Delivery-Pipeline ermöglicht es, dass Änderungen am Code der Applikation automatisch zu einem neuen Container Image führen, welches gebaut, getestet und anschließend ausgerollt wird. Dadurch ergeben sich große Vorteile hinsichtlich der Anwendungsqualität, Sicherheit, Reaktionsgeschwindigkeit auf neue Anforderungen sowie der Effizienz.
Um den Überblick über sämtliche Anwendungen und Meldungen zu behalten, sowie auf Entwicklungen rechtzeitig reagieren zu können, sind Logging, Monitoring und Analyse-Tools unerlässlich. Mit Prometheus, Fluentd, Kibana oder Elasticsearch existieren mächtige und darüber hinaus freie Lösungen, die bei dieser Aufgabe unterstützen.
Moderne Anwendungen werden oft nach dem Microservice-Prinzip entwickelt und betrieben, bei dem die einzelnen Funktionalitäten einer Anwendung in separate Container ausgelagert wird. Dies führt zu neuen Anforderungen, etwa für Service Discovery, damit die einzelnen Microservices miteinander verknüpft werden können. Darüber hinaus können viele weitere Features genutzt werden wie etwa Health Checking, Routing, Authentifizierung oder Loadbalancing.
Während Softwaredefined Networking seit Jahren im Rechenzentrumsumfeld angekündigt wird, ist es beim Einsatz von Kubernetes längst Realität. Genauso werden granulares Rechtemanagement mittels Policies oder die Anbindung verschiedener Identity Provider (LDAP, OpenIDConnect etc.) zur Authentifizirung unterstützt.
Blockstorage, Filestorage, Objectstorage oder Datenbanken; moderne Anwendungen stellen den Betrieb vor neue Herausforderungen, wenn es um das Speichern von Daten geht. Um hier den Überblick zu behalten, stehen viele verschiedene Helfer, wie etwa Rook, ein Tool zum Orchestrieren verschiedener Storagelösungen, zur Verfügung.
Nachdem eine Applikation containerisiert wurde, muss das entstandene Containerimage an einem Ort abgelegt werden. Sei es, um für einen späteren Zugriff gespeichert oder an Stage oder Produktion übergeben zu werden. Darüber hinaus besteht der Bedarf, Containerimages gegen Manipulation durch Dritte zu schützen und gegebenenfalls auf Sicherheitslücken zu durchsuchen. Diese Anforderungen werden durch sogenannte Containerregistries erfüllt, die zugleich als Speicher für die Images dienen als auch Sicherheitsscanns durchführen können. Bewährte Lösungen wären beispielsweise Harbor oder Quay in Kombination mit dem Scanner Clair.
Gern stehen wir Ihnen mit Know-how, konkreten Unterstützungsleistungen und zugehörigen Lizenz- und Supportangeboten zur Verfügung.