Sind diese riesigen Lagerkisten aus Metall das Erste, woran Sie denken, wenn Sie den Begriff „Container“ hören?
Die Wahrheit ist, damit liegen Sie nicht allzu weit daneben. Computerkonzepte unterscheiden sich oft nicht sehr stark von realen Konzepten. So wie physische Container die Migration für alle Arten von Waren erleichtern, vereinfachen Software-Container die Bewegung von Anwendungen und Diensten.
Dieser Beitrag befasst sich mit der Bedeutung von Containern in der IT, hebt die wichtigsten Vorteile ihrer Nutzung hervor und führt durch das aufstrebende Ökosystem verwandter Technologien wie Kubernetes.
Was ist ein Container in der IT?
Container sind Softwarepakete, die Softwareprozesse oder Microservices mit allen erforderlichen Elementen (Anwendungscode sowie Abhängigkeiten, z. B. bestimmte Versionen von Laufzeiten und Bibliotheken für Programmiersprachen, die für die Ausführung der Softwaredienste erforderlich sind) verpacken, um diese in beliebigen Computerumgebungen ausführbar zu machen. Container virtualisieren dadurch das Betriebssystem. Im Allgemeinen können Sie alle Arten von ausführbaren Dateien in Containern speichern, beispielsweise Konfigurationsdateien, Softwarecode, Bibliotheken und Binärprogramme.
Mit Computerumgebungen meinen wir lokale Systeme (z.Bsp.: privater Laptop eines Entwicklers), örtliche Rechenzentren oder Cloud-Plattformen, die von verschiedenen Dienstanbietern verwaltet werden.
Container tauchten erstmals vor Jahrzehnten mit Versionen wie FreeBSD Jails und AIX Workload Partitions auf, aber die meisten modernen Entwickler erinnern sich mit der Einführung von Docker an 2013 als Beginn der modernen Container-Ära.
Container in der Cloud
Container in der Cloud werden in einer Onlineumgebung gehostet. Benutzer können von überall darauf zugreifen. Anwendungsprozesse oder Microservices in cloudbasierten Containern bleiben jedoch von der Cloud-Infrastruktur getrennt bzw. unabhängig.
Stellen Sie sich Container als virtuelle Betriebssysteme vor, die Ihre Anwendung so verpacken, dass sie mit jedem Betriebssystem kompatibel ist.
Da die Anwendung nicht an eine bestimmte Cloud, ein bestimmtes Betriebssystem oder einen bestimmten Speicherplatz gebunden ist, kann containerisierte Software in jeder Umgebung ausgeführt werden.
Abgrenzung von Containern zu virtuellen Maschinen (VMs)
Um zu verstehen, wie Container funktionieren, ist es häufig hilfreich zu verstehen, wie sie sich von virtuellen Maschinen unterscheiden.
Während eine virtuelle Maschine einen vollständigen Rechner inklusive Betriebssystem und Anwendungen virtualisiert zur Verfügung stellt, besitzen Container kein Betriebssystem, sondern nutzen das des Host-Systems. Somit teilen sich mehrere Container dasselbe Betriebssystem und denselben Rechner. Lediglich die Anwendungen mit ihren Daten und Laufzeitumgebungen sind virtualisiert und voneinander getrennt.
Für jede Anwendung stellt der Container eine isolierte Umgebung zur Verfügung. Im Vergleich zu virtuellen Maschinen benötigen Container weniger Arbeitsspeicher, CPU-Leistung und Speicherplatz. Da in den Containern nicht die vollständigen Daten und Informationen der Betriebssysteme zu speichern sind, sind sie deutlich schlanker. Es lassen sich auf einem einzigen physischen Rechner wesentlich mehr Container als VMs realisieren. Auch das Starten des Containers ist in der Regel schneller abgeschlossen als das Starten einer VM.
Was versteht man unter Containerisierung?
Hoffentlich verstehen Sie das Container-Konzept jetzt schon etwas besser. Vielleicht haben Sie auch schon die Annahme getroffen, dass die in Containern gehosteten Anwendungen andere Codierungs-Standards besitzen als normale Anwendungen. Aber was ist Containerisierung und wie erstellt man containerisierte Anwendungen?
Containerisierung im Cloud Computing ist der Prozess der Erstellung von Softwareanwendungen für Container. Das Endprodukt des Entwerfens einer Container-Anwendung ist das sogenannte „Container Image“.
Ein typisches Container-Image oder Anwendungscontainer besteht aus:
- Anwendungscode
- Konfigurationsdateien
- Softwareabhängigkeiten
- Bibliotheken
- Umgebungsvariablen
Zusammengefasst enthält es alles, was zum Ausführen containerisierter Anwendungen benötigt wird, unabhängig von der Infrastruktur/Umgebung, die sie hostet.
Containerisierte Anwendungen sind mit all ihren Abhängigkeiten verpackt als eine einzelne einsetzbare Einheit.
Was ermöglichen Container?
Anwendungen haben sich von physischer Hardware über VMs hin zu containerisierten Umgebungen entwickelt. Die Containerisierung wiederum leitet die Microservices-Architektur ein.
Microservices erstellen Einzelfunktions-Entitäten, die einer aufrufenden Umgebung Dienste anbieten. Beispielsweise können Funktionen wie Kalender- und E-Mail-Systeme in einzelnen Containern untergebracht werden, die in der Cloud für jedes System verfügbar sind, das sie benötigt, im Gegensatz zu einer Sammlung unterschiedlicher Systeme, die jeweils eigene interne Versionen dieser Funktionen enthalten.
Was sind die Vorteile der Nutzung von Containern?
1. Weniger Ressourcenaufwand
Container teilen sich den Betriebssystemkern der Maschine, wodurch die Notwendigkeit einer vollständigen Betriebssysteminstanz pro Anwendung entfällt und Containerdateien klein und ressourcenschonend werden.
2. Größere Effizienz
Ihre geringere Größe, insbesondere im Vergleich zu virtuellen Maschinen, bedeutet, dass sie schnell hochgefahren werden können und Cloud-native Anwendungen, die horizontal skalieren, besser unterstützen.
3. Erhöhte Portabilität & plattformunabhängig
Container tragen alle ihre Abhängigkeiten mit sich, was bedeutet, dass Software einmal geschrieben und dann ausgeführt werden kann, ohne dass sie auf verschiedenen Betriebssystemen und Hardwareplattformen neu konfiguriert werden muss.
4. Agile Anwendungsentwicklung
Container unterstützen agile und DevOps-Bemühungen zur Beschleunigung von Entwicklungs-, Test- und Produktionszyklen von Anwendungen, da Entwickler sich keine Gedanken über Abhängigkeiten und Umgebungen machen müssen.
5. Verbesserte Auslastung
Wie auch VMs ermöglichen Container den Entwicklern und Betreibern, die CPU- und Speicherauslastung physischer Maschinen zu verbessern. Container gehen einen Schritt weiter, da sie auch Microservice-Architekturen ermöglichen. Anwendungskomponenten können somit granularer bereitgestellt und skaliert werden. Damit kann vermieden werden, eine ganze monolithische Anwendung hochskalieren zu müssen, nur weil eine einzelne Komponente mit der Last zu kämpfen hat.
Container-Orchestrierung mit Kubernetes
Als Unternehmen begannen, Container – oft als Teil moderner, Cloud-nativer Architekturen – zu nutzen, begann die Einfachheit des einzelnen Containers mit der Komplexität der Verwaltung von Hunderten (sogar Tausenden) von Containern in einem System zu kollidieren.
Um dieser Herausforderung zu begegnen, hat sich die Container-Orchestrierung als eine Möglichkeit herausgestellt, große Mengen an Containern während ihres gesamten Lebenszyklus zu verwalten, einschließlich:
- Bereitstellung
- Redundanz
- Gesundheitsüberwachung
- Ressourcenzuweisung
- Skalierung und Lastausgleich
- Wechseln zwischen physischen Hosts
Während viele Container-Orchestrierungsplattformen (wie Apache Mesos, Nomad und Docker Swarm) entwickelt wurden, um diese Herausforderungen zu bewältigen, wurde Kubernetes, ein 2014 von Google eingeführtes Open-Source-Projekt, schnell zur beliebtesten Container-Orchestrierungsplattform, auf die sich die Mehrheit der Branche standardisiert hat.
Kubernetes orchestriert den Betrieb mehrerer Container harmonisch miteinander. Es verwaltet Bereiche wie die Nutzung zugrunde liegender Infrastrukturressourcen für containerisierte Anwendungen, wie z. B. die Menge an erforderlichen Rechen-, Netzwerk- und Speicherressourcen.
Zudem unterstützt es auch bei Neustart von Anwendungen, wenn sie fehlschlagen, bei der automatischen Skalierung oder der Bereitstellung ohne Ausfallzeit.
Zusammengefasst werden Automatisierung und Skalierung containerbasierter Workloads für Live-Produktionsumgebungen erleichtert.
________________________________________________________________________________
Haben Sie weitere Fragen zum Thema oder suchen einen erfahrenen Ansprechpartner für das Management Ihrer Anwendungen / Container über Kubernetes?