Wie Container und Kubernetes zusammenarbeiten

Wie Container und Kubernetes zusammenarbeiten

  • ITOps & DevOps
6 Minuten Lesezeit Aktualisiert Jun 16, 2021

Auf einen Blick: Container verbessern die Portabilität und das Management von Anwendungen, während Kubernetes deren Bereitstellung und Skalierung orchestriert. Gemeinsam optimieren sie den Entwicklungsprozess.

  • Kubernetes bietet Funktionen wie Lastverteilung, Selbstheilung und automatische Planung.
  • Entwickler können containerisierte Anwendungen effizient in unterschiedlichen Umgebungen verwalten.

Anwendungscontainerisierung ist in der IT-Branche zum Standard geworden. Sie ermöglicht es Organisationen oder Entwicklern, den Anwendungscode und alle seine Abhängigkeiten in einer portablen Umgebung zu kapseln, sodass die App praktisch überall bereitgestellt werden kann.

Kubernetes ist ein leistungsstarker, quelloffener Orchestrierungsdienst , der zur Verwaltung von Containern in einer containerisierten Anwendung verwendet werden kann.

In diesem Artikel werden wir beide Technologien genauer betrachten und sehen, wie sie sich ergänzen.

Wie Behälter funktionieren

Bevor wir uns mit Containern beschäftigen, müssen wir zunächst wissen, warum Container entworfen wurden.

In der traditionellen App-Entwicklung ist der nächste Schritt, sobald eine Anwendung oder ein Dienst entwickelt wurde, deren Bereitstellung ein komplexer und zeitaufwändiger Prozess sein kann. Das liegt daran, dass eine erfolgreiche App-Bereitstellung eine Vielzahl sorgfältiger Konfigurationen erfordert – von der Ressourcenzuweisung und dem Abhängigkeitsmanagement bis hin zur Einrichtung von Umweltvariablen.

Ein weiterer Aspekt ist die Portabilität der Anwendung. Wenn der Entwickler die Bereitstellungsumgebung ändern oder zu einem neuen Cloud-Anbieter wechseln muss, muss er den gesamten Bereitstellungsprozess von Grund auf neu durchlaufen. Auch dies ist ein mühsamer und zeitaufwändiger Prozess, der dazu führen kann:

  • Konfigurationsdrifte
  • Produktionsfehler

Container lösen dieses Problem erfolgreich, indem sie den Anwendungscode mit allen Abhängigkeiten – wie Laufzeit, Systemtools, Konfigurationsdateien und Bibliotheken – in ein Paket namens Container bündeln. Diese Containerisierung erzeugt ein leichtes, sicheres und unveränderliches Paket, das als Container-Image bekannt ist.

Dieses Image kann dann verwendet werden, um eine containerisierte Anwendung in jeder Umgebung bereitzustellen, wodurch Entwicklern die Freiheit gegeben wird, eine Anwendung zu entwickeln, ohne sich um Umweltbeschränkungen sorgen zu müssen.

Behälter

Vorteile von Containern

Vorteile von Behältern

Entwickler mögen Container aus verschiedenen Gründen:

  • Konsistente Umgebung. Containerisierung bietet eine konsistente Umgebung, indem der Anwendungscode und die Abhängigkeiten in einem einzigen Paket gebündelt werden. Dies gewährleistet Konsistenz über Entwicklungs-, Test- und Produktionsumgebungen hinweg.
  • Universelle Kompatibilität. Container können praktisch überall bereitgestellt werden, von Windows, Linux und macOS bis hin zu Cloud-Anbietern und Rechenzentren. Sogar serverlose Deployments unterstützen Container.
  • Portabilität. Der Container kann leicht in eine neue Umgebung verlegt werden, mit wenig bis keinen Änderungen, da alle erforderlichen Software und Abhängigkeiten in einem standardisierten Container-Format verpackt sind. (Erleichtert Lift- und Shift-Szenarien einfach.)
  • Isolation. Container zeichnen sich durch eine starke Isolierung von externen Faktoren auf, da sie containerisiert sind und die zugrunde liegende Betriebssystemressourcen (OS-Virtualisierung) wie CPU, Speicher, Speicher und Netzwerkressourcen betrachten.
  • Skalierung. Die leichte Natur von Containern trägt zu schnellen Skalierungsmöglichkeiten bei: Container können mit begrenzten Ressourcen leicht erstellt und zerstört werden, um die Nutzernachfrage zu decken.

Container vs. virtuelle Maschinen (VMs)

Container klingen sehr nach virtuellen Maschinen. Beide können verwendet werden, um isolierte Umgebungen zu schaffen, in denen Anwendungen mit allen vorkonfigurierten Abhängigkeiten bereitgestellt werden.

Es gibt jedoch grundlegende Unterschiede zwischen den beiden Technologien.

Virtuelle Maschinen

In ihrer einfachsten Form sind VMs darauf ausgelegt, zugrundeliegende Hardware zu virtualisieren und mehrere Betriebssysteme auf einer einzigen Maschine auszuführen. Daher können VMs verschiedene Betriebssystemtypen in einer virtualisierten Umgebung (einzelne Maschine/Server) ausführen. Dieser gemeinsame Ansatz zur Nutzung von Hardware ermöglicht es Organisationen, physische Hardwareressourcen effizient und kostengünstig zu verwalten.

Hardwarestruktur virtueller Maschinen
Struktur virtueller Maschinen

Eine Software namens Hypervisor ist erforderlich, um VMs zu erstellen und zu verwalten. Einige beliebte Hypervisortypen sind:

Der Hauptnachteil bei der Nutzung von VMs ist ihre Größe. Da jede virtuelle Maschine das Betriebssystem-Image, Bibliotheken, Software usw. enthält, können sie schnell zu großen Größen anwachsen, was zu folgenden Folgen führt:

  • Zusätzliche Wartung
  • Skalierbarkeitsprobleme

Im Gegensatz zu VMs virtualisieren Container das zugrundeliegende Betriebssystem. Daher kann ein Container berücksichtigen, dass ihm alle Ressourcen des zugrundeliegenden Betriebssystems zur Verfügung stehen.

Mit diesem gemeinsamen Ansatz entfällt die Notwendigkeit, in jedem Container ein separates Betriebssystem-Image zu hosten und in das Betriebssystem zu booten, um die notwendigen Bibliotheken zu laden. Dies bietet zwei Vorteile gegenüber VMs:

  • Verringert drastisch die Gesamtgröße eines Containers im Vergleich zu einer VM
  • Ermöglicht die Bereitstellung einer größeren Anzahl von Containern auf einem einzigen Server
Struktur der Container
Struktur der Container

Außerdem wird dieser gemeinsame Ansatz von Containern den Wartungsbedarf verringern – Entwickler müssen nur das zugrunde liegende Betriebssystem aktualisieren und patchen, nicht jeden einzelnen Container.

Container verwenden Software namens "Container Runtime", um Container auszuführen und zu verwalten. Einige weit verbreitete Containerlaufzeiten sind:

Der Hauptnachteil von Containern ist, dass sie auf das Betriebssystem beschränkt sind, für das sie definiert sind. Sie können nur im definierten Betriebssystem bereitgestellt werden, im Gegensatz zu VMs, bei denen Benutzer Windows-virtuelle Maschinen auf einem hypervisorbasierten Linux-Server ausführen können und umgekehrt. Wenn ein Container  für Linux definiert ist, kann er nur unter Linux bereitgestellt werden.

(Lesen Sie unsere ausführliche Erklärung zu Containern vs. VMs.)

Wie Kubernetes Container verwaltet

Jetzt wissen wir, was Container sind. Der nächste logische Schritt ist, die Container zu verwalten.

Zunächst einmal können wir alle unsere Container immer manuell verwalten. Dies ist jedoch keine skalierbare oder effiziente Lösung.

Stattdessen können wir Kubernetes nutzen! Kubernetes, auch K8s genannt, ist eine Open-Source-Plattform zur Container-Orchestrierung, um containerisierte Anwendungen einfach bereitzustellen, zu verwalten und zu skalieren.

(Entdecken Sie unsere umfassende Kubernetes-Tutorial-Reihe.)

Struktur von Kubernetes

Kubernetes ist die ideale Lösung, um containerisierte Anwendungen von einem einzelnen Server bis zu einer Multi-Server-Bereitstellung zu skalieren. Diese Art von Multi-Server-verteiltem Ansatz ist als Kubernetes-Cluster bekannt.

Kubernetes erhält Container und verteilt die Anwendung basierend auf der Ressourcenverfügbarkeit zwischen verschiedenen Servern (Knoten). Die Anwendung wird den Endnutzern als eine einzige Entität dargestellt; in Wirklichkeit kann es sich jedoch um eine Gruppe locker gekoppelter Container handeln, die auf mehreren Knoten laufen.

Kubernetes bietet außerdem integrierte Unterstützung für containerisierte Anwendungen, darunter:

Kernkomponenten von Kubernetes

Kubernetes besteht aus den folgenden Kernkomponenten:

  • Steuerebene
  • Knoten
  • Pods

Die Kontrollebene ist das Gehirn des Kubernetes-Clusters und verwaltet alles von der Planung bis zu Cluster-Events. Die Steuerebene besteht aus verschiedenen Komponenten, wie:

  • kube-apiserver, der den API-Dienst verwaltet
  • KUBE-Scheduler, der die Verteilung von Pods an die entsprechenden Knoten verwaltet
  • Und mehr

Die Steuerebenenkomponenten können in jedem Knoten innerhalb des Clusters ausgeführt werden. Die Standardpraxis ist, eine einzelne Instanz für die Aufgaben der Steuerebene zuzuordnen.

Die nächste Komponente sind Knoten. Knoten sind im Wesentlichen Endpunkte oder Maschinen eines Kubernetes-Clusters. Sie sind die Orte, an denen Container in Kubernetes bereitgestellt werden. Knoten sind dafür verantwortlich, die Laufzeitumgebung für Container bereitzustellen.

Knoten bestehen aus verschiedenen Komponenten wie:

  • kube-proxy zur Pflege der Netzwerkrouten
  • Kubelet verwaltet und überwacht die Gesundheit von Containern

Die letzte wesentliche Komponente ist der Pod. Pods sind ein logischer Wrapper für einen Container. (Pods sind auch die kleinste deployable Komponente in Kubernetes.) Ein K8s-Pod bezeichnet entweder:

  • Ein einzelner Behälter
  • Mehrere Container, gruppiert mit gemeinsamen Ressourcen (Netzwerk, Speicher usw.).

Die Container innerhalb eines Pods sind eng miteinander verbunden und für die Kernfunktionalität der containerisierten Anwendung unerlässlich.

Um zusammenzufassen, wie diese drei Komponenten zusammenarbeiten: Die Kontrollebene verteilt diese Pods an die Knoten in einem Kubernetes-Cluster, abhängig von:

  • Verfügbarkeit von Ressourcen
  • Anwendungslast

Grundlegende Kubernetes-Bereitstellung

Bei einer einfachen Kubernetes-Bereitstellung gibt es einen dedizierten Server für die Kontrollebene (Master Node), der den gesamten Cluster verwaltet. Die Controller innerhalb der Kontrollebene verwalten alle Knoten und Dienste im Cluster. Zusätzlich kümmern sie sich auch um Planung, API-Service und Zustandsverwaltung mit etcd.

Andere Server oder Knoten fungieren als Worker Nodes, stellen die Laufzeitumgebung bereit und führen die Container (Kubernetes Pods) aus. Der Kubernetes Pod umwickelt einen oder mehrere Container, um eine einzige Einheit zu schaffen, die die Ressourcenzuteilung, Verwaltung und Skalierung erleichtert.

(Verstehen Sie, wie Kubernetes-Deployments funktionieren.)

Kubernotes Einsatzarbeit

Kubernetes vs. normale Containerlaufzeiten

Was Kubernetes wirklich von normalen Containerlaufzeiten unterscheidet, sind die Funktionen, die es zusätzlich zu Containern bietet. Einige dieser Funktionen sind:

  • Lastverteilung. Erstelle Load Balancer und verteile den Datenverkehr zwischen den verfügbaren Pods.
  • Automatische Planung. Pods automatisch am passendsten Knoten für optimale Leistung verteilen.
  • Horizontale Skalierung. Skaliere die Pods schnell hoch oder runter, um den Anforderungen der Anwendung gerecht zu werden.
  • Selbstheilend. Alle Pods werden ständig überwacht und im Falle eines Ausfalls automatisch neu gestartet oder ersetzt.
  • Rollouts. Kubernetes erleichtert verwaltete Rollouts und Rollbacks, um containerisierte Anwendungen mit unterschiedlichen Bereitstellungsstrategien einfach bereitzustellen.

Verwendung von Containern und Kubernetes

Container und Kubernetes sind zwei Technologien, die Hand in Hand gehen.

Als Entwickler ist der einfachste Weg, sich daran anzupassen, Folgendes:

  1. Erstellen Sie containerisierte Anwendungen mit plattformübergreifender Kompatibilität als isolierte, portable Pakete.
  2. Nutzen Sie die robuste und funktionsreiche Kubernetes-Plattform, um diese containerisierten Anwendungen zu orchestrieren.

Das bedeutet im Wesentlichen, dass Entwickler die Anwendung problemlos als Container in einem Kubernetes-Cluster während des gesamten Anwendungslebenszyklus von der Entwicklung bis zur Bereitstellung und Wartung warten können.

Da jede Technologie die andere ergänzt, führt die Kombination der Stärken beider Technologien zu bequemeren, kürzeren und weniger komplexen Entwicklungs- und Bereitstellungsprozessen.

Kubernetes-Cluster werden von allen großen Cloud-Anbietern oder On-Premise-Deployments unterstützt. Sie können also einfach einen Cluster aufbauen und die Anwendung mit nur wenigen Befehlen bereitstellen, während Kubernetes den Großteil der mühsamen und zeitaufwändigen Verwaltungsaufgaben (Lastverteilung, Skalierung usw.) übernimmt. Die integrierten Funktionen von Kubernetes ermöglichen es, die gesamte Anwendung zu verwalten, ohne auf andere externe Tools oder Dienste angewiesen zu sein.

Steigerung der Entwickleragilität

Container und Kubernetes sind moderne Technologien, die entwickelt wurden, um die Arbeitsbelastung eines Entwicklers oder des Lieferteams zu reduzieren. Container bieten eine standardisierte Möglichkeit, Anwendungen zu paketieren, und Kubernetes hilft Ihnen, sie einfach zu verwalten.

Jetzt, da Sie die grundlegenden Konzepte von Containern und Kubernetes verstanden haben, besteht der nächste Schritt darin, diese Konzepte zu erkunden, um Ihre perfekte containerisierte Anwendung zu erstellen. Beginnen Sie mit unserer Kubernetes-Tutorial-Reihe.

Verwandte Literatur

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus ITOps & DevOps

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.