K8S | Kernprinzipanalyse

Den Prozess und die Prinzipien als Ganzes verstehen;

1. Hintergrund

In einer verteilten Architektur müssen viele Dienste verwaltet werden, sei es die Anzahl der Dienste oder die Aufteilung des Systems.

Aus Sicht der Servicefähigkeiten ist eine mehrschichtige Verwaltung und Kontrolle möglich, es gibt jedoch eine ganze Reihe von Serviceschichten, in denen die Häufigkeit von Änderungen und Aktualisierungen sehr gering ist, sodass die Wahrnehmung nicht offensichtlich ist.

30f410cf1177177e04d4549342473951.png

Nehmen Sie als Beispiel das System, an dessen Forschung und Entwicklung ich derzeit beteiligt bin.

Es gibt fast hundert von K8S verwaltete Dienste, von denen einige den Cluster-Modus verwenden. Selbst für ein System dieser Größenordnung ist es fast unmöglich, sich auf rein manuelle Bedienung und Wartung zu verlassen, und automatisierte Prozesse sind unerlässlich;

2. Kontinuierliche Integration

Ich habe zuvor einen vollständigen praktischen Fall zu diesem Thema geschrieben, der sich hauptsächlich auf die Nutzungsebene von Jenkins, Docker, K8S und anderen Komponenten konzentriert und den automatischen Verwaltungsprozess der Quellcode-Kompilierung, Verpackung, Image-Erstellung, Bereitstellung usw. zusammenfasst.

8f6e8724a09d64ea1380d592a27e78c7.png

Jenkins : Es handelt sich um eine sehr skalierbare Software zur Automatisierung verschiedener Aufgaben, einschließlich Erstellung, Test und Bereitstellung.

Docker : Als Open-Source-Anwendungscontainer-Engine kann es die Anwendung und ihre zugehörigen Abhängigkeiten verpacken, um eine Image-Image-Datei zu generieren. Es handelt sich um eine Standardbetriebsumgebung und bietet nachhaltige Bereitstellungsfunktionen.

Kubernetes : Als Open-Source-Container-Orchestrierungs-Engine wird es zur Automatisierung der Bereitstellung, Erweiterung und Verwaltung von Containeranwendungen verwendet;

3. K8S-Architektur

1. Kernkomponenten

d96cca9f5425fa823febf9606a9645ce.png

Control-Plane-Components: Control-Plane-Komponenten

Treffen Sie globale Entscheidungen im Cluster, wie zum Beispiel: Ressourcenplanung, Erkennung, Reaktion auf Vorfälle, kann auf jedem Knoten im Cluster ausgeführt werden;

  • API: Öffnen Sie die API von K8S, und die Komponenten interagieren über die API, die dem Front-End der Steuerungsebene entspricht.

  • Controllermanager: Führen Sie den Controller-Prozess aus, der logischerweise ein separater Prozess ist.

  • Scheduler: Überwachen Sie die neu erstellten Pods, die keinen laufenden Knoten angeben, und wählen Sie einen laufenden Knoten für den Pod aus.

  • etcd: eine Schlüsselwertdatenbank mit Konsistenz und hoher Verfügbarkeit als Hintergrundbibliothek zum Speichern von K8S-Daten;

Knoten: Knotenkomponente

Diese Komponente wird auf jedem Knoten ausgeführt und ist für die Wartung des laufenden Pods und die Bereitstellung der Kubernetes-Betriebsumgebung verantwortlich.

  • Kubelet: ein Agent, der auf jedem Knoten ausgeführt wird, um sicherzustellen, dass die Container im Pod ausgeführt werden;

  • kube-proxy: ein Netzwerk-Proxy, der auf jedem Knoten ausgeführt wird und die Netzwerkregeln auf dem Knoten verwaltet;

Container-Laufzeit: Container-Laufzeit

Die für die Ausführung von Containern verantwortliche Software unterstützt mehrere Container-Betriebsumgebungen wie Docker, Containerd und CRI-O sowie jede Schnittstelle, die die Kubernetes-CRI-Container-Betriebsumgebung implementiert;

2. Hierarchische Struktur

Unter Berücksichtigung der Gesamtfunktion kann der K8S-Cluster in drei Module unterteilt werden: Benutzer, Steuerungsebene und Knoten;

7b77882f9eabcc25f5640d036f1c1a3c.png

Benutzerseite : Unabhängig davon, ob es sich um die CLI-Befehlszeile oder die UI-Schnittstelle handelt, interagiert sie mit dem API-Server des Bedienfelds, und der API-Server interagiert mit anderen Komponenten und führt schließlich den entsprechenden Betriebsbefehl aus.

Steuerungsebene : Früher auch als Master bekannt. Zu den Kernkomponenten gehören API-Server, Controller, Scheduler usw., die hauptsächlich zum Planen des gesamten Clusters und zum Treffen globaler Entscheidungen verwendet werden.

Knoten : Die Arbeitslast wird ausgeführt, indem der Container in den Pod gestellt wird, der auf dem Knoten ausgeführt wird. Ein einfaches Verständnis der Arbeitslast sind verschiedene Anwendungen usw. Zu den Kernkomponenten auf dem Knoten gehören Pod, Kubelet, Container-Runtime, Kube-Proxy usw .;

3. Kernkompetenzen

Aus Sicht der Forschung und Entwicklung bietet K8S äußerst leistungsstarke Funktionen zur Verwaltung von Anwendungsdiensten.

3.1 Erkennung und Laden

Service Service kann Netzwerkanwendungen, die auf einem oder einer Gruppe von Pods ausgeführt werden, als Netzwerkdienste verfügbar machen, wobei normalerweise Tags zum Filtern von Ressourcenobjekten verwendet werden.

00b7acbb33642582365e7add8f5bb05b.png

3.2 Terminplanung

Der Scheduler verwendet den Überwachungsmechanismus, um Pods zu erkennen, die neu im Cluster erstellt wurden und noch nicht für den Knoten geplant wurden. Da die Container im Pod und der Pod selbst möglicherweise unterschiedliche Ressourcenanforderungen haben, platziert der Scheduler den Pod auf dem geeigneter Knoten;

fc04aa41b3654e3ecb2b72285c518e27.png

3.3 Automatische Skalierung

K8S kann den Ressourcenbedarf der Arbeitslast anhand von Indikatoren wie CPU-Auslastung, Antwortzeit, Speicherauslastung usw. überprüfen, um zu bestimmen, ob eine Skalierung durchgeführt werden soll. Die vertikale Dimension kann eine stärkere Ressourcenzuweisung sein, die horizontale Dimension kann es sein mehr Cluster-Bereitstellung;

6ce8ef14140a052b031ecebeb6794acf.png

K8S kann automatisch skaliert werden und verfügt über die Fähigkeit zur automatischen Reparatur. Wenn ein Knoten ausfällt oder ein Anwendungsdienst abnormal ist, wird dies überprüft und der Knoten kann migriert oder neu gestartet werden;

4. Anwendungsfälle

1. Dienstbereitstellung

In den vorherigen praktischen Fällen wurde die Bereitstellungsaktion mithilfe der CLI-Befehlszeile und Skriptdateien abgeschlossen, und der gesamte Prozess umfasste die Zusammenarbeit mehrerer Komponenten des Clusters, mehrere Kommunikationen und Planungen;

kubectl create -f pod.yaml

efa9d50d455ddb671710c800fe7ba362.png

2. Interaktionsprozess

f329e8c3a8bdde4420f49ef5de360968.png

[1] Die CLI-Befehlszeile und die UI-Schnittstelle interagieren über die APIserver-Schnittstelle mit den internen Komponenten des Clusters, z. B. den oben genannten Pod-Bereitstellungsvorgang.

[2] Nachdem der API-Server die Anforderung empfangen hat, schreibt er das Objekt im serialisierten Zustand in etcd, um den Speichervorgang abzuschließen.

[3] Der Scheduler erkennt Pods, die im Cluster neu erstellt werden und noch nicht über den Watch-Mechanismus für den Knoten geplant wurden.

[4] Suchen Sie alle planbaren Knoten eines Pods im Cluster, bewerten Sie diese planbaren Knoten, wählen Sie den Knoten mit der höchsten Punktzahl aus, um den Pod auszuführen, und dann benachrichtigt der Scheduler den APIserver über die Planungsentscheidung;

[5] Nachdem der APIserver die Informationsspeicherung abgeschlossen hat, benachrichtigt er Kubelet über den entsprechenden Knoten.

[6] Kubelet arbeitet auf Basis von PodSpec, um sicherzustellen, dass die in diesen PodSpecs beschriebenen Container ausgeführt werden und in gutem Zustand sind. Jede PodSpec ist ein YAML- oder JSON-Objekt, das einen Pod beschreibt;

[7] Pod ist die kleinste einsetzbare Recheneinheit, die in Kubernetes erstellt und verwaltet werden kann, einschließlich eines oder mehrerer Container;

Je suppose que tu aimes

Origine blog.csdn.net/g6U8W7p06dCO99fQ3/article/details/131297663
conseillé
Classement