Anmelden / Registrieren Konto

Container

Einführung in die Kubernetes-Architektur

Wenn Sie mit den Grundlagen von Kubernetes vertraut sind, wissen Sie bereits, dass es sich um eine Open  Source-Plattform zur Container-Orchestrierung handelt, auf der verteilte Anwendungen und Services in großem Umfang ausgeführt werden können. Möglicherweise kennen Sie jedoch nicht die einzelnen Komponenten und ihre Interaktionen.

Lassen Sie uns einen kurzen Blick auf die Designprinzipien werfen, die Kubernetes zugrunde liegen, und dann untersuchen, wie die verschiedenen Komponenten von Kubernetes zusammenwirken.

Designprinzipien von Kubernetes

Das Design eines Kubernetes-Clusters basiert auf drei Prinzipien, die in den Details zur Implementierung von Kubernetes erläutert werden.

Ein Kubernetes-Cluster sollte folgende Eigenschaften haben:

  • Sicher. Er sollte den neuesten Best Practices für die Sicherheit entsprechen.
  • Anwenderfreundlich. Er sollte mit wenigen einfachen Befehlen zu verwenden sein. 
  • Erweiterbar. Er sollte keinen Anbieter bevorzugen und über eine Konfigurationsdatei angepasst werden können.

Aus welchen Komponenten besteht ein Kubernetes-Cluster?

Eine funktionierende Kubernetes-Bereitstellung wird als Cluster bezeichnet. Ein Kubernetes-Cluster besteht aus zwei Teilen: der Control Plane und den Rechenmaschinen oder Knoten. Jeder Knoten ist eine eigene Linux®-Umgebung und kann entweder eine physische oder eine virtuelle Maschine sein. Auf den Knoten werden Pods ausgeführt, die aus Containern bestehen.

Dieses Diagramm zeigt, wie sich die Teile eines Kubernetes-Clusters zueinander verhalten:

Was geschieht auf der Kubernetes Control Plane?

Control Plane

Beginnen wir im Nervenzentrum unseres Kubernetes-Clusters, der Control Plane. Hier finden wir die Kubernetes-Komponenten zur Steuerung des Clusters sowie Daten zum Status und zur Konfiguration des Clusters. Die Kernkomponenten von Kubernetes übernehmen die wichtige Aufgabe, sicherzustellen, dass die Container in ausreichender Anzahl und mit den erforderlichen Ressourcen ausgeführt werden. 

Die Control Plane steht in ständigem Kontakt mit den Rechenmaschinen. Sie haben Ihren Cluster so konfiguriert, dass er auf eine bestimmte Weise ausgeführt wird. Dies wird von der Control Plane sichergestellt.

kube-apiserver

Sie müssen mit dem Kubernetes-Cluster interagieren? Interagieren Sie mit der API. Die Kubernetes-API ist das Frontend der Kubernetes Control Plane und verarbeitet interne und externe Anforderungen. Der API-Server ermittelt, ob eine Anforderung gültig ist, und verarbeitet sie dann. Sie können die API über REST-Aufrufe, über die Befehlszeile kubectl oder über andere Befehlszeilen-Tools wie kubeadm aufrufen.

kube-scheduler

In welchem Zustand befindet sich der Cluster? Wenn neue Container benötigt werden, wo passen sie hin? Dies sind die Fragen, die im Kubernetes-Scheduler beantwortet werden.

Der Scheduler berücksichtigt den Ressourcenbedarf eines Pods, wie die CPU oder den Arbeitsspeicher, sowie den Zustand des Clusters. Anschließend wird der Pod für einen geeigneten Worker-Knoten geplant.

kube-controller-manager

Controller sorgen dafür, dass der Cluster tatsächlich ausgeführt wird, und der Kubernetes-Controller-Manager enthält mehrere ineinander verschachtelte Controller-Funktionen. Ein Controller befragt den Scheduler und stellt sicher, dass die richtige Anzahl von Pods ausgeführt wird. Wenn ein Pod ausfällt, springt ein anderer Controller ein. Ein Controller verbindet die Services mit den Pods, sodass alle Anforderungen an die richtigen Endpunkte gelangen. Außerdem gibt es Controller, die Accounts und API-Zugriffs-Token erstellen.

etcd

Konfigurationsdaten und Informationen zum Status des Clusters befinden sich in etcd, einer Speicherdatenbank für Schlüsselwerte. Etcd ist fehlertolerant, dezentralisiert und bildet die „Ultimate Source of Truth" für Ihren Cluster.

Was spielt sich in einem Kubernetes-Knoten ab?

Knoten

Ein Kubernetes-Cluster benötigt mindestens einen Worker-Knoten, hat jedoch normalerweise viele. Pods werden zur Ausführung auf Knoten geplant und orchestriert. Sie müssen die Kapazität Ihres Clusters vergrößern? Fügen Sie weitere Knoten hinzu.

Pods

Ein Pod ist die kleinste und einfachste Einheit im Kubernetes-Objektmodell. Er steht für eine einzelne Instanz einer Anwendung. Jeder Pod besteht aus einem Container oder einer Reihe eng gekoppelter Container sowie den Optionen, mit denen die Ausführung der Container gesteuert werden. Pods können mit persistentem Storage verbunden werden, um zustandsbehaftete Anwendungen auszuführen.

Container Runtime Engine

Zur Ausführung der Container verfügt jeder Worker über eine Container Runtime Engine. Docker ist nur ein Beispiel, aber Kubernetes unterstützt auch andere Runtimes, die mit der Open Container Initiative kompatibel sind, z. B. rkt und CRI-O.

Kubelet

Jeder Worker-Knoten enthält ein Kubelet, eine winzige Anwendung, die mit dem Master-Knoten kommuniziert. Das Kubelet stellt sicher, dass die Container in einem Pod ausgeführt werden. Wenn die Control Plane einen Vorgang in einem Knoten benötigt, führt das Kubelet die Aktion aus.

kube-proxy

Jeder Worker-Knoten enthält auch kube-proxy, einen Netzwerk-Proxy für die Kubernetes-Netzwerk-Services. Kube-proxy verwaltet die Netzwerkkommunikation innerhalb oder außerhalb Ihres Clusters. Dabei wird entweder die Paketfilterschicht Ihres Betriebssystems verwendet oder der Datenverkehr selbst weitergeleitet.

Was ist für einen Kubernetes-Cluster noch erforderlich?

Persistenter Storage

Kubernetes verwaltet nicht nur die Container, in denen eine Anwendung ausgeführt wird, sondern auch die an einen Cluster angehängten Anwendungsdaten. Mit Kubernetes können Nutzer Storage-Ressourcen anfordern, ohne die Details der zugrunde liegenden Storage-Infrastruktur kennen zu müssen. Persistente Volumes sind spezifisch für einen Cluster und nicht für einen Pod und können daher die Lebensdauer eines Pods überleben.

Container-Registry

Die Container-Images, auf denen Kubernetes basiert, werden in einer Container-Registry gespeichert. Dies kann eine von Ihnen konfigurierte Registry oder die Registry eines Drittanbieters sein.

Zugrunde liegende Infrastruktur

Worauf Sie Kubernetes ausführen, liegt ganz bei Ihnen. Sie können Bare-Metal-Server, virtuelle Maschinen, Public Cloud-Anbieter, Private Clouds und Hybrid Cloud-Umgebungen verwenden. Einer der Hauptvorteile von Kubernetes ist, dass es auf diversen Infrastrukturarten ausgeführt werden kann.

Wer hat gesagt, das sei einfach?

Diese vereinfachte Beschreibung der Kubernetes-Architektur geht nicht in die Tiefe. Wenn Sie jedoch genauer überlegen, wie diese Komponenten miteinander und mit externen Ressourcen und Infrastrukturen kommunizieren, fangen Sie an zu verstehen, was die Herausforderungen beim Konfigurieren und Sichern eines Kubernetes-Clusters ausmacht.

Kubernetes bietet die Tools zum Orchestrieren einer großen und komplexen containerisierten Anwendung, überlässt Ihnen aber auch viele Entscheidungen. Sie wählen das Betriebssystem, die Container Runtime, das CI/CD-Tool, die Anwendungsservices, den Storage und die meisten anderen Komponenten. Außerdem ist es Ihre Aufgabe, die Rollen, Zugriffskontrolle, Mandantenfähigkeit und sichere Standardeinstellungen zu verwalten. Darüber hinaus können Sie Kubernetes selbst ausführen oder mit einem Anbieter zusammenarbeiten, der eine unterstützte Version bereitstellen kann.

Diese Wahlfreiheit macht die Flexibilität von Kubernetes aus. Die Implementierung kann komplex sein, aber Kubernetes bietet Ihnen Möglichkeiten, containerisierte Anwendungen zu Ihren eigenen Bedingungen auszuführen und agil auf Änderungen in Ihrem Unternehmen zu reagieren.

Warum Red Hat OpenShift für Kubernetes?

Red Hat ist ein führender und aktiver Entwickler von Open Source-Container-Technologien (darunter auch Kubernetes) und entwickelt wichtige Tools zum Sichern, Vereinfachen und automatischen Aktualisieren Ihrer Container-Infrastruktur. 

Red Hat® OpenShift® ist eine Kubernetes-Distribution für Unternehmen. Mit Red Hat OpenShift steht den Teams eine integrierte Einzelplattform für DevOps zur Verfügung. Mit Red Hat OpenShift können Entwickler zwischen verschiedenen Sprachen, Frameworks, Middleware und Datenbanken wählen und automatisierte Prozesse mit CI/CD entwickeln und bereitstellen, um die Produktivität weiter zu steigern. Ebenfalls verfügbar ist eine speziell für Container entwickelte Daten- und Storage-Service-Plattform: Red Hat OpenShift Container Storage.

Red Hat OpenShift kennenlernen