Zurück zur Startseite

Kubernetes-Architektur erklärt mit Beispielen | Leitfaden

Dieser Artikel bietet eine umfassende Erklärung der Kubernetes-Architektur mit Beispielen, wobei die Komponenten der Steuerungsebene (API-Server, etcd, Scheduler, Controller-Manager) und die Elemente der Worker-Knoten (kubelet, kube-proxy, Container-Laufzeit) aufgeschlüsselt werden. Anhand eines praktischen Nginx-Bereitstellungsbeispiels werden die Interaktionen der Komponenten, Selbstheilung, Skalierung und rollierende Updates veranschaulicht, wodurch Kubernetes für Anfänger und Praktiker zugänglich wird.

Kubernetes-Architektur: Ein praktischer Beispiel-Leitfaden
Advertisement 728x90

Kubernetes-Architektur anhand praktischer Beispiele erklärt

Kubernetes hat sich zum Industriestandard für Container-Orchestrierung entwickelt, doch seine komplexe Architektur schreckt Einsteiger oft ab. Dieser Leitfaden bietet eine Kubernetes-Architektur anhand von Beispielen erklärt, die jede Komponente entmystifiziert und zeigt, wie sie zusammenarbeiten, um die Bereitstellung, Skalierung und Verwaltung von Anwendungen in Produktionsumgebungen zu automatisieren.

Was Sie lernen werden

Am Ende dieses Leitfadens verstehen Sie, wie die Komponenten eines Kubernetes-Clusters interagieren, um containerisierte Anwendungen zuverlässig auszuführen, und Sie können die Rolle jeder Komponente der Steuerungsebene und der Worker-Knoten identifizieren. Sie werden in der Lage sein, den gesamten Anfragefluss – von der Übermittlung einer Bereitstellung durch einen Benutzer bis zur Verfügbarkeit der Anwendung – anhand eines konkreten Beispiels zu erklären.

Wie es funktioniert: Eine geschichtete Architektur mit einer Analogie aus der Praxis

Stellen Sie sich einen Kubernetes-Cluster als ein Versandunternehmen vor. Die Steuerungsebene ist die Unternehmenszentrale, in der Manager strategische Entscheidungen treffen. Die Worker-Knoten sind die Frachtschiffe, die die Container physisch transportieren. Jeder Container auf einem Schiff ist ein Pod, die kleinste bereitstellbare Einheit in Kubernetes.

Google AdInline article slot

Die Steuerungsebene: Das Gehirn des Clusters

Die Steuerungsebene verwaltet den Zustand des Clusters und orchestriert alle Aktivitäten. Sie besteht aus mehreren kritischen Komponenten:

kube-apiserver fungiert als Empfang – die gesamte Kommunikation mit dem Cluster läuft über diese Komponente. Wenn Sie kubectl-Befehle ausführen, authentifiziert der API-Server Ihre Anfrage, validiert sie und aktualisiert den Cluster-Zustand, der in etcd gespeichert ist, einem verteilten Schlüssel-Wert-Speicher, der als Kubernetes' Backend-Speicher für alle Cluster-Daten dient.

Der kube-scheduler überwacht neu erstellte Pods, denen noch kein Knoten zugewiesen wurde. Er wählt intelligent den am besten geeigneten Worker-Knoten basierend auf Ressourcenanforderungen, Einschränkungen und Richtlinien aus. Wenn Sie beispielsweise einen Pod anfordern, der eine GPU benötigt, berücksichtigt der Scheduler nur Knoten mit GPU-Ressourcen.

Google AdInline article slot

Der kube-controller-manager führt eine Reihe von Controllern aus, die den Cluster-Zustand kontinuierlich überwachen und Korrekturen vornehmen. Der Node-Controller erkennt, wenn Knoten ausfallen, der Job-Controller verwaltet einmalige Aufgaben und der EndpointSlice-Controller verbindet Services mit Pods.

Worker-Knoten: Wo Anwendungen ausgeführt werden

Jeder Worker-Knoten führt drei wesentliche Komponenten aus:

kubelet ist der primäre Knoten-Agent, der sicherstellt, dass Container wie angegeben in einem Pod ausgeführt werden. Es erhält Pod-Spezifikationen vom API-Server und verwaltet die Container-Laufzeitumgebung, um diese Container zu starten und zu überwachen.

Google AdInline article slot

kube-proxy verwaltet Netzwerkregeln, die die Kommunikation zu Pods von innerhalb oder außerhalb des Clusters ermöglichen. Es implementiert das Service-Konzept, indem es Datenverkehr mithilfe von Paketfilterregeln an die richtigen Pods weiterleitet.

Die Container-Laufzeitumgebung (wie containerd oder CRI-O) ist die Software, die für die tatsächliche Ausführung der Container verantwortlich ist.

Praktisches Beispiel: Bereitstellung einer Webanwendung

Lassen Sie uns nachverfolgen, was passiert, wenn Sie einen Nginx-Webserver bereitstellen:

  1. Sie schreiben eine Deployment-YAML-Datei, die 3 Replikate des Nginx-Containers angibt.
  2. Sie übermitteln sie mit kubectl apply -f deployment.yaml. Die Anfrage erreicht den API-Server.
  3. Der API-Server authentifiziert Sie und speichert den gewünschten Zustand in etcd.
  4. Der Scheduler erkennt nicht zugewiesene Pods und weist sie Worker-Knoten mit verfügbarer Kapazität zu.
  5. Auf jedem zugewiesenen Worker-Knoten empfängt das kubelet die Pod-Spezifikation und weist die Container-Laufzeitumgebung an, das Nginx-Image zu pullen und den Container zu starten.
  6. Der Controller-Manager überprüft kontinuierlich, ob 3 Replikate ausgeführt werden, und wenn ein Pod ausfällt, erstellt er einen Ersatz.
  7. Ein Service wird erstellt, um die Anwendung verfügbar zu machen, und kube-proxy konfiguriert Netzwerkregeln, sodass Datenverkehr die Pods erreichen kann.

Warum es wichtig ist

Die Architektur von Kubernetes ermöglicht Fähigkeiten, die grundlegend verändern, wie Organisationen Software bereitstellen und verwalten:

Selbstheilung: Wenn ein Container abstürzt oder ein Knoten nicht mehr reagiert, ersetzen Controller automatisch die ausgefallenen Pods auf gesunden Knoten, wodurch Ausfallzeiten minimiert werden.

Horizontale Skalierung: Der Horizontal Pod Autoscaler kann die Anzahl der Pod-Replikate basierend auf CPU-Auslastung oder benutzerdefinierten Metriken automatisch anpassen, sodass Anwendungen Verkehrsspitzen ohne manuelles Eingreifen bewältigen können.

Rollierende Updates und Rollbacks: Deployments ermöglichen Updates ohne Ausfallzeiten. Sie können alte Pods schrittweise durch neue Versionen ersetzen und bei Problemen sofort zurückrollen.

Ressourceneffizienz: Der Scheduler optimiert die Pod-Platzierung auf Knoten, verbessert die Ressourcennutzung und senkt die Infrastrukturkosten.

In Zahlen

Metrik Details
Erstveröffentlichung Kubernetes 1.0 veröffentlicht am 21. Juli 2015
Steuerungsebenen-Knoten Produktionscluster laufen typischerweise mit 3 Steuerungsebenen-Knoten für Hochverfügbarkeit
Worker-Knoten Große Cluster können über 1.000 Worker-Knoten umfassen
Standard-Pods pro Knoten Bis zu 110 standardmäßig (konfigurierbar)
API-Anfragelatenz 99. Perzentil typischerweise unter 1 Sekunde in gut abgestimmten Clustern
etcd Kann bis zu ~10.000 Schreibvorgänge pro Sekunde auf NVMe-Speicher verarbeiten

Häufige Mythen vs. Fakten

Mythos Fakt
"Kubernetes führt Container direkt auf Knoten aus." Kubernetes führt Container nie direkt aus – sie laufen immer innerhalb von Pods, die die kleinsten bereitstellbaren Einheiten sind, die Netzwerk und Speicher umfassen.
"Der API-Server ist ein Single Point of Failure." kube-apiserver ist darauf ausgelegt, horizontal zu skalieren, indem mehrere Instanzen mit Lastverteilung bereitgestellt werden.
"Alle Kubernetes-Cluster müssen kube-proxy ausführen." Netzwerk-Plugins können ihr eigenes Service-Proxying implementieren, wodurch kube-proxy in diesen Fällen optional wird.
"Pods sollten immer nur einen Container enthalten." Pods können mehrere eng gekoppelte Container enthalten, die Netzwerk und Speicher gemeinsam nutzen, wie z. B. einen Webserver und einen Logging-Container.
"etcd-Daten sind für den Cluster-Betrieb nicht kritisch." etcd ist der Backend-Speicher für alle Cluster-Daten, und Sie müssen einen Backup-Plan dafür haben.

Was Sie mit diesem Wissen tun sollten

Um effektiv mit der Kubernetes-Architektur zu arbeiten:

  1. Beginnen Sie mit verwaltetem Kubernetes, wenn Sie neu sind – Dienste wie GKE, EKS oder AKS abstrahieren die Verwaltung der Steuerungsebene, sodass Sie sich auf Anwendungen konzentrieren können.
  2. Lernen Sie, YAML-Manifeste für Kernressourcen zu lesen: Pods, Deployments, Services und ConfigMaps. Dies sind die grundlegenden Bausteine, die Sie täglich verwenden werden.
  3. Verwenden Sie kubectl's describe- und logs-Befehle, um Probleme zu beheben – das Verständnis der Kommunikation zwischen Komponenten hilft Ihnen, Probleme schneller zu diagnostizieren.
  4. Geben Sie immer Ressourcenanforderungen und -grenzen in Ihren Deployment-Manifesten an. Dies hilft dem Scheduler, optimale Platzierungsentscheidungen zu treffen und verhindert Ressourcenmangel.
  5. Erkunden Sie Netzwerkrichtlinien, um die Kommunikation zwischen Pods zu sichern, sobald Sie die grundlegende Architektur verstanden haben.

Häufig gestellte Fragen

Was ist der Unterschied zwischen einem Deployment und einem Service? Ein Deployment verwaltet den Lebenszyklus von Pod-Replikaten – es stellt sicher, dass eine bestimmte Anzahl identischer Pods ausgeführt wird, und behandelt Updates und Rollbacks. Ein Service bietet einen stabilen Netzwerkendpunkt, um auf diese Pods zuzugreifen, die flüchtig sind und jederzeit ersetzt werden können.

Warum benötigt Kubernetes etcd? etcd dient als primärer Datenspeicher von Kubernetes und speichert konsistent und dauerhaft alle Cluster-Zustandsinformationen, einschließlich der laufenden Pods, vorhandenen Services und Konfigurationsdaten. Ohne etcd hat der Cluster keine "Quelle der Wahrheit" über seinen gewünschten und tatsächlichen Zustand.

Was passiert, wenn ein Worker-Knoten ausfällt? Der Node-Controller erkennt die Nichtverfügbarkeit des Knotens (typischerweise nach einer Timeout-Periode). Der Scheduler plant dann alle Pods, die auf dem ausgefallenen Knoten ausgeführt wurden, auf andere gesunde Knoten um und erhält so die gewünschte Anzahl von Replikaten aufrecht.

Wie leitet ein Service Datenverkehr an Pods weiter? Ein Service verwaltet eine Reihe von Endpunkten – die IP-Adressen der Pods, die seinem Label-Selektor entsprechen. kube-proxy auf jedem Knoten programmiert Netzwerkregeln (iptables oder IPVS), die Datenverkehr, der für die virtuelle IP des Services bestimmt ist, an diese Endpunkte umleiten und so eine Lastverteilung über die Pods hinweg bereitstellen.

Was ist der Unterschied zwischen einem Job und einem CronJob? Ein Job erstellt einen oder mehrere Pods und stellt sicher, dass sie erfolgreich beendet werden – er wird für einmalige Aufgaben wie das Ausführen einer Datenbanksicherung verwendet. Ein CronJob erstellt Jobs nach einem wiederkehrenden Zeitplan, nützlich für regelmäßige Wartungsaufgaben wie die tägliche Log-Bereinigung.

Quellen

  • Kubernetes Offizielle Dokumentation – Cluster-Architektur
  • SLAC National Accelerator Laboratory Kubernetes Schulungsdokumentation
  • KodeKloud Kubernetes Einführungsnotizen
  • LabEx Kubernetes Tutorials und Leitfäden
  • Umfassender Leitfaden zu Kubernetes (GitHub)

— Editorial Team

Advertisement 728x90

Weiterlesen