it-wiki:kubernetes:understanding_the_architecture
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
it-wiki:kubernetes:understanding_the_architecture [2025/04/29 07:58] – angelegt marko | it-wiki:kubernetes:understanding_the_architecture [2025/04/29 10:48] (aktuell) – marko | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Sieh Dir die folgende Grafik einmal genauer an (insbesondere die Pfeile und Linien). Wir werden gemeinsam untersuchen, | Sieh Dir die folgende Grafik einmal genauer an (insbesondere die Pfeile und Linien). Wir werden gemeinsam untersuchen, | ||
- | {{ : | + | |
+ | {{ : | ||
+ | |||
+ | Bevor du die Architektur verstehst, lass uns zunächst die Begriffe betrachten, die im Kubernetes-Umfeld weit verbreitet sind. | ||
+ | |||
+ | - **Node:** Ein Node (Knoten) in Kubernetes ist die Darstellung einer einzelnen Maschine in deinem Kubernetes-Cluster. In einer Produktionsumgebung ist ein Node höchstwahrscheinlich eine physische Maschine in einem Rechenzentrum oder eine virtuelle Maschine in der Cloud. | ||
+ | - **Pods:** Kubernetes führt Container nicht direkt aus. Stattdessen werden die Container in einer kugelförmigen Einheit namens " | ||
+ | |||
+ | * Innerhalb deines Nodes läuft der Pod. Innerhalb deines Pods laufen die Container. Und innerhalb deiner Container läuft deine Anwendung. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | **Cluster: | ||
+ | * Angenommen, du hast drei Nodes, die verwendet werden, um eine containerisierte Anwendung auszuführen. Die Gruppierung all dieser Nodes zu einer leistungsfähigeren Einheit ist das, was man als Cluster bezeichnet. | ||
+ | |||
+ | Lass uns versuchen, die Architektur von Kubernetes besser zu verstehen – also was „hinter den Kulissen“ passiert. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sieh dir das obige Bild genau an. Wir haben drei Nodes gruppiert (1 Control Plane & 2 Worker Nodes), was man zusammen als Kubernetes-Cluster bezeichnet. Du kannst so viele Nodes erstellen, wie du möchtest – je nach Anforderung der Anwendung. | ||
+ | |||
+ | In jedem Kubernetes-Cluster gibt es zwei Arten von Nodes: | ||
+ | |||
+ | - Einen oder mehrere **Control Plane Nodes** | ||
+ | - Einen oder mehrere **Worker Nodes** | ||
+ | |||
+ | Wenn du dir das oben ansiehst, erkennst du, dass jeder Node bestimmte Komponenten enthält. Der Control Plane Node hat Komponenten wie den API-Server, Scheduler usw., während die Worker Nodes Komponenten wie kubelet, kube-proxy usw. enthalten. Wir werden uns gleich die jeweilige Rolle jeder Komponente in einem Node anschauen. | ||
+ | |||
+ | Die Worker Nodes sind dafür zuständig, deine Anwendung auszuführen (du siehst ja, dass sich die Pods im Worker Node befinden), während der Control Plane Node für die Verwaltung deines Clusters zuständig ist: Cluster starten, Nodes hinzufügen, | ||
+ | |||
+ | Ohne einen Control Plane Node kann dein Kubernetes-Cluster nicht funktionieren. Es ist also entscheidend, | ||
+ | |||
+ | Lass uns die Funktionsweise jeder Control-Plane-Komponente genauer anschauen: | ||
+ | |||
+ | - **API-Server: | ||
+ | * Authentifizierung: | ||
+ | * Autorisierung: | ||
+ | * Admission-Control: | ||
+ | - **Scheduler: | ||
+ | - **Controller Manager:** Diese Komponente kümmert sich um die Einhaltung des gewünschten Zustands deines Kubernetes-Clusters durch sogenannte Controller oder Operatoren. Controller sind Prozesse, die in einer Dauerschleife laufen, und den tatsächlichen Zustand des Clusters mit dem gewünschten Zustand vergleichen. Aber wo wird der tatsächliche Zustand gespeichert? | ||
+ | |||
+ | **Key-Value-Datenbank (etcd< | ||
+ | |||
+ | * Eine Anfrage wird vom Client an den API-Server geschickt, um einen Pod zu starten. | ||
+ | * Der API-Server validiert die Benutzeridentität & Anfrage. | ||
+ | * Die Anfrage wird an den Scheduler weitergeleitet. | ||
+ | * Der Scheduler fragt beim API-Server aktuelle Cluster-Information | ||
+ | * Der API-Server ist die einzige Komponente, die Daten im etcd-Speicher lesen und schreiben kann. Keine andere Komponente kann direkt mit dem etcd-Store kommunizieren. | ||
+ | * Nachdem der API-Server die Informationen erhalten hat, informiert er den Scheduler. | ||
+ | * Basierend auf den Informationen, | ||
+ | |||
+ | Jetzt fragst Du mich vielleicht: „Heißt das, dass der Pod jetzt läuft? | ||
+ | |||
+ | Die Antwort ist: Nein. | ||
+ | |||
+ | Bis zu diesem Zeitpunkt wurde lediglich der richtige Node ausgewählt, | ||
+ | |||
+ | - **Cloud Controller Manager (CCM< | ||
+ | |||
+ | Schau Dir jetzt nochmal alle Komponenten der Control Plane in Ruhe an, bevor Du weitermachst. | ||
+ | |||
+ | Jetzt ist es an der Zeit, die Bestandteile eines Worker-Nodes besser zu verstehen: | ||
+ | |||
+ | Ein Worker-Node stellt die Umgebung bereit, in der eine containerisierte Anwendung ausgeführt wird. Die Komponenten, | ||
+ | * Kubelet | ||
+ | * kube-proxy | ||
+ | * Container-Runtime | ||
+ | * Addons oder DNS | ||
+ | |||
+ | - **Container-Runtime: | ||
+ | * CRI-O | ||
+ | * containerd | ||
+ | * Docker | ||
+ | * Mirantis Container Runtime {{ : | ||
+ | - **Kubelet: | ||
+ | |||
+ | Falls Du jetzt ein bisschen verwirrt bist, hier ist die Zusammenfassung der internen Funktionsweise der Kubernetes-Komponenten: | ||
+ | |||
+ | * Der Nutzer (also Du) sendet eine Anfrage an den API-Server, um ein Pod zu starten. \\ <code bash> | ||
+ | * Diese Anfrage wird jetzt vom API-Server validiert. | ||
+ | * Der API-Server leitet diese Anfrage an den Scheduler auf der Steuerungsebene (Control Plane) weiter. | ||
+ | * Im Gegenzug fordert der Scheduler clusterbezogene Informationen vom API-Server an, da der API-Server die einzige Komponente ist, die mit dem etcd-Store interagieren kann. | ||
+ | * Nachdem der API-Server diese Anfrage vom Scheduler erhalten hat, liest er die Daten aus dem etcd-Store und stellt sie dem Scheduler zur Verfügung. | ||
+ | * Der Scheduler weist daraufhin auf Grundlage der erhaltenen Informationen einem Node ein Pod zu und teilt diese Entscheidung dem API-Server mit. \\ „Hey API-Server, der Pod soll auf node-01 laufen.“ \\ – Scheduler | ||
+ | * Der API-Server weist dem Kubelet des entsprechenden Nodes die Aufgabe zu, der Pod zu starten. | ||
+ | * Nachdem der Kubelet des Nodes die Anweisung vom API-Server erhalten hat, interagiert er über den CRI-Shim mit der Container Runtime – und jetzt läuft der Pod auf einem bestimmten Node. | ||
+ | * Während der Pod läuft, überprüft der Controllermanager, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Klar! Hier ist die Übersetzung auf Deutsch in der Du-Form: | ||
+ | |||
+ | Jetzt fragst du dich vielleicht: Was ist die Aufgabe von kube-proxy und Add-ons? | ||
+ | |||
+ | **Kube-proxy** (läuft auf jedem Node) ist für die Netzwerkregeln im Cluster verantwortlich. Zum Beispiel: | ||
+ | |||
+ | * Kommunikation zwischen Containern innerhalb eines Pods | ||
+ | * Kommunikation zwischen Pods auf demselben Node und zwischen verschiedenen Nodes im Cluster | ||
+ | * Kommunikation zwischen Pods und Services im selben Namespace sowie über verschiedene Namespaces hinweg | ||
+ | * Externe-zu-Service-Kommunikation, | ||
+ | |||
+ | **Add-ons** sind Cluster-Funktionserweiterungen, | ||
+ | |||
+ | Zum Schluss: Schau dir die Pfeile im obersten Bild an und sag mir, ob du verstanden hast, worauf sie sich beziehen. | ||
+ | |||
+ | Wenn du bis hierhin gelesen hast – Herzlichen Glückwunsch! |
it-wiki/kubernetes/understanding_the_architecture.1745913500.txt.gz · Zuletzt geändert: 2025/04/29 07:58 von marko