Container

Kubernetes erklärt

Kubernetes, auch k8s genannt (beginnt mit k, hat 8 Zeichen, endet mit s), oder kurz „kube“ ist eine Open Source-Plattform, die den Betrieb von Linux®-Containern automatisiert. Dabei werden viele der manuellen Prozesse, die mit der Bereitstellung und Skalierung von containerisierten Anwendungen einhergehen, eliminiert. Mit anderen Worten: Sie können Gruppen von Hosts, auf denen Linux-Container laufen, in Clustern zusammenfassen und diese mit Kubernetes auf einfache und effiziente Weise verwalten. Diese Cluster können Hosts in Public, Private oder Hybrid Clouds haben. Aus diesem Grund ist Kubernetes die ideale Plattform für das Hosting cloudnativer Anwendungen, die eine schnelle Skalierung benötigen (wie z. B. für das Daten-Streaming in Echtzeit mit Apache Kafka).

Kubernetes wurde ursprünglich von Google-Ingenieuren entwickelt und konzipiert. Google war einer der ersten Unterstützer der Linux-Container-Technologie und hat die Öffentlichkeit darüber informiert, dass alles bei Google in Containern ausgeführt wird. (Dies ist die Technologiebasis der Google Cloud Services.) Google generiert über 2 Milliarden Container-Bereitstellungen pro Woche, und zwar alle auf einer internen Plattform: Borg. Borg ist der Vorgänger von Kubernetes und alle Erfahrungswerte aus seiner Entwicklung im Laufe der Jahre bilden die Grundlage der heutigen Kubernetes-Technologie.

Anekdote am Rande: Die sieben Speichen des Kubernetes-Logos beziehen sich auf den ursprünglichen Projektnamen „Project Seven of Nine“ (Verweis auf den Mensch-Borg-Hybrid in der Star Trek-Serie „Voyager“).

Red Hat® war einer der ersten Partner von Google bei der Entwicklung von Kubernetes, selbst vor der Veröffentlichung, und ist mittlerweile der zweitgrößte Unterstützer des Kubernetes Upstream-Projekts. Google spendete das Kubernetes-Projekt 2015 der neu gegründeten Cloud Native Computing Foundation.


Warum brauchen Sie Kubernetes?

Echte Produktions-Apps erstrecken sich über mehrere Container. Diese Container müssen auf mehreren Server-Hosts bereitgestellt werden. Sicherheit für Container ist mehrschichtig und kann daher sehr komplex sein. Und genau hier kann Kubernetes helfen. Es liefert Ihnen die Orchestrierungs- und Managementfunktionen, die Sie für eine sehr große Container-Bereitstellung mit diesen Workloads benötigen. Mit der Kubernetes-Orchestrierung können Sie Anwendungsservices entwickeln, die sich über mehrere Container erstrecken, diese Container als Cluster planen, skalieren und ihren Zustand über einen längeren Zeitraum überwachen. Mit Kubernetes machen Sie die ersten echten Schritte hin zu einer besseren IT-Sicherheit.

Kubernetes muss außerdem mit Networking-, Storage-, Sicherheits-, Telemetrie- und anderen Services integriert werden, damit eine umfassende Container-Infrastruktur vorliegt.

Kubernetes explained - diagram

Das ist natürlich davon abhängig, wie Sie Container in Ihrer Umgebung verwenden. In einer rudimentären Anwendung von Linux-Containern werden diese als effiziente, schnelle virtuelle Maschinen behandelt. Sobald diese Umgebung auf den Umfang einer Produktionsumgebung und mehrere Anwendungen skaliert wird, benötigen Sie die Leistung mehrerer, nebeneinander lokalisierter Container, die die einzelnen Services bereitstellen. Das erhöht die Anzahl der Container in Ihrer Umgebung erheblich und mit der Anhäufung von Containern wächst auch die Komplexität.

Kubernetes behebt eine Vielzahl der allgemeinen Probleme, die durch die wachsende Anzahl von Containern entstehen können, indem es sie in sogenannten „Pods“ zusammenfasst. Diese Pods fügen den gruppierten Containern eine Abstraktionsebene hinzu, die Ihnen hilft, Workloads zu planen und diesen Containern die notwendigen Dienste wie Vernetzung und Storage zu liefern. Mithilfe anderer Bestandteile von Kubernetes können Sie die Last über diese Pods verteilen und sicherstellen, dass die richtige Anzahl an Containern für Ihre Workloads ausgeführt wird.

Mit der richtigen Implementierung von Kubernetes und der Unterstützung anderer Open Source-Projekte wie Atomic Registry, Open vSwitch, heapster, OAuth und SELinux können Sie alle Teile Ihrer Container-Infrastruktur orchestrieren.


Wofür können Sie Kubernetes einsetzen?

Besonders wenn Sie Ihre App-Entwicklung für die Cloud optimieren möchten, liegt der Hauptvorteil von Kubernetes darin, dass Ihnen damit eine Plattform zur Verfügung steht, mit der Sie Container in Clustern physischer oder virtueller Maschinen planen und ausführen können. Allgemeiner gesagt, können Sie mit Kubernetes eine Infrastruktur in Ihren Produktionsumgebungen implementieren, die komplett containerbasiert ist und auf die Sie sich verlassen können. Und weil sich bei Kubernetes alles um die Automatisierung von operativen Aufgaben dreht, können Sie damit praktisch dasselbe tun wie auf anderen Anwendungsplattformen oder Managementsystemen, aber eben für Ihre Container.

Mit Kubernetes können Sie:

  • Container über mehrere Hosts orchestrieren
  • Hardware besser nutzen, um die notwendigen Ressourcen für den Betrieb Ihrer Unternehmensanwendungen zu maximieren
  • Anwendungsbereitstellungen und -aktualisierungen steuern und automatisieren
  • Storage aufsetzen und hinzufügen, um zustandsbehaftete Apps auszuführen
  • Containerisierte Anwendungen und deren Ressourcen auf die Schnelle skalieren.
  • Services deklarativ verwalten, um zu gewährleisten, dass die bereitgestellten Anwendungen genau nach Plan ausgeführt werden
  • Mithilfe von Autoplacement, Autorestart, Autoreplication und Autoscaling eine Zustandsprüfung Ihrer Apps und ggf. eine Eigenreparatur durchführen

Kubernetes baut jedoch für eine vollständige Bereitstellung dieser orchestrierten Dienste auf weitere Projekte. Durch die zusätzliche Nutzung weiterer Open Source-Projekte können Sie die Leistung von Kubernetes vollständig realisieren. Zu den notwendigen Komponenten gehören unter anderem:

  • Registry − über Projekte wie Atomic Registry oder Docker Registry
  • Networking − über Projekte wie OpenvSwitch und intelligentes Edge Routing
  • Telemetrie − über Projekte wie Heapster, Kibana, Hawkular und Elastic
  • Sicherheit − über Projekte wie LDAP, SELinux, RBAC sowie OAUTH mit Multi-Tenancy Layers
  • Automatisierung − durch Ansible® Playbooks für Installationszwecke und Cluster Lifecycle Management
  • Services über einen reichhaltigen Katalog an vordefinierten Inhalten populärer App-Muster

Erlernen Sie die Kubernetes-Sprache

Wie bei jeder Technologie gibt es einige spezielle Fachbegriffe, die den Zugang erschweren können. Hier finden Sie eine Liste der häufigsten Begriffe, mit denen Sie Kubernetes besser verstehen können.

Master: Die Maschine, die die Kubernetes Knoten kontrolliert. Hier werden alle Task-Zuordnungen ausgegeben.

Knoten: Diese Maschinen führen die angeforderten und zugewiesenen Tasks aus. Diese werden vom Kubernetes Master kontrolliert.

Pod: Eine Gruppe aus einem oder mehreren Containern, die in einem einzelnen Knoten implementiert wurde. Alle Container in einem Pod teilen sich die IP-Adresse, IPC, Hostname und andere Ressourcen. Mit Pods lassen sich Netzwerk und Storage weg vom zugrundeliegenden Container abstrahieren. Auf diese Weise lassen sich die Container im Cluster einfacher verschieben.

Replication Controller: Dieses Tool kontrolliert, wie viele identische Kopien eines Pods irgendwo auf dem Cluster laufen sollen.

Service: Damit werden Arbeitsdefinitionen von den Pods entkoppelt. Kubernetes Service-Proxies befördern Serviceanfragen automatisch an den richtigen Pod, egal wo sich dieser im Cluster befindet und selbst wenn er ersetzt wurde.

Kubelet: Dieser Dienst läuft auf den Knoten, liest die Container-Manifeste aus und stellt sicher, dass die definierten Container gestartet und in Betrieb sind.

kubectl: Dies ist das Befehlszeilen-Konfigurationstool für Kubernetes.


Die Verwendung von Kubernetes in der Produktion

Kubernetes ist eine Open Source-Technologie. Es existiert keine formelle Supportstruktur für diese Technologie oder zumindest keine, der man seinen Geschäftserfolg anvertrauen würde. Wenn während der Produktion Probleme bei der Implementierung von Kubernetes auftreten würden, wären Sie sicher nicht sonderlich zufrieden. Gleiches gilt für Ihre Kunden.

Und genau hier kommt Red  Hat® OpenShift® ins Spiel. OpenShift ist Kubernetes für Unternehmen und noch vieles mehr. OpenShift integriert alle zusätzlichen Technologiekomponenten, die Kubernetes leistungsstark und unternehmenstauglich machen, darunter Registry, Networking, Telemetrie, Sicherheit, Automatisierung und Services. Mit OpenShift können Ihre Ingenieure neue containerisierte Apps erstellen, sie hosten und in der Cloud mit der entsprechenden Skalierbarkeit, Kontrolle und Orchestrierung bereitstellen, die aus einer guten Idee schnell und einfach Geschäftsmöglichkeiten schafft.

Und das Beste ist: OpenShift wird von Red Hat, dem weltweit führenden Anbieter von Open Source-Lösungen unterstützt und entwickelt.


So passt Kubernetes in Ihre Infrastruktur

Kubernetes diagram

Kubernetes läuft aufgesetzt auf ein Betriebssystem (zum Beispiel Red Hat Enterprise Linux Atomic Host) und interagiert mit den Pods von Containern, die auf den Knoten laufen. Der Kubernetes Master empfängt Befehle vom Administrator (oder dem DevOps-Team) und leitet diese Befehle an die untergeordneten Knoten weiter. Diese Übergabe arbeitet mit einer Vielzahl von Services, die automatisch entscheiden, welcher Knoten am besten für die Aufgabe geeignet ist. Der Knoten weist dann Ressourcen zu und legt die Pods in diesem Knoten fest, die die gewünschte Aufgabe durchführen sollen.

Aus Sicht der Infrastruktur ändert sich also nicht viel im Vergleich dazu, wie Sie Container vorher verwaltet haben. Ihre Kontrolle über diese Container findet auf einer höheren Ebene statt, und zwar ohne dass Sie jeden Container oder Knoten einzeln managen müssen. Einige Arbeiten müssen durchgeführt werden, aber diese bestehen hauptsächlich darin, einen Kubernetes Master zu bestimmen, Knoten zu definieren und Pods zu festzulegen.

Was ist mit Docker?

Die Docker-Technologie tut immer noch das, wofür sie entwickelt wurde. Wenn Kubernetes einen Pod für einen Knoten einplant, gibt Kubelet auf diesem Knoten Docker die Anweisung, die spezifischen Container zu starten. Kubelet erfasst dann kontinuierlich den Status dieser Container von Docker und sammelt diese Informationen im Master. Docker zieht Container auf diesen Knoten und startet und stoppt diese Container ganz normal. Der Unterschied ist, dass ein automatisiertes System Docker auffordert, diese Dinge zu tun, anstelle eines Administrators, der dies manuell auf allen Knoten für alle Container tut.

Container haben noch viel mehr zu bieten