Kubernetes
Kubernetes ist eine Open-Source-Plattform für die Containerorchestrierung, die die Bereitstellung, Verwaltung und Skalierung von containerisierten Anwendungen automatisiert.
Ihre Kubernetes-Umgebung optimieren IBM Newsletter abonnieren
Schwarz-blauer Hintergrund
Was ist Kubernetes?

Kubernetes – auch bekannt als „k8s“ oder „kube“ – ist eine Plattform für die Containerorchestrierung zur Planung und Automatisierung der Bereitstellung, Verwaltung und Skalierung von containerisierten Anwendungen.

Kubernetes wurde zuerst von Ingenieuren bei Google entwickelt, bevor es 2014 als Open-Source-Lösung zur Verfügung gestellt wurde. Es ist ein Nachfolger von Borg, einer Plattform für die Containerorchestrierung, die intern bei Google verwendet wird. Kubernetes ist das griechische Wort für Steuermann oder Lotse, weshalb das Kubernetes-Logo (Link befindet sich außerhalb von ibm.com) ein Ruder enthält.

Inzwischen haben sich Kubernetes und das breitere Container-Ökosystem zu einer Allzweck-Computing-Plattform und einem Ökosystem entwickelt, das mit virtuellen Maschinen (VMs) als Grundbausteine für moderne Cloud-Infrastrukturen und -Anwendungen konkurriert, wenn es diese nicht sogar übertrifft. Dieses Ökosystem ermöglicht es Unternehmen, eine hochproduktive Platform-as-a-Service (PaaS) bereitzustellen, die zahlreiche infrastruktur- und betriebsbezogene Aufgaben und Probleme im Zusammenhang mit der cloudnativen Entwicklung löst, sodass sich die Entwicklungsteams ausschließlich auf die Codierung und Innovation konzentrieren können.   

Das folgende Video ist eine gute Einführung in die Grundlagen von Kubernetes:

Automatisierung der anwendungsgesteuerten Containerelastizität

Für Plattform- und DevOps-Teams, die die Markteinführung beschleunigen und gleichzeitig die Anwendungsleistung sicherstellen möchten.

Was sind Container?

Container sind schlanke, ausführbare Anwendungskomponenten, die den Anwendungsquellcode mit allen Betriebssystembibliotheken und Abhängigkeiten kombinieren, die für die Ausführung des Codes in der Umgebung erforderlich sind.

Container nutzen eine Form der Betriebssystemvirtualisierung, die es mehreren Anwendungen ermöglicht, sich eine einzige Instanz eines Betriebssystems zu teilen, indem sie Prozesse isolieren und die Menge an CPU, Speicher und Festplatte kontrollieren, auf die diese Prozesse zugreifen können. Da sie kleiner, ressourceneffizienter und portabler als virtuelle Maschinen (VMs) sind, haben sich Container de facto zu den Recheneinheiten moderner cloudnativer Anwendungen entwickelt. 

In einer kürzlich von IBM durchgeführten Studie berichteten Anwender über mehrere spezifische technische und geschäftliche Vorteile, die sich aus der Einführung von Containern und ähnlichen Technologien ergeben. 

Container vs. virtuelle Maschinen vs. traditionelle Infrastruktur

Es ist vielleicht einfacher oder hilfreicher, Container als den letzten Punkt innerhalb der kontinuierlichen Automatisierung und Abstraktion der IT-Infrastruktur zu verstehen.

In einer traditionellen Infrastruktur werden Anwendungen auf einem physischen Server ausgeführt und nutzen alle Ressourcen, die sie bekommen können. Sie haben also die Wahl, entweder mehrere Anwendungen auf einem einzigen Server auszuführen und zu hoffen, dass eine davon nicht die Ressourcen zu Lasten der anderen beansprucht, oder einen Server pro Anwendung zu reservieren, was Ressourcen verschwendet und nicht skalierbar ist.

Virtuelle Maschinen (VMs) sind Server, die sich von der eigentlichen Computerhardware abgrenzen und es Ihnen ermöglichen, mehrere VMs auf einem physischen Server oder eine einzelne VM auf mehreren physischen Servern auszuführen. Jede VM führt eine eigene Betriebssysteminstanz aus. Sie können jede Anwendung in einer eigenen VM isolieren, wodurch die Wahrscheinlichkeit verringert wird, dass sich Anwendungen, die auf derselben zugrunde liegenden physischen Hardware ausgeführt werden, gegenseitig beeinflussen. VMs nutzen die Ressourcen besser und sind viel einfacher und kostengünstiger zu skalieren als herkömmliche Infrastrukturen. Und sie können abgeschaltet werden – wenn Sie die Anwendung nicht mehr ausführen müssen, fahren Sie die VM einfach herunter.

Weitere Informationen zu VMs finden Sie unter „Was sind virtuelle Maschinen?

Container heben diese Abstraktion auf eine höhere Ebene, d. h. sie teilen sich nicht nur die zugrunde liegende virtualisierte Hardware, sondern auch einen zugrunde liegenden virtualisierten Betriebssystemkern. Container bieten die gleiche Isolation, Skalierbarkeit und Verfügbarkeit wie VMs. Da sie jedoch nicht die Nutzlast einer eigenen Betriebssysteminstanz tragen, sind sie kompakter (d. h. sie benötigen weniger Platz) als VMs. Sie sind ressourceneffizienter, d. h. Sie können mehr Anwendungen auf weniger Rechnern (virtuell und physisch) und mit weniger Betriebssysteminstanzen ausführen. Container lassen sich leichter über Desktop-, Rechenzentrums- und Cloud-Umgebungen hinweg übertragen. Und sie eignen sich hervorragend für agile und DevOps-Entwicklungspraktiken.

Was sind Container?“ bietet eine vollständige Erklärung über Container und Containerisierung. Und der Blogbeitrag „Container vs. VMs: Was ist der Unterschied?“ gibt einen vollständigen Überblick über die Unterschiede.

Was ist Docker?

Docker ist das beliebteste Tool zum Erstellen und Ausführen von Linux®-Containern. Während frühe Formen von Containern bereits vor Jahrzehnten eingeführt wurden (mit Technologien wie FreeBSD Jails und AIX Workload Partitions), wurden Container 2013 demokratisiert, als Docker sie mit einer neuen entwickler- und cloudfreundlichen Implementierung für die breite Masse zugänglich machte.

Docker begann als Open-Source-Projekt. Aber heute bezieht sich der Begriff auch auf Docker Inc., das Unternehmen, das Docker produziert – ein kommerzielles Container-Toolkit, das auf dem Open-Source-Projekt aufbaut (und diese Verbesserungen an die Open-Source-Community zurückgibt).

Docker basiert auf der traditionellen Linux-Container-Technologie (LXC), ermöglicht jedoch eine differenziertere Virtualisierung von Linux-Kernel-Prozessen und fügt Funktionen hinzu, mit denen Entwickler Container einfacher erstellen, bereitstellen, verwalten und sichern können.

Zwar gibt es heute alternative Container-Plattformen – z. B. Open Container Initiative (OCI), CoreOS und Canonical (Ubuntu) LXD –, aber Docker ist so weit verbreitet, dass es praktisch zu einem Synonym für Container geworden ist und manchmal fälschlicherweise als Konkurrent von ergänzenden Technologien wie Kubernetes angesehen wird (sehen Sie sich dazu auch das Video „Kubernetes vs. Docker: Es ist keine Entweder/Oder-Frage“ weiter unten an).

Containerorchestrierung mit Kubernetes

Mit der zunehmenden Verbreitung von Containern – heute kann ein Unternehmen Hunderte oder Tausende von Containern haben – mussten die Betriebsteams die Bereitstellung, Vernetzung, Skalierbarkeit und Verfügbarkeit von Containern planen und automatisieren. So entstand der Markt für Containerorchestrierung.

Während andere Optionen für die Containerorchestrierung – vor allem Docker Swarm und Apache Mesos – bereits früh an Zugkraft gewannen, wurde Kubernetes schnell zum am weitesten verbreiteten Projekt (es war sogar einmal das am schnellsten wachsende Projekt in der Geschichte der Open-Source-Software).

Kubernetes bietet eine große Funktionsvielfalt, ein umfangreiches und wachsendes Ökosystem von Open-Source-Tools sowie Unterstützung und Übertragbarkeit für alle Cloud-Provider und ist daher die bevorzugte Wahl von Entwicklern – und das wird wohl auch in Zukunft so bleiben. Alle führenden Public-Cloud-Provider – einschließlich Amazon Web Services (AWS), Google Cloud, IBM Cloud und Microsoft Azure – bieten vollständig verwaltete Kubernetes-Services an.

Was macht Kubernetes?

Kubernetes plant und automatisiert Aufgaben im Zusammenhang mit Containern während des gesamten Lebenszyklus einer Anwendung, einschließlich:

  • Bereitstellung: Stellen Sie eine bestimmte Anzahl von Containern auf einem bestimmten Host bereit und führen Sie sie im gewünschten Zustand aus.

  • Rollouts: Ein Rollout ist eine Änderung an einer Bereitstellung. Mit Kubernetes können Sie Rollouts initialisieren, anhalten, fortsetzen oder zurücksetzen.

  • Serviceerkennung: Kubernetes kann automatisch einen Container im Internet oder anderen Containern unter Verwendung eines DNS-Namens oder einer IP-Adresse zur Verfügung stellen.

  • Speicherbereitstellung: Richten Sie Kubernetes so ein, dass bei Bedarf permanenter lokaler oder Cloud-Speicher für Ihre Container bereitgestellt wird.

  • Lastausgleich: Je nach CPU-Auslastung oder benutzerdefinierten Metriken kann der Lastausgleich von Kubernetes eine Workload über das Netzwerk verteilen, um Leistung und Stabilität zu gewährleisten. 

  • Automatische Skalierung: Wenn der Datenverkehr in die Höhe schießt, kann die automatische Kubernetes-Skalierung bei Bedarf neue Cluster aufsetzen, um die zusätzliche Workload zu bewältigen.

  • Automatische Fehlerbehebung für hohe Verfügbarkeit: Wenn ein Container ausfällt, kann Kubernetes ihn automatisch neu starten oder ersetzen, um Ausfallzeiten zu vermeiden. Container, die den Anforderungen der Zustandsprüfung nicht entsprechen, können damit auch entfernt werden.

Kubernetes vs. Docker

Wenn Sie bis hierher gelesen haben, wissen Sie bereits, dass Kubernetes zwar eine Alternative zu Docker Swarm ist, aber (entgegen einem weit verbreiteten Missverständnis) keine Alternative oder Konkurrenz zu Docker selbst.

Wenn Sie sich für Docker entschieden haben und umfangreiche auf Docker basierende Container-Implementierungen erstellen, ist die Kubernetes-Orchestrierung ein logischer nächster Schritt für die Verwaltung dieser Workloads.

Wenn Sie mehr erfahren möchten, sehen Sie sich „Kubernetes vs. Docker: Es ist keine Entweder-Oder-Frage“ an:

Kubernetes-Architektur

Zu den Hauptkomponenten der Kubernetes-Architektur gehören:

Cluster und Knoten (Rechenleistung)

Cluster sind die Bausteine der Kubernetes-Architektur. Die Cluster bestehen aus Knoten, von denen jeder einen einzelnen Rechenhost (virtuelle oder physische Maschine) darstellt.

Jeder Cluster besteht aus einem Master-Knoten, der als Steuerungsplan für den Cluster dient, und mehreren Worker-Knoten, die containerisierte Anwendungen bereitstellen, ausführen und verwalten. Auf dem Master-Knoten wird ein Scheduler-Service ausgeführt, der automatisiert, wann und wo die Container auf der Grundlage der von den Entwicklern festgelegten Bereitstellungsanforderungen und der verfügbaren Rechnerkapazität bereitgestellt werden. Jeder Worker-Knoten enthält das Tool, das zur Verwaltung der Container verwendet wird – wie Docker – und einen Softwareagenten namens Kubelet, der Befehle vom Master-Knoten empfängt und ausführt.

Entwickler verwalten Cluster-Operationen mit kubectl, einer Befehlszeilen-Schnittstelle (cli), die direkt mit der Kubernetes-API kommuniziert. 

Weitere Informationen zu Kubernetes-Clustern finden Sie unter: „Kubernetes-Cluster: Architektur für schnelle, kontrollierte Cloud-App-Bereitstellung“.

Pods und Bereitstellungen (Software)

Pods sind Gruppen von Containern mit denselben Rechenressourcen und demselben Netzwerk. Sie sind auch die Einheit der Skalierbarkeit in Kubernetes: Wenn ein Container in einem Pod mehr Datenverkehr verzeichnet, als er bewältigen kann, repliziert Kubernetes den Pod auf andere Knoten im Cluster. Aus diesem Grund ist es eine gute Idee, Pods kompakt zu halten, sodass sie nur Container enthalten, die sich Ressourcen teilen müssen.

Die Bereitstellung steuert die Erstellung und den Zustand der containerisierten Anwendung und hält sie am Laufen. Sie gibt an, wie viele Replikate eines Pods auf dem Cluster ausgeführt werden sollen. Wenn ein Pod ausfällt, erstellt die Bereitstellung einen neuen.

Weitere Informationen zu Kubernetes-Bereitstellungen finden Sie in „Kubernetes-Bereitstellungen: Legen Sie sofort los“:

Istio Service Mesh

Kubernetes kann Pods bereitstellen und skalieren, aber es kann das Routing zwischen ihnen nicht verwalten oder automatisieren und stellt keine Tools zur Überwachung, Sicherung oder Fehlerbehebung dieser Verbindungen bereit. Mit zunehmender Anzahl von Containern in einem Cluster steigt die Anzahl der möglichen Verbindungspfade zwischen ihnen exponentiell an (z. B. haben zwei Container zwei potenzielle Verbindungen, aber 10 Pods haben 90), was die Konfiguration und Verwaltung zu einem potenziellen Albtraum macht.

Hier kommt Istio ins Spiel, eine als Open-Source-Lösung bereitgestellte Service-Mesh-Schicht für Kubernetes-Cluster. Istio fügt jedem Kubernetes-Cluster einen Sidecar-Container hinzu, der für den Programmierer und den Administrator im Wesentlichen unsichtbar ist und die Interaktionen zwischen den anderen Containern konfiguriert, überwacht und verwaltet.

Mit Istio legen Sie eine einzige Richtlinie fest, die die Verbindungen zwischen Containern konfiguriert, sodass Sie nicht jede Verbindung einzeln konfigurieren müssen. Dadurch lassen sich Verbindungen zwischen Containern leichter debuggen.

Istio bietet auch ein Dashboard, mit dem DevOps-Teams und Administratoren Latenz, Time-in-Service-Fehler und andere Merkmale der Verbindungen zwischen Containern überwachen können. Darüber hinaus verfügt Istio über Sicherheitsfunktionen – darunter insbesondere Identitätsmanagement, das verhindert, dass unbefugte Benutzer einen Service-Aufruf zwischen Containern vortäuschen, – sowie Authentifizierungs-, Autorisierungs- und Auditing-Funktionen (AAA), mit denen Sicherheitsexperten den Cluster überwachen können.

Weitere Informationen über Istio
Knative und Serverless Computing

Knative (ausgesprochen „kay-native“) ist eine Open-Source-Plattform, die auf Kubernetes aufbaut und zwei wichtige Vorteile für die cloudnative Entwicklung bietet:

Knative bietet einen einfachen Einstieg in das Serverless Computing

Serverless Computing ist eine relativ neue Art der Bereitstellung von Code, was cloudnative Anwendungen effizienter und kostengünstiger macht. Anstatt eine laufende Code-Instanz bereitzustellen, die im Leerlauf auf Anfragen wartet, wird der Code bei Bedarf hoch- oder herunterskaliert, wenn die Nachfrage schwankt, und dann wieder entfernt, wenn er nicht gebraucht wird. Serverless verhindert die Verschwendung von Rechenkapazität und Energie und senkt die Kosten, da Sie nur für die Ausführung des Codes zahlen, wenn er tatsächlich ausgeführt wird.

Knative ermöglicht es Entwicklern, einen Container einmal zu erstellen und ihn als Software-Service oder als Serverless-Funktion auszuführen. Für den Entwickler ist das alles transparent: Knative kümmert sich um die Details im Hintergrund und der Entwickler kann sich auf den Code konzentrieren.

Knative vereinfacht die Entwicklung und Orchestrierung von Containern

Für Entwickler ist die Containerisierung von Code mit vielen sich wiederholenden Schritten verbunden. Die Orchestrierung von Containern erfordert eine Vielzahl von Konfigurationen und Skripten, z. B. die Erstellung von Konfigurationsdateien, die Installation von Abhängigkeiten, die Verwaltung von Protokollierung und Tracing und das Schreiben von Skripten für die kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD).

Knative erleichtert diese Aufgaben, indem es sie mithilfe von drei Komponenten automatisiert:

Build: Die Build-Komponente von Knative wandelt den Quellcode automatisch in einen cloudnativen Container oder eine cloudnative Funktion um. Genauer gesagt, ruft sie den Code aus dem Repository ab, installiert die erforderlichen Abhängigkeiten, erstellt das Container-Image und stellt es in einer Container-Registry für andere Entwickler zur Verfügung. Die Entwickler müssen den Speicherort dieser Komponenten angeben, damit Knative sie finden kann, aber sobald das geschehen ist, automatisiert Knative den Build.

Serve: Die Serve-Komponente führt Container als skalierbare Services aus. Sie kann auf bis zu Tausende von Container-Instanzen hochskalieren oder auf keine herunter skalieren (das nennt man Skalierung auf Null). Darüber hinaus verfügt Serve über zwei sehr nützliche Funktionen: die Konfiguration, die jedes Mal, wenn Sie den Container in die Produktion überführen, Versionen eines Containers (so genannte Snapshots) speichert und es Ihnen ermöglicht, diese Versionen gleichzeitig laufen zu lassen, und das Service-Routing, mit dem Sie unterschiedliche Mengen an Datenverkehr zu diesen Versionen leiten können. Sie können diese Funktionen zusammen verwenden, um eine Container-Einführung allmählich voranzutreiben oder um einen Canary-Test einer containerisierten Anwendung durchzuführen, bevor Sie sie in die globale Produktion überführen.

Event: Event ermöglicht es bestimmten Ereignissen, containerbasierte Services oder Funktionen auszulösen. Dies ist besonders wichtig für die Serverless-Funktionen von Knative, denn irgendetwas muss dem System sagen, dass es eine Funktion aufrufen soll, wenn Bedarf besteht. Event ermöglicht es Teams, ihr Interesse an bestimmten Ereignissen zu bekunden. Das Programm stellt dann automatisch eine Verbindung zum Ereignisproduzenten her und leitet die Ereignisse an den Container weiter, sodass diese Verbindungen nicht mehr programmiert werden müssen.

Weitere Informationen über Knative
Kubernetes: GitHub-Commits und weitere Beweise für steigende Popularität

Kubernetes ist eines der am schnellsten wachsenden Open-Source-Projekte der Geschichte, und das Wachstum nimmt weiter an Fahrt auf. Die Akzeptanz unter den Entwicklern und den Unternehmen, die sie beschäftigen, steigt weiter an. Hier sind ein paar interessante Daten:

  • Zum Zeitpunkt der Erstellung dieses Artikels wurden über 120.190 Commits am Kubernetes-Repository auf GitHub (Link befindet sich außerhalb von ibm.com) vorgenommen. Das ist ein Anstieg von fast 34.000 Commits in den letzten 18 Monaten – und es gibt mehr als 3.100 aktive Mitwirkende an dem Projekt. Nach Angaben der Cloud Native Computing Foundation (CNCF) gab es mehr als 148.000 Commits in allen Kubernetes-bezogenen Repositorys (einschließlich Kubernetes Dashboard und Kubernetes MiniKube). Sie können alle Statistiken hier (der Link befindet sich außerhalb von ibm.com) nachlesen.

  • Mehr als 2.000 Unternehmen nutzen Kubernetes in den Stacks ihrer Produktionssoftware. Dazu gehören weltweit renommierte Unternehmen wie AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder und natürlich IBM. Lesen Sie diese und andere Fallstudien zur Einführung (Link befindet sich außerhalb von ibm.com)

  • Eine im Container Journal (der Link befindet sich außerhalb von ibm.com) zitierte Umfrage aus dem Jahr 2021 ergab, dass 68 % der IT-Experten während der COVID-19-Pandemie verstärkt Kubernetes einsetzten.

  • Laut ZipRecruiter (Link befindet sich außerhalb von ibm.com) beträgt das durchschnittliche Jahresgehalt (in Nordamerika) für eine Stelle im Bereich Kubernetes 147.732 US-Dollar. Derzeit sind auf LinkedIn (Link befindet sich außerhalb von ibm.com) mehr als 57.000 Stellen im Zusammenhang mit Kubernetes ausgeschrieben. Vor 18 Monaten waren es noch 21.000 Stellen.
Weiterführende Lösungen
Red Hat OpenShift on IBM® Cloud

Mit Red Hat OpenShift on IBM Cloud haben OpenShift-Entwickler eine schnelle und sichere Möglichkeit zur Containerisierung und Bereitstellung von Unternehmensworkloads in Kubernetes-Clustern.

Red Hat OpenShift kennenlernen
IBM Cloud Satellite

Stellen Sie Apps konsistent in lokalen, Edge-Computing- und Public-Cloud-Umgebungen beliebiger Cloud-Anbieter bereit und führen Sie sie aus, indem Sie einen gemeinsamen Satz von Cloud-Services einschließlich Toolchains, Datenbanken und KI nutzen.

IBM Cloud Satellite-Lösungen entdecken
IBM Cloud Code Engine

IBM Cloud Code Engine ist eine vollständig verwaltete serverlose Plattform, mit der Sie Ihren Container-, Anwendungscode- oder Batch-Job auf einer vollständig verwalteten Container-Laufzeit ausführen können.

Code Engine entdecken
Ressourcen Nutzung von Containern im Unternehmen

Eine neue Studie von IBM dokumentiert die rasante Verbreitung von Containern und Kubernetes.

Flexible, resiliente und sichere IT für Ihre Hybrid Cloud

Container sind Teil einer Hybrid-Cloud-Strategie, mit der Sie Workloads von überall aus erstellen und verwalten können.

Was ist Serverless?

Serverless ist ein Modell für die Entwicklung und Ausführung von Cloud-Anwendungen, mit dem Entwickler Code erstellen und ausführen können, ohne Server verwalten zu müssen und ohne für ungenutzte Cloud-Infrastruktur bezahlen zu müssen.

YAML-Grundlagen in Kubernetes

Sehen Sie sich ein Beispiel an, wie eine YAML-Datei in Kubernetes verwendet wird.

Machen Sie den nächsten Schritt

Red Hat OpenShift on IBM Cloud bietet OpenShift-Entwicklern eine schnelle und sichere Möglichkeit zur Containerisierung und Bereitstellung von Unternehmensworkloads in Kubernetes-Clustern. Stellen Sie hochverfügbare, vollständig verwaltete Kubernetes-Cluster für Ihre containerisierten Anwendungen mit nur einem Klick bereit. Da IBM die Verwaltung der OpenShift Container Platform (OCP) übernimmt, haben Sie nun mehr Zeit, sich auf Ihre Kernaufgaben zu konzentrieren.

Red Hat OpenShift on IBM® Cloud kennenlernen