Netflix, das erste Unternehmen seiner Art in der Streaming-Welt, zeigt anschaulich, wie Unternehmen die neueste Technologie integrieren, um ihren Wettbewerbsvorteil zu wahren.
Bei der Migration einiger seiner Dienste in Container stieß Netflix auf einige Herausforderungen, die zur Entwicklung der Containerverwaltungsplattform Titus führten.
Heute betreibt Netflix Dienste wie Video-Streaming, Inhaltscodierung, Empfehlungen, maschinelles Lernen, Studiotechnologie, Big Data und interne Tools in Containern mit insgesamt 200.000 Clustern und einer halben Million Containern pro Tag.
Unternehmen setzen auf Containerisierung, um neue Anwendungen zu entwickeln und bestehende zu verbessern, um mit dem sich ständig verändernden digitalen Markt Schritt zu halten. Laut einer IBM®-Umfrage gaben rund 61 % der Container-Benutzer an, in den letzten zwei Jahren für mindestens die Hälfte ihrer neuen Apps Container verwendet zu haben, während 64 % planen, in den nächsten zwei Jahren mehr als die Hälfte ihrer aktuellen Apps zu containerisieren. Lösungen zur Modernisierung von Unternehmensanwendungen sind bei diesem Übergang von entscheidender Bedeutung und helfen Unternehmen, wettbewerbsfähig und flexibel zu bleiben.
In diesem Blog werden die Herausforderungen, Vorteile und Anwendungsfälle der Anwendungscontainerisierung erörtert. Bevor wir ins Detail gehen, definieren wir Containerisierung.
Unter Anwendungscontainerisierung versteht man die Ausführung von Softwareanwendungen in separaten Paketen, sogenannten Containern. Anwendungscontainer speichern alles, was zum Ausführen einer Anwendung erforderlich ist, einschließlich Dateien, Bibliotheken und Umgebungsvariablen. Unabhängig vom Betriebssystem, auf dem sie ausgeführt werden, funktionieren die Anwendungen also reibungslos, ohne dass Kompatibilitätsprobleme auftreten.
Die Containerisierung von Anwendungen beschleunigt die Entwicklung, verbessert die Effizienz und erhöht die Sicherheit, indem sie von Hardware- und anderen Softwareabhängigkeiten getrennt werden. Container können isoliert auf jedem Host-Betriebssystem ausgeführt werden. Container betreiben wichtige Dienste wie Google Search, YouTube und Gmail. Google hat auch Kubernetes und Knative entwickelt, beliebte Open-Source-Plattformen zur Verwaltung von Containern und Anwendungen.
Container generieren Darstellungen von Code, der auf einem System erstellt wurde, zusammen mit den entsprechenden Konfigurationen, Abhängigkeiten, Bibliotheken usw. Diese Darstellungen fungieren als Container-Engines, die mit verschiedenen Plattformen kompatibel sind.
Das Hauptziel von Containern besteht darin, programmierte Software aus verschiedenen Computerumgebungen zu trennen. Dies erleichtert die konsistente Codeausführung auf verschiedenen Plattformen, unabhängig von Unterschieden in Entwicklungsumgebungen und -praktiken.
Darüber hinaus fungiert die Containerisierungstechnologie als Host-Betriebssystem. Dennoch unterscheiden sie sich, wie bereits erläutert, von übergeordneten Betriebssystemen.
In modernen Geschäftslandschaften werden Container häufig zum Hosten von Programmen verwendet und eignen sich besonders gut für die folgenden Anwendungsfälle:
Mikrodienste
Auf Microservices basierende Anwendungen bestehen aus zahlreichen Einzelteilen, die größtenteils in Containern bereitgestellt werden. Zusammen ergeben die verschiedenen Container eine organisierte Anwendung. Diese Anwendungsdesigntechnik ermöglicht eine effektive Skalierung und Aktualisierung. Bei der Bewältigung erhöhter Last müssen die Container mit der höchsten Last skaliert werden, nicht die gesamte Anwendung. Ebenso können einzelne Container geändert werden, statt das gesamte Programm.
CI/CD-Pipelines
Containerisierte Apps ermöglichen es Teams, Anwendungen parallel zu testen und ihre Continuous Integration/Continuous Delivery (CI/CD)-Pipelines zu beschleunigen. Darüber hinaus liefert das Testen einer containerisierten Anwendung in einer Testumgebung eine genaue Darstellung ihrer Leistung in der Produktion, da Container zwischen Hostsystemen portierbar sind.
Wiederkehrende Aufträge
Massen- und Datenbankjobs sind periodische Hintergrundaufgaben, die gut mit Containern funktionieren. Jeder Vorgang kann dank Containern ausgeführt werden, ohne andere gleichzeitige Jobs zu beeinträchtigen.
DevOps
Mit containerisierten Apps lässt sich schnell eine konsistente und leichte Laufzeitumgebung für Anwendungen erstellen. Dies hilft DevOps- Teams, Anwendungen nach Belieben zu erstellen, zu testen, zu starten und sogar zu iterieren.
Container sind zwar äußerst nützlich, weisen jedoch auch einige Einschränkungen auf:
Namespaces ermöglichen es jedem Container auf einem Host, zugewiesene Ressourcen vom Host-Betriebssystem zu erhalten und die Prozesse, die innerhalb des Containers laufen, von denen außerhalb zu trennen. Jede Schwachstelle im Host-Betriebssystem kann eine Bedrohung für alle Container darstellen, da sie auf demselben Betriebssystem laufen. Wenn darüber hinaus die Netzwerkeinstellungen kompromittiert wurden, kann ein Angreifer, der Zugriff auf einen Container erhält, problemlos auf andere Container oder den Host zugreifen.
Die in einem laufenden Container enthaltenen Daten verschwinden, wenn dieser gestoppt wird. Zum Speichern der Daten ist ein persistentes Dateisystem erforderlich. Die meisten Orchestrierungstools ermöglichen persistente Speicherung, wobei sich die Produkte der Anbieter in Qualität und Ausführung unterscheiden.
Die schnelle Generierung von Containern ist zwar von Vorteil, kann jedoch auch zu einer unkontrollierten Ausbreitung der Container und einem erhöhten Verwaltungsaufwand führen.
Teams haben oft Schwierigkeiten, den Überblick über laufende Container zu behalten, da diese schnell hoch- und heruntergefahren werden. Die manuelle Verfolgung von Containern ist unflexibel, da sie 12-mal schneller als normale Hosts laufen.
Die Containerisierung von Anwendungen verbessert Geschwindigkeit, Effizienz und Sicherheit, indem sie verschiedene Funktionen von Hardwareabhängigkeiten und anderen Softwarekomponenten isoliert. Containerisierte Anwendungen bieten eine Reihe von Vorteilen, darunter:
Da containerisierte Anwendungen in einer isolierten Umgebung getrennt von anderen Apps und Systemkomponenten existieren, wirken sich Probleme, die innerhalb einer App auftreten, nicht auf andere oder die zugrunde liegenden Systemkomponenten aus. Diese Eingrenzung begrenzt effektiv den Umfang potenzieller Fehlervorfälle.
Da sie vom Betriebssystem unabhängig sind, können containerisierte Anwendungen auf verschiedene Umgebungen wie Server, virtuelle Maschinen, Entwicklercomputer und die Cloud portiert werden.
Container sind effizienter als virtuelle Maschinen, da sie nicht das gesamte Betriebssystem enthalten und daher leichter sind.
Containerisierte Anwendungen nutzen die Ressourcen einer Maschine effektiver, indem sie Rechenkapazitäten und Anwendungsebenen gemeinsam nutzen, sodass mehrere Container gleichzeitig auf derselben Maschine oder in derselben virtuellen Umgebung ausgeführt werden können.
Die Erhöhung der Containerinstanzen zur Anpassung an wachsende Anwendungsanforderungen ist ein reibungsloser Prozess bei der Anwendungscontainerisierung.
Während es bei VMs und Containern um die „Virtualisierung“ einer bestimmten Rechenressource geht, werden Container häufig VMs vorgezogen. Dies liegt daran, dass VMs im Vergleich zu Containerisierungstechnologien mehr Overhead erfordern.
Unabhängig vom Betriebssystem besteht ein weiterer Vorteil, den virtuelle Maschinen (VMs) bieten, darin, dass ein Unternehmen mehrere Server virtuell von einem oder mehreren Systemen aus betreiben kann. Container wiederum verwalten eine Anwendung und können Instanzen in Sekundenschnelle hoch- und herunterfahren, da sie leichtgewichtig sind.
Sehen wir uns Beispiele an, um zu verstehen, wie die Containerisierung Unternehmen hilft, Kosten zu senken.
Herausforderung : Spotify stand vor der Herausforderung, die gestiegene Arbeitsbelastung zu bewältigen, als die Zahl der aktiven Benutzer der Plattform stieg und die Plattform über 200 Millionen monatliche Abonnenten erreichte.
Lösung : Um dieses Problem zu beheben, Spotify-
Containerisierte seine Microservices, die zuvor auf virtuellen Maschinen (VMs) liefen.
Entwickelte eine Container-Orchestrierungsplattform, die später Helios genannt wurde. Diese Änderungen zielten darauf ab, die Entwicklungsgeschwindigkeit zu erhöhen und die Kosten zu senken.
Ergebnis : Was die Umsetzung betrifft, so hat das Unternehmen
Verwaltete Workloads, Cluster und Instanzen durch Containerisierung.
Eine Docker-basierte Orchestrierungsplattform zur Verwaltung aller Spotify-Container und -Server wurde eingerichtet. Helios verfügt über eine HTTP-API zur Interaktion mit Servern, auf denen die Container gehostet werden.
Integriertes Kubernetes mit Docker, um Entwicklungs- und Betriebsaufgaben zu beschleunigen.
Herausforderung : Der Zeitungsriese Financial Times verarbeitete auf seiner Plattform enorme Inhalte. Das Ziel des Teams bestand darin, die mit dem Betrieb von AWS-Servern verbundenen Kosten zu minimieren.
Lösung : Dies wurde erreicht, indem das Unternehmen sein Framework aktualisierte und auf Container umstellte, was zu einer 80-prozentigen Reduzierung der Cloud-Server-Verwaltungskosten führte. Hier sind einige Strategien, die das Unternehmen bei der Verwendung von Docker als Container anwandte:
Ergebnis : Das Entwicklungsteam konzentrierte sich darauf, die Gesundheit des Tech-Clusters zu unterstützen und die Serverkosten zu minimieren. Als Ergebnis haben sie:
Erstellte eine private Container-Orchestrierungsplattform basierend auf Kubernetes.
Der aus 150 Microservices bestehende Tech-Stack wurde containerisiert.
Herausforderung : Pinterest musste zusätzliche Arbeits- und Hostingkosten für die zahlreichen auf der Website veröffentlichten Bilder bewältigen. Um entsprechende Investitionen tätigen zu können, suchte das Unternehmen nach neuer Technologie.
Lösung : Das Ziel des Teams war es,
Ergebnis : Hier sind die containerisierten Prozesse, die Pinterest auf lange Sicht dabei geholfen haben, hohe Ausgaben zu vermeiden -
Alle servicespezifischen Abhängigkeiten wurden in sogenannte Service-Container integriert. Diese Methode stellt sicher, dass nur ein AMI zwischen allen Entwicklungssystemen übertragen wird.
Entwickelte ein Tool namens Telefig zum Starten und Stoppen von Containern nach Bedarf. Das Tool hilft bei der Verwaltung aller Container-beeinflussenden Abhängigkeiten.
Implementierte Container-Orchestrierungsmethoden. Es wird ein Multi-Tenant-Clustersystem zur Konsolidierung von Batch-Aufgaben eingerichtet.
Die obigen Beispiele zeigen, dass Containerisierung Kosten senken und die Produktivität steigern kann. Große Unternehmen wie Spotify, Financial Times und Pinterest haben Container eingesetzt, um die Herausforderungen der Bewältigung zusätzlicher Arbeitslasten und Betriebskosten zu bewältigen und die Effizienz der Entwicklungs- und Bereitstellungsprozesse zu verbessern. Containerisierung ist nicht nur eine effiziente Methode zur Ressourcenverwaltung, sondern fördert auch Veränderungen und Wachstum in komplexen Umgebungen.
Zu den beliebten Plattformen für containerisierte Anwendungen zählen:
Docker
Docker ist eine Open-Source-Softwareplattform zum Generieren, Bereitstellen und Überwachen virtualisierter Anwendungscontainer auf einem gemeinsamen Betriebssystem (OS) zusammen mit einem Netzwerk zugehöriger Tools.
LXC
LXC ist eine Linux-Container-Runtime, die Tools, Vorlagen, Bibliotheken und Sprachverbindungen umfasst. Es ist recht einfach, hochgradig anpassbar und enthält fast alle Containment-Funktionen, die vom Upstream-Kernel unterstützt werden.
rkt
rkt, auch Rocket genannt, ist eine Container-Engine, mit der Sie einzelne Container verwalten oder mit Docker-Containern arbeiten können und die Ihnen gleichzeitig mehr Flexibilität und Kontrolle über Ihre containerisierten Anwendungen bietet.
CRI-O
Das Container Runtime Interface (CRI) für die Container-Management-Plattform ermöglicht OCI-kompatible Runtimes. Es wird häufig anstelle von Docker-Containern mit Kubernetes verwendet.
Die Kernkomponenten eines standardmäßigen containerisierten Anwendungs-Setups bestehen aus drei Hauptelementen:
Container-Engines
Tools wie Docker-Container, CRI-O, Containerd und Windows-Container reduzieren den für die Verwaltung von Anwendungen erforderlichen Verwaltungsaufwand und erleichtern deren Start und Wechsel zwischen Umgebungen.
Container-Orchestratoren
Plattformen wie Kubernetes und OpenShift verwalten große Mengen an Containern, automatisieren die Bereitstellung und garantieren einen reibungslosen Betrieb.
Verwaltete Kubernetes-Dienste
Plattformen wie Amazon EKS und Google GKE machen die Verwaltung von Kubernetes einfach. Sie vereinfachen die Einrichtung und den Betrieb auch für Organisationen mit weniger Erfahrung.
Containerisierung spielt eine entscheidende Rolle bei der reibungslosen und erfolgreichen DevOps-Implementierung und fördert die Entwicklung von Anwendungen, die auf einem nativen System nur schwer zu erstellen gewesen wären. Ob Startup oder Großunternehmen, Containerisierung bietet Agilität, Portabilität, Flexibilität und Geschwindigkeit. Container machen verschiedene Umgebungen wie Entwicklung, Test und Produktion identisch. Sie müssen sich also nicht auf Betriebsteams verlassen, um sicherzustellen, dass auf verschiedenen Servern dieselbe Software ausgeführt wird.
Docker ist eine weithin akzeptierte Form der Containerisierung, die es Softwareentwicklern ermöglicht, ihre Anwendungen in standardisierten, isolierten Containern zu bündeln. Docker vereinfacht die Anwendungsausführung auf jedem System, unabhängig von der zugrunde liegenden Infrastruktur.
Theoretisch können die meisten Apps in Containern gespeichert werden, aber ob die Strategie erfolgreich ist, hängt von Faktoren wie dem Design der Anwendung, den Abhängigkeiten und den Ressourcenanforderungen ab. Daher sollte jede Anwendung überprüft werden, um festzustellen, ob die Containerisierung implementiert werden kann und welche Vorteile sie bietet. Webanwendungen, Microservices, zustandslose Anwendungen, Entwicklungs- und Testumgebungen sowie CI/CD-Pipelines sind einige Beispiele für Anwendungen, die in Containern gespeichert werden könnten.
Die Containerisierungstechnologie floriert und hat sich rasant ausgebreitet. Im DevOps-Bereich gewinnen Kubernetes und Docker bei Entwicklern an Bedeutung, da sie ständig aktualisiert werden, um den Marktanforderungen gerecht zu werden. Da die Microservice-Architektur an Bedeutung gewinnt, erleichtern diese Tools den Teams die Verwaltung von Containern und Infrastruktur. Mit anderen Worten: Neue Funktionen können schneller eingeführt werden und fügen sich nahtlos in den laufenden Entwicklungs- und Bereitstellungsprozess ein.