Kubernetes

menu icon

Kubernetes

Kubernetes ist eine Open-Source-Container-Orchestrierungsplattform, die die Bereitstellung, Verwaltung und Skalierung von Anwendungen automatisiert. Erfahren Sie, wie Kubernetes eine kosteneffiziente cloudnative Entwicklung ermöglicht.

Was ist Kubernetes?

Kubernetes - auch bekannt als "k8s" oder "kube" - ist eine Container-Orchestrierungsplattform für die Planung und Automatisierung der Implementierung, Verwaltung und Skalierung von containerisierten Anwendungen.

Kubernetes wurde erstmals von den Ingenieuren von Google entwickelt, bevor es 2014 als Open-Source der Öffentlichkeit zur Verfügung gestellt wurde. Es ist ein Nachfahre von Borg,  einer Container-Orchestrierungsplattform, die intern bei Google verwendet wird. Kubernetes ist griechisch für Steuermann oder Pilot, daher das Steuerrad im Kubernetes-Logo (Link befindet sich außerhalb von  IBM).

Heute reifen Kubernetes und das breitere Container-Ökosystem zu einer Allzweck-Computing-Plattform und einem Ökosystem heran, das mit virtuellen Maschinen (VMs) als Grundbausteinen moderner Cloud-Infrastrukturen und -Anwendungen konkurriert, wenn es diese nicht sogar übertrifft. Dieses Ökosystem ermöglicht es Unternehmen, eine hochproduktive Platform-as-a-Service (PaaS) bereitszustellen, 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.     

Im folgenden Video erläutert Sai Vennam die Grundlagen von Kubernetes (10:59):

Was sind Container?

Beginnen wir mit einer Definition: Ein Container ist eine ausführbare Einheit von Software, in der der Anwendungscode - zusammen mit Bibliotheken und Abhängigkeiten - auf gängige Weise verpackt ist, sodass er überall auf dem Desktop, in der traditionellen IT oder in der Cloud ausgeführt werden kann.

Container nutzen die Vorteile einer Form der Betriebssystemvirtualisierung , bei der mehrere Anwendungen das Betriebssystem gemeinsam nutzen, indem sie Prozesse isolieren und die Menge an CPU, Speicher und Festplatte steuern, auf die diese Prozesse zugreifen können.

Container vs. virtuelle Maschinen vs. traditionelle Infrastruktur

Unter Umständen ist es einfacher oder hilfreicher, Container als den neuesten Punkt auf dem Kontinuum der Automatisierung und Abstraktion von IT-Infrastrukturen zu verstehen.

In einer traditionellen Infrastruktur laufen Anwendungen auf einem physischen Server und greifen auf alle Ressourcen zu, derer sie habhaft werden können. So haben Sie die Wahl, mehrere Anwendungen auf einem einzigen Server auszuführen und zu hoffen, dass eine davon nicht auf Kosten der anderen Ressourcen verbraucht, oder einen Server pro Anwendung zu dedizieren, was Ressourcen verschwendet und nicht skalierbar ist.

Virtuelle Maschinen (VM) sind Server, die von der eigentlichen Computer-Hardware abstrahiert sind und die Ausführung mehrerer VM auf einem physischen Server oder einer einzelnen VM, die sich über mehrere physische Server erstreckt, ermöglichen. Jede VM führt eine eigene Betriebssysteminstanz aus, und Sie können jede Anwendung in einer eigenen VM isolieren, wodurch die Wahrscheinlichkeit verringert wird, dass Anwendungen, die auf der gleichen zugrunde liegenden physischen Hardware ausgeführt werden, sich gegenseitig in die Quere kommen. VMs nutzen die Ressourcen besser aus und sind viel einfacher und kostengünstiger zu skalieren als herkömmliche Infrastrukturen. Und sie lassen sich aussondern - wenn Sie die Anwendung nicht mehr benötigen, fahren Sie die VM herunter.

Weitere Informationen zu VMs finden Sie unter: „Virtual Machines: An Essential Guide“.

Container heben diese Abstraktion auf eine höhere Ebene - insbesondere teilen sie nicht nur die zugrundeliegende virtualisierte Hardware, sondern auch einen zugrundeliegenden virtualisierten Betriebssystemkern. Container bieten die gleiche Isolierung, Skalierbarkeit und Verfügbarkeit wie VM, aber da sie nicht die Nutzlast ihrer eigenen Betriebssysteminstanz tragen, sind sie leichter (d.h. nehmen weniger Platz in Anspruch) als VM. Sie sind ressourceneffizienter - Sie können dadurch mehr Anwendungen auf weniger Maschinen (virtuell und physisch) mit weniger Betriebssysteminstanzen ausführen. Container lassen sich leichter über Desktop-, Rechenzentrums- und Cloud-Umgebungen hinweg transportieren. Und sie eignen sich ausgezeichnet für Agile und DevOps Entwicklungspraktiken.

„Containers: An Essential Guide“ ist eine ausführliche Beschreibung von Containern und Containerisierung. Und der Blog-Beitrag "Containers vs. VMs: What's the difference?" 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 im Jahr 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 die Firma Docker Inc., die Docker produziert - ein kommerzielles Container-Toolkit, das auf dem Open-Source-Projekt aufbaut (und diese Verbesserungen wieder in die Open-Source-Community einbringt).

Docker wurde auf der traditionellen Linux-Container (LXC)-Technologie aufgebaut, ermöglicht jedoch eine granularere Virtualisierung von Linux-Kernel-Prozessen und fügt Funktionen hinzu, die es Entwicklern erleichtern, Container zu erstellen, bereitzustellen, zu verwalten und zu sichern.

Obwohl es heute alternative Container-Plattformen gibt (z. B. Open Container Initiative (OCI), CoreOS und Canonical (Ubuntu) LXD), wird Docker so weit bevorzugt, dass es praktisch ein Synonym für Container ist und manchmal fälschlicherweise als Konkurrent zu ergänzenden Technologien wie Kubernetes angesehen wird (siehe das Video “Kubernetes vs. Docker: It’s Not an Either/Or Question” weiter unten).

Container-Orchestrierung mit Kubernetes

Mit der zunehmenden Verbreitung von Containern - heute kann ein Unternehmen Hunderte oder Tausende von ihnen haben - mussten die Betriebsteams die Bereitstellung von Containern, Vernetzung, Skalierbarkeit und Verfügbarkeit planen und automatisieren. Damit hatte die Geburtsstunde des Container-Orchestrierungsmarkts geschlagen.

Während andere Optionen zur Container-Orchestrierung -  vor allem Docker Swarm und Apache Mesos - schon früh an Zugkraft gewannen, wurde Kubernetes schnell zum am weitesten verbreiteten Projekt (tatsächlich war es zu einem bestimmten Zeitpunkt das am schnellsten wachsende Projekt in der Geschichte der Open-Source-Software).

Entwickler entschieden sich (und entscheiden sich weiterhin) für Kubernetes aufgrund der großen Funktionsvielfalt, des riesigen und wachsenden Ökosystems an unterstützenden Open-Source-Tools sowie der Unterstützung und Portabilität durch die führenden Cloud-Anbieter (von denen einige  inzwischen vollständig verwaltete Kubernetes-Services anbieten).

Weitere Informationen zur Containerorchestrierung finden Sie im Video "Container Orchestration Explained" (08:59):

Was macht Kubernetes?

Kubernetes plant und automatisiert diese und andere containerbezogene Aufgaben:

  • Bereitstellung: Bereitstellung einer bestimmten Anzahl von Containern auf einem bestimmten Host und Ausführung in einem gewünschten Zustand.
  • Rollouts: Ein Rollout ist eine Änderung an einer Implementierung. Mit Kubernetes können Sie Rollouts einleiten, anhalten, wiederaufnehmen und auch rückgängig machen.
  • Service-Erkennung: Kubernetes kann einen Container automatisch dem Internet oder anderen Containern unter Verwendung eines DNS-Namens oder einer IP-Adresse zugänglich machen.
  • Storage-Bereitstellung: Richten Sie Kubernetes so ein, dass je nach Bedarf persistenter lokale oder Cloud-Speicherung für Ihre Container aufgesetzt werden kann.
  • Lastausgleich und Skalierung: Wenn der Datenverkehr zu einem Container sprunghaft ansteigt, kann Kubernetes Lastausgleich und Skalierung einsetzen, um eine entsprechende Verteilung über das Netzwerk vorzunehmen und Stabilität zu gewährleisten.
  • Selbstheilung für hohe Verfügbarkeit: Bei Ausfall eines Containers kann Kubernetes ihn automatisch neu starten oder ersetzen; es kann auch Container herunterfahren, die Ihre Anforderungen an den „Health-Check“ nicht erfüllen.

Kubernetes im Vergleich zu Docker

Wenn Sie bis hier gelesen haben, verstehen Sie bereits, dass Kubernetes zwar eine Alternative zu Docker Swarm ist, aber (entgegen einem hartnäckigen populären Missverständnis) keine Alternative oder Konkurrenz zu Docker selbst.

Wenn Sie Docker bei sich mit Enthusiasmus eingeführt haben und groß angelegte Docker-basierte Container-Implementierungen erstellen, ist die Orchestrierung von Kubernetes ein logischer nächster Schritt zur Bewältigung der Workloads. Um mehr zu erfahren, sehen Sie sich das Video „Kubernetes vs. Docker: It’s Not an Either/Or Question” (08:03):

Kubernetes-Architektur

Zu den Hauptkomponenten der Kubernetes-Architektur gehören:

Cluster und Knoten (Compute)

Clustersind die Bausteine der Kubernetes-Architektur. Die Cluster bestehen ausKnoten (engl. nodes), die jeweils einen einzelnen Compute-Host bilden (virtuelle oder physische Maschine).

Jeder Cluster besteht aus mehreren Arbeitsknoten, die containerisierte Anwendungen implementieren, ausführen und verwalten, und einemMaster-Node, der die Worker-Nodes steuert und überwacht.

Der Masterknoten führt einen Scheduler-Service aus, der automatisiert, wann und wo die Container auf der Basis von Entwicklergruppenimplementierungsanforderungen und verfügbarer Rechenkapazität implementiert werden. Jeder Worker-Knoten enthält das Tool, das zur Verwaltung der Container verwendet wird - z. B. Docker - und einen Softwareagent namens Kubelet, der Aufträge vom Hauptknoten empfängt und ausführt.

Wenn Sie mehr über Kubernetes-Cluster erfahren möchten, lesen Sie diesen Blog-Beitrag: „Kubernetes Clusters: Architecture for Rapid, Controlled Cloud App Delivery“.

Pods und Bereitstellungen (Software)

Podssind Gruppen von Containern, welche sich die gleichen Compute-Ressourcen und dasselbe Netzwerk teilen. Sie sind auch die Einheit der Skalierbarkeit in Kubernetes: Wenn ein Container in einem Pod mehr Datenverkehr erhält, als er verarbeiten kann, repliziert Kubernetes den Pod auf andere Knoten im Cluster. Aus diesem Grund ist es eine gute Praxis, Pods kompakt zu halten, damit sie nur Behälter enthalten, die Ressourcen gemeinsam nutzen müssen.

Die Implementierung steuert die Erstellung und den Status der containerisierten Anwendung und hält sie am Laufen. Sie legt fest, wie viele Repliken eines Pods auf dem Cluster ausgeführt werden sollen. Wenn ein Pod ausfällt, erstellt die Implementierung ein neues.

Weitere Informationen zu Kubernetes-Implementierungen finden Sie unter „Kubernetes Deployments: Get Started Fast" (03:54):

Für ein detaillierteres Verständnis der Elemente der Kubernetes-Architektur empfehlen wir diesen Online-Kurs zum Selbststudium: "Kubernetes 101".

Einen guten Einblick vermittelt auch der Blog-Post „Kubernetes Architecture: Four Approaches to Container Solutions“.

Istio-Service-Mesh

Kubernetes kann Pods bereitstellen und skalieren, aber es kann das Routing zwischen ihnen nicht verwalten oder automatisieren und bietet keine Tools zur Überwachung, Sicherung oder Fehlerbehebung dieser Verbindungen. Wenn die Anzahl der Container in einem Cluster wächst, 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 einen potenziellen Konfigurations- und Verwaltungsalptraum darstellt.

Da kommt Istio, eine Open-Source-Service-Mesh-Schicht für Kubernetes-Cluster, wie gerufen! Zu jedem Kubernetes-Cluster fügt Istio einen - für den Programmierer und den Administrator im Wesentlichen unsichtbaren - Sidecar-Container hinzu, der die Interaktionen zwischen den anderen Containern konfiguriert, überwacht und verwaltet.

Mit Istio legen Sie eine einzige Richtlinie fest, die Verbindungen zwischen Containern konfiguriert, so dass Sie nicht jede Verbindung einzeln konfigurieren müssen. Dies sorgt dafür, dass Verbindungen zwischen Containern einfacher zu debuggen sind.

Istio stellt außerdem ein Dashboard zur Verfügung, mit dem DevOps-Teams und Administratoren Latenzzeiten, Time-in-Service-Fehler und andere Attribute der Verbindungen zwischen Containern überwachen können. Darüber hinaus bietet es Sicherheitsfunktionen - insbesondere ein Identitätsmanagement, das verhindert, dass unbefugte Benutzer einen  Serviceaufruf zwischen Containern fälschen - sowie Authentifizierungs-, Autorisierungs- und Auditing-Funktionen (AAA), die Sicherheitsexperten zur Überwachung des Clusters nutzen können.

Siehe den Artikel „What is Istio?“ für weitere Einzelheiten, einschließlich ein Video und ein paar Beispiele von Anwendungen von Istio.

Knative und Serverless Computing

Knative (ausgesprochen "kay-native") ist eine Open-Source-Plattform, die auf Kubernetes aufsetzt und zwei wichtige Klassen von Vorteilen für die cloudnative Entwicklung bietet:

Knative bietet eine einfache Einstiegsrampe zum Serverless Computing

Serverloses Computing ist eine relativ neue Art der Bereitstellung von Code, die native Cloud-Anwendungen effizienter und kostengünstiger macht. Anstatt eine laufende Instanz von Code bereitzustellen, die im Leerlauf auf Anfragen wartet, aktiviert der serverlose Ansatz den Code  nach Bedarf - er skaliert ihn nach oben oder unten, wenn die Nachfrage schwankt - und inaktiviert ihn wieder, wenn er nicht gebraucht wird. Serverless verhindert die Vergeudung von Rechenkapazität und Leistung und senkt Kosten, da Sie nur zahlen, wenn der Code tatsächlich ausgeführt wird.

Knative ermöglicht es Entwicklern, einen Container einmal zu bauen und ihn als Software-Dienstoderals serverlose Funktion zu betreiben. Es ist alles transparent für den Entwickler: Knative verarbeitet die Details im Hintergrund, und der Entwickler kann sich auf Code konzentrieren.

Knative vereinfacht die Containerentwicklung und Orchestrierung

Für Entwickler erfordert der containerisierte Code viele sich wiederholende Schritte, und die Orchestrierung von Containern erfordert viel Konfiguration und Scripting (z. B. die Generierung von Konfigurationsdateien, das Installieren von Abhängigkeiten, das Verwalten der Protokollierung und Traceerstellung sowie das Schreiben von Scripts für kontinuierliche Integration/kontinuierliche Implementierung (CI/CD)).

Knative erleichtert diese Aufgaben durch die Automatisierung von drei Komponenten:

  • Build: Die Build-Komponente von Knative wandelt Quellcode automatisch in einen cloudnativen Container oder eine Funktion um. Dabei wird der Code aus dem Repository extrahiert, die erforderlichen Abhängigkeiten werden installiert, das Containerimage wird erstellt und in einer Container-Registry anderen Entwicklern zugänglich gemacht. Die Entwickler müssen die Position dieser Komponenten angeben, damit Knative sie finden kann, aber wenn das einmal getan ist, automatisiert Knative den Build.
  • Serve: Die Serve-Komponente führt Container als skalierbare Dienste aus; sie kann Tausende von Container-Instanzen hochskalieren oder auf keine Container-Instanzen herunterskalieren (bekannt als Skalierung auf Null). Darüber hinaus bietet Serve zwei sehr nützliche Funktionen:
    • Konfiguration, bei der jedes Mal, wenn Sie den Container in die Produktion bringen, Versionen eines Containers (genannt Snapshots) gespeichert werden. Die Versionen können gleichzeitig laufen.
    • Service Routing, mit dem Sie unterschiedliche Mengen an Datenverkehr auf diese Versionen lenken können. Sie können diese Funktionen zusammen verwenden, um einen Container-Rollout schrittweise einzuleiten oder um einen Canary-Test einer containerisierten Anwendung durchzuführen, bevor sie in die globale Produktion überführt wird.
  • Event: Event ermöglicht es bestimmten Ereignissen, containerbasierte Services oder Funktionen auszulösen. Dies ist besonders wichtig für die serverlosen Fähigkeiten von Knative; es braucht etwas, das dem System sagt, wann es eine Funktion bereitstellen muss. Event ermöglicht es Teams, ihr Interesse  an Event-Typen zu bekunden, und stellt dann automatisch eine Verbindung zum Event-Produzenten her und leitet das Event an den Container weiter, so dass diese Verbindungen nicht mehr programmiert werden müssen.

Mehr über Knative erfahren Sie hier: „Knative: An Essential Guide“.

Kubernetes GitHub „Commits“ und weitere Anzeichen für zunehmende Popularität

Kubernetes ist eines der am schnellsten wachsenden Open-Source-Projekte in der Geschichte, und das Wachstum nimmt Tempo auf. Die Akzeptanz unter den Entwicklern und den Unternehmen, bei denen sie beschäftigt sind, nimmt weiter zu. Ein paar verblüffende Zahlen:

  • Zu diesem Zeitpunkt wurden über 86.200 Commits im Kubernetes-Repository auf GitHub (Link liegt außerhalb von IBM) vorgenommen - darunter fast 6.000 Commits in den letzten vier Monaten -, und es gibt mehr als 2.300  aktive Mitwirkende an dem Projekt. Laut der Cloud Native Computing Foundation (Link befindet sich außerhalb von IBM) wurden in allen Kubernetes-bezogenen Repositorys (einschließlich Kubernetes Dashboard und  Kubernetes MiniKube) mehr als 148.000 Commits durchgeführt.
  • Mehr als 1.500 Unternehmen nutzen Kubernetes in ihren Produktionssoftware-Stacks. Dazu gehören weltweit bekannte Unternehmen wie AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder - und natürlich IBM. Lesen Sie diese und andere Einführungsfallstudien (Link befindet sich außerhalb von IBM)
  • Eine im Juli  2019 im Container Journal (Link liegt außerhalb von IBM) zitierte Umfrage ergab einen Anstieg der Kubernetes-Akzeptanz um 51 % in den letzten sechs Monaten.
  • Mehr als 12.000 Personen nahmen an der Konferenz von KubeCon + CloudNative Con North America 2019 (Link liegt außerhalb von IBM) teil - über 3.000  mehr als im rekordverdächtigen Vorjahreszeitraum.
  • Laut ZipRecruiter (Link liegt außerhalb von IBM) liegt das durchschnittliche Jahresgehalt (in Nordamerika) für einen Kubernetes-bezogenen Job bei 144.628 USD. Zu diesem Zeitpunkt sind mehr als 21 000  Kubernetes-bezogene Positionen auf LinkedIn gelistet (Link liegt außerhalb von IBM).

Kubernetes-Lernprogramme

Wenn Sie bereit sind, mit Kubernetes zu arbeiten oder Ihre Fähigkeiten im Umgang mit Kubernetes und Kubernetes-Ökosystem-Tools ausbauen möchten, probieren Sie eines dieser Tutorials aus:

Kubernetes und IBM Cloud

Als verwaltete Container-Orchestrierungslösung automatisiert der IBM Cloud® Kubernetes Service die Bereitstellung, den Betrieb, die Skalierung und die Überwachung von containerisierten Apps in einem Cluster von Compute-Hosts und fügt gleichzeitig IBM spezifische Funktionen hinzu. Er ermöglicht die schnelle Bereitstellung von Anwendungen und kann sich mit fortschrittlichen Services wie Blockchain und IBM® Watson verbinden.

Einen Überblick darüber, wie ein verwalteter Kubernetes-Service Sie auf Ihrer Cloud Journey unterstützen kann, erhalten Sie in unserem Video "Advantages of Managed Kubernetes" (03:14):

Red Hat® OpenShift® on IBM Cloud ist ein umfassender Service, der vollständig verwaltete OpenShift-Cluster auf der IBM Cloud-Plattform bietet. (OpenShift ist eine Enterprise-Kubernetes-Plattform, die unter Red Hat Enterprise Linux ausgeführt wird.)

Lesen Sie mehr über OpenShift im neuen Bericht Forrester Wave: Multicloud Container Development Platforms (PDF, 415 KB).

Melden Sie sich für eine IBMid an und richten Sie ein IBM Cloud-Account ein, um zu starten.