Datum
29.03.2023
So wie heute weltweit Güter in Containern und nicht mehr direkt im Schiffsrumpf über die Weltmeere schippern, werden auch Softwareapplikationen immer weniger direkt im Betriebssystem aufgesetzt, sondern mittels Containern gemanagt. Damit wird die Komplexität reduziert, die Effizienz gesteigert und das Störungs- und Problemmanagement erleichtert.
Containerisierung ist das Verpacken von Softwarecodes in Pakete, die sämtliche erforderlichen Komponenten enthalten und isoliert sind. Auf diese Weise kann die Software innerhalb ihres Containers in unterschiedliche Umgebung verschoben und konsistent auf verschiedenen Infrastrukturen ausgeführt werden – weitgehend unabhängig von der Umgebung oder dem Betriebssystem der Infrastruktur.
Das Bestreben, Software unabhängig von der Infrastruktur betreiben zu können, hat in der IT eine lange Geschichte. Zu Beginn wurde mehrheitlich physisch gebaut, und jedes System war in sich geschlossen, eine "1 zu 1" Einheit zwischen Hardware, Betriebssystem und den eigentlichen Applikationen. Die Mainframetechnologie ausgenommen, denn diese war rund 20 Jahre früher bereit, kam anfangs dieses Jahrtausends mit der Virtualisierung der Schritt, dass mehrere Betriebssysteme (Windows, Linux) auf einer Hardwareplattform betrieben werden konnten. Auch wurde vermehrt mit virtuellen Laufzeitumgebungen gearbeitet, um mehrere Applikationen isoliert auf einem System zu betreiben. Ein geläufiges Format hierzu war z.B. Java Archive (JAR), das es erlaubte, ganze Pakete als Minicontainer anzuliefern und zu deployen (verteilen), ohne dass Installationsrichtlinien notwendig waren. Es brauchte aber immer noch eine grundsätzliche minimale Betriebssystemschicht, auf der dann die einzelnen Umgebungen mit ihren entsprechenden Applikationen und Middleware-Komponenten aufgesetzt wurden.
So richtig in Fahrt kam die Containerisierung mit der Lancierung von Docker 2013. Damit können unterdessen die für eine Anwendung bzw. ein Anwendungsfragment (Container) überflüssigen Codes des Betriebssystems weggelassen werden. Der Ballast eines Betriebssystems wird damit so klein wie möglich gehalten. Es werden keine Riesenserver mehr gebaut, in denen jeder Code einzeln abgelegt ist, sondern es werden Microservices aufgesetzt, bei denen der Anteil des Betriebssystems zugunsten des effektiven Codes kleiner ist.
Markttrends in der Containerisierung gemäss GartnerDie Verwendung von Containern ist weltweit sehr stark zunehmend und hat sich in vielen Unternehmen durchgesetzt. Durch die agile Softwareentwicklung mit immer schnelleren Entwicklungszyklen in heterogenen Umgebungen ist eine programmierbare Abstraktion der Laufzeitumgebung im Betriebssystem erforderlich. Um die grosse Anzahl der Container zu managen und zu orchestrieren, hat sich Kubernetes (K8s) etabliert. Revenue Growth for Container Management Software | Gartner
Welche Vorteile bietet ein Container?
Die Containerisierung bedingt ein Verschmelzen von Arbeiten aus dem Rechenzentrum und der Softwareentwicklung und führt somit zum DevOps-Ansatz. Containerisierung ist die moderne Weiterführung von Platform as a Service mit standardisierter Schnittstelle darauf. Dadurch laufen die Applikationen unabhängig von der Zielumgebung, was unter anderem Unit-Tests und Deployments massiv vereinfacht. Ein Container verhält sich grundsätzlich gleich, egal auf welcher Umgebung. Aus Ressourcensicht wird der Overhead minimiert und so eine bessere Ausnutzung der eingesetzten Hardware ermöglicht. Bei einer virtualisierten Umgebung braucht die Betriebssystemschicht circa ein bis zwei Gigabyte, bei schlanken Containern nur etwa 20 bis 50 Megabyte an Speicher. Durch den zusätzlichen Einsatz einer Orchestrierungslösung (z.B. Kubernetes) ergeben sich dann weitere Optionen wie Self-Healing, Autoscaling und Servicemodellierung. Damit kann der Health-Status des Containers automatisiert abgefragt werden. Wenn dieser nicht valide ist, wird der Container automatisch entweder neu oder sogar an einem anderen Ort gestartet, sodass die Applikation wieder verfügbar ist.
Ein Container beinhaltet neben der eigentlichen Software auch die Middleware, die dazu notwendig ist, und natürlich auch die entsprechenden Betriebssystemkomponenten. Man kann sich aus verschiedenen Libraries bedienen und pflegt dazu den eigenen Code ein. Das Ganze verschliesst man zu einem Container, und dieser Container kann dann auf Docker- oder Kubernetes-Servern gestartet werden.
So ergeben sich einzelne Microservices, die grundsätzlich unabhängig voneinander funktionieren und – einfach oder mehrfach bereitgestellt – über Schnittstellen angesteuert werden. Ein Microservice kann auf mehrere Container verteilt sein. Es kann aber auch sein, dass ein Microservice gleich ein Container ist. Der Microservice ist das Anwendungselement, das wir als Nutzer eigentlich nutzen wollen, es ist deshalb ein Element der Softwarearchitektur. Der Container hingegen ist das «Betriebsvehikel» und ist ein Element der Betriebsarchitektur.
Bessere Zusammenarbeit zwischen Entwicklung und Betrieb
Die Arbeitsweise kann durch den Einsatz von Containern hochgradig automatisiert werden, und die Zusammenarbeit von Entwicklern und Betrieb verändert sich hin zu einem engeren Zusammenwirken (DevOps). Früher wurden die Arbeitsschritte für die Integration der Software in den Betrieb in Installationshandbüchern mitgeliefert. Durch diesen Medienbruch entstand ein Know-how-Verlust zwischen dem Entwickler, der das Handbuch schrieb, und dem Rechenzentrumsmitarbeiter, der die Software installierte.
In containerbasierten Deployments werden diese «Handbücher» direkt in maschinenlesbarer Form als Softwarecode hinterlegt. Dadurch wird das Softwarepaket unabhängig von der Zielumgebung. Dies vereinfacht den Integrationsprozess, reduziert insbesondere manuelle und damit fehleranfällige Tätigkeiten und verbessert so die Qualität. Der Softwareentwickler kann somit seinen Container zum Deployment freigeben, und der Betriebsmitarbeiter deployt, sobald dies vom Changemanagement bewilligt wurde. Wichtig ist, dass der Deployment-Prozess weiterhin ins Changemanagement integriert ist, damit auch mit diesem hohen Automatisierungsgrad ein stabiler Betrieb gewährleistet bleibt. So weiss jeder im Betrieb, was wann wo geändert wurde, damit im Störfall auch die entsprechenden Informationen vorhanden sind. Containerbasierte Anwendungen geniessen den gleichen Netzwerkschutz wie der Rest unserer Infrastruktur. Dieser Schutz wird basierend auf der aktuellen Bedrohungslage, die von unserem SOC kontinuierlich überprüft wird, entsprechend angepasst.
Die Bedag betreibt für ihre Kunden zurzeit fast 500 containerbasierte Services für Applikationen wie GeoDB-Services, BE-Login-Services, die BEWAS-Abstimmungsplattform des Kantons Bern, Swiss ePolice oder den SVV-Statistikserver. Unsere jahrelange Erfahrung garantiert darum höchste Verfügbarkeit und Datensicherheit für unsere Kunden. Wir kümmern uns um Ihre Cloudarchitektur, damit Sie Ihren Fokus auf Ihr Kerngeschäft richten können. Wir bieten den einfachen Weg zu einer effizienten IT-Landschaft mit Managed Kubernetes zur agilen Bereitstellung Ihrer Anwendungen nach individuellen Anforderungen.