Anmerkung des Übersetzers.: Der Autor des Originalmaterials ist Henning Jacobs von Zalando. Er hat eine neue Web-Oberfläche für die Arbeit mit Kubernetes erstellt, die als „kubectl für das Web“ positioniert wird. Warum das neue Open Source-Projekt entstanden ist und welche Kriterien die bestehenden Lösungen nicht erfüllten, lesen Sie in seinem Artikel.

In dieser Veröffentlichung betrachte ich verschiedene Open Source-Weboberflächen für Kubernetes, formuliere meine Anforderungen an eine universelle Benutzeroberfläche und erkläre, warum ich — eine Schnittstelle, die darauf abzielt, die Unterstützung und Fehlersuche in mehreren Clustern zu erleichtern.
Anwendungsfälle
Bei Zalando bedienen wir eine große Anzahl von Kubernetes-Nutzern (über 900) und Clustern (über 100). Es gibt einige typische Anwendungsfälle, in denen ein spezielles Web-Tool sehr hilfreich wäre:
- Kommunikation mit Kollegen im Support;
- Reaktion auf Vorfälle und Untersuchung ihrer Ursachen.
Support
Nach meiner Erfahrung sieht die Kommunikation im Support häufig folgendermaßen aus:
— Helfen Sie, unser Dienst XYZ ist nicht erreichbar!
— Was sehen Sie, wenn Sie kubectl describe ingress ...?
oder etwas Ähnliches für CRDs ausführen:
— Ich habe ein Problem mit dem Identifizierungsdienst...
— Was gibt das Kommando kubectl describe platformcredentialsset ...?
Diese Kommunikation reduziert sich normalerweise auf die Eingabe verschiedener Variationen des Befehls kubectl um das Problem festzustellen. Infolgedessen müssen beide Gesprächspartner ständig zwischen Terminal und Web-Chat wechseln, zudem sehen sie unterschiedliche Situationen.
Daher wäre es wünschenswert, dass das Web-Frontend zu Kubernetes Folgendes ermöglicht:
- Nutzer könnten Links austauschen und dasselbe beobachten;
- es würde helfen, menschliche Fehler im Support zu vermeiden: zum Beispiel, das falsche Cluster im Terminal anzuwählen, Tippfehler in CLI-Befehlen usw.;
- es würde ermöglichen, eigene Ansichten zu generieren, um sie mit Kollegen zu teilen, also zusätzliche Spalten für Labels hinzuzufügen und mehrere Ressourcentypen auf einer Seite darzustellen;
- im Idealfall sollte dieses Web-Tool es ermöglichen, „tiefe“ Links zu spezifischen YAML-Bereichen zu setzen (zum Beispiel auf einen fehlerhaften Parameter, der Abstürze verursacht).
Reaktion auf Vorfälle und Analyse
Die Reaktion auf Vorfälle in der Infrastruktur erfordert situative Wahrnehmung, die Fähigkeit, Auswirkungen zu bewerten, und die Suche nach Mustern in Clustern. Einige Beispiele aus der Praxis:
- für einen kritischen Produktionsdienst treten Probleme auf und Sie müssen alle Kubernetes-Ressourcen nach Namen in allen Clustern finden, um Störungen zu beheben;
- Knoten beginnen beim Skalieren auszufallen, und Sie müssen alle Pods mit dem Status "Pending" in allen Clustern finden, um das Ausmaß des Problems abzuschätzen;
- Einzelne Benutzer berichten von Problemen mit einem DaemonSet, das in allen Clustern bereitgestellt ist, und es muss geklärt werden, ob das Problem von allgemeiner Natur ist..
Meine Standardlösung in solchen Fällen ist etwas in der Art von for i in $clusters; do kubectl ...; done.Offensichtlich kann ein Werkzeug entwickelt werden, das ähnliche Möglichkeiten bietet.
Die bestehenden Web-Oberflächen für Kubernetes
Die Open Source-Welt der Web-Oberflächen für Kubernetes ist nicht besonders groß*, daher habe ich versucht, zusätzliche Informationen zu sammeln mithilfe von :

* Meine Erklärung für die begrenzte Anzahl von Web-Oberflächen für Kubernetes: Cloud-Dienste und Kubernetes-Anbieter bieten in der Regel eigene Frontends an, daher ist der Markt für "gute" kostenlose Kubernetes UI relativ klein.
Durch einen Tweet habe ich von , und erfahren. Lassen Sie uns einen Blick darauf werfen und andere bestehende Open Source-Lösungen erkunden, um zu verstehen, was sie bieten.
K8Dash
"K8Dash ist der einfachste Weg, ein Kubernetes-Cluster zu verwalten."

Sieht gut aus und fühlt sich schnell an, hat aber einige Nachteile für die oben genannten Anwendungsfälle:
- Funktioniert nur innerhalb eines Clusters.
- Sortierung und Filterung sind möglich, aber haben keine dauerhaften Links.
- Es fehlt die Unterstützung für Custom Resource Definitions (CRDs).
Kubernator
"Kubernator ist eine alternative UI für Kubernetes. Im Gegensatz zum hochgradig abstrahierten Kubernetes Dashboard bietet es eine detaillierte Kontrolle und einen ausgezeichneten Überblick über alle Objekte im Cluster mit der Möglichkeit, neue zu erstellen, sie zu bearbeiten und Konflikte zu lösen. Als rein clientseitige Anwendung (wie kubectl) benötigt es keine Backend-Dienste außer dem API-Server von Kubernetes und berücksichtigt dabei die Zugriffsregeln für das Cluster."

Das ist eine ziemlich treffende Beschreibung Leider fehlt ihm einige Funktionen:
- Betreut nur einen Cluster.
- Es gibt keinen Listenansichtsmodus (d. h. man kann nicht alle Pods mit dem Status „Pending“ anzeigen).
Kubernetes Dashboard
„Das Kubernetes Dashboard ist eine universelle Weboberfläche für Kubernetes-Cluster. Es ermöglicht Benutzern, Anwendungen, die im Cluster laufen, zu verwalten und Probleme zu beheben sowie das Cluster selbst zu verwalten.“

Leider, hilft nicht besonders bei meinen Aktivitäten zur Unterstützung und Reaktion auf Vorfälle, da es:
- keine permanenten Links gibt, zum Beispiel wenn ich Ressourcen filtere oder die Sortierreihenfolge ändere;
- es keine einfache Möglichkeit gibt, nach Status zu filtern — zum Beispiel alle Pods mit dem Status „Pending“ anzuzeigen;
- nur ein Cluster unterstützt wird;
- CRDs werden nicht unterstützt (diese Funktion ist in Entwicklung);
- es gibt keine benutzerdefinierten Spalten (zum Beispiel Spalten mit Labels wie
kubectl -L).
Kubernetes Operational View (kube-ops-view)
„Ein Systemmonitor für Kubernetes-Cluster-Räume.“

Der verfolgt einen völlig anderen Ansatz: Dieses Werkzeug zeigt nur die Knoten des Clusters und Pods mithilfe von WebGL an, ohne jegliche textlichen Details zu den Objekten. Es eignet sich hervorragend für einen schnellen Überblick über den Zustand des Clusters („Fallen Pods?“)*, ist jedoch nicht für die oben beschriebenen Anwendungsfälle in der Unterstützung und Reaktion auf Vorfälle geeignet.
* Anmerkung des Übersetzers.: In diesem Sinne könnte Sie auch unser Plugin interessieren , über das wir ausführlicher in .
Kubernetes Resource Report (kube-resource-report)
„Sammeln Sie Informationen zu den Ressourcenanforderungen von Pods und dem Kubernetes-Cluster, vergleichen Sie diese mit dem Ressourcenverbrauch und generieren Sie statische HTML“.

generiert statische HTML-Berichte über den Ressourcenverbrauch und die Kostenverteilung auf Teams/Anwendungen in Clustern. Der Bericht ist in gewissem Maße nützlich für die Unterstützung und Reaktion auf Vorfälle, da er es erleichtert, den Cluster zu finden, in dem eine Anwendung bereitgestellt wurde.
Anmerkung des Übersetzers.: Bei der Ansicht von Informationen zur Ressourcenverteilung und deren Kosten bei Cloud-Anbietern kann auch der Dienst und das Werkzeug , dessen Überblick wir .
Octant
„Eine erweiterbare Webplattform für Entwickler, die ein besseres Verständnis der Komplexität von Kubernetes-Clustern bieten soll.“

, erstellt in VMware, ist ein neues Produkt, von dem ich erst kürzlich erfahren habe. Damit lässt sich der Cluster auf einem lokalen Rechner bequem untersuchen (es gibt sogar Visualisierungen), jedoch behandelt es das Thema Unterstützung und Reaktion auf Vorfälle nur in begrenztem Maße. Nachteile von Octant:
- Keine Suche in Clustern.
- Funktioniert nur auf dem lokalen Rechner (nicht im Cluster bereitstellbar).
- Objekte können nicht sortiert/filtert werden (nur Label-Selector wird unterstützt).
- Benutzerdefinierte Spalten können nicht festgelegt werden.
- Objektelisten können nicht nach Namensräumen ausgegeben werden.
Ich hatte auch Probleme mit der Stabilität von Octant mit Zalando-Clustern: bei bestimmten CRD .
Ich präsentiere Kubernetes Web View
„kubectl für das Web“.

Nachdem ich die verfügbaren Benutzeroberflächen für Kubernetes analysiert habe, entschied ich mich, eine neue zu erstellen: . Denn im Grunde benötige ich nur die gesamte Macht kubectl im Web, und zwar:
- Zugänglichkeit aller (read-only) Operationen, bei denen Benutzer kubectl bevorzugen;
- alle URLs müssen dauerhaft sein und die Seite im Original darstellen, damit Kollegen sie austauschen und in anderen Tools verwenden können;
- Unterstützung aller Kubernetes-Objekte, um Probleme jeglicher Art zu lösen;
- Ressourcenlisten müssen herunterladbar sein für die weitere Bearbeitung (in Tabellenkalkulationen, CLI-Tools wie
grep) und Speicherung (zum Beispiel für Postmortems); - Unterstützung für die Filterung von Ressourcen anhand von Labels (analog zu
kubectl get .. -l); - die Möglichkeit, kombinierte Listen verschiedener Ressourcentypen zu erstellen (analog zu
kubectl get all) um ein gesamtes Betriebsgeschehen unter Kollegen darzustellen (zum Beispiel im Rahmen der Reaktion auf Vorfälle); - die Möglichkeit, anpassbare „intelligente“ Deep-Links zu anderen Tools hinzuzufügen, wie Dashboards, Logger, Anwendungsregistries usw. zur Erleichterung der Fehlersuche und Reaktion auf Vorfälle;
- das Frontend sollte so einfach wie möglich sein (reines HTML), um zufällige Probleme, wie hängenden JavaScript, zu vermeiden;
- Unterstützung mehrerer Cluster zur Erleichterung der Interaktion bei Remote-Beratung (zum Beispiel, um sich nur eine URL merken zu müssen);
- sofern möglich sollte die situative Analyse vereinfacht werden (zum Beispiel durch Links zum Herunterladen von Ressourcen über alle Cluster/Namensräume);
- zusätzliche Möglichkeiten zur Erstellung flexibler Links und zur Hervorhebung von Textinformationen, zum Beispiel um Kollegen auf einen bestimmten Abschnitt in der Beschreibung einer Ressource (eine Zeile im YAML) hinzuweisen;
- die Möglichkeit, sich an die Anforderungen eines bestimmten Kunden anzupassen, beispielsweise durch die Erstellung spezieller Anzeigevorlagen für CRD, eigene Tabellenansichten und die Anpassung von CSS-Stilen;
- Werkzeuge für eine weitergehende Untersuchung in der Befehlszeile (zum Beispiel durch vollständige Befehle
kubectl, die bereit zum Kopieren sind);
Außer den in Kubernetes Web View zu behandelnden Aufgaben (nicht Ziele) bleiben:
- Abstraktion von Kubernetes-Objekten;
- Anwendungsmanagement (zum Beispiel Verwaltung von Deployments, Helm-Charts usw.);
- Schreiboperationen (sollten über sichere CI/CD- und/oder GitOps-Werkzeuge durchgeführt werden);
- eine ansprechende Benutzeroberfläche (JavaScript, Themes usw.);
- Visualisierungen (siehe );
- Kostenanalyse (siehe ).
Wie hilft Kubernetes Web View bei der Unterstützung und Reaktion auf Vorfälle?
Support
- Alle Links sind dauerhaft, was den Informationsaustausch mit Kollegen erleichtert.
- Es ist möglich, eigene Ansichten zu erstellen, zum Beispiel, um alle Deployments und Pods mit einem bestimmten Label in zwei bestimmten Clustern anzuzeigen (mehrere Clusternamen und Ressourcentypen können in den Links durch Kommas getrennt angegeben werden).
- Man kann auf bestimmte Zeilen in der YAML-Datei des Objekts verweisen, um potenzielle Probleme in der Objektdefinition zu kennzeichnen.

Suche in Clustern in Kubernetes Web View
Reaktion auf Vorfälle
- Globale Suche (global search) ermöglicht das Suchen von Objekten in allen Clustern.
- Listenansichten können alle Objekte mit einem bestimmten Zustand/Spalte in allen Clustern anzeigen (zum Beispiel, wenn wir alle Pods mit dem Status „Pending“ finden müssen).
- Objektlisten können heruntergeladen werden im Tabulator-getrennten Format (TSV) zur weiteren Analyse.
- ermöglichen den Wechsel zu entsprechenden Dashboards und anderen Werkzeugen.

Kubernetes Web View: Liste der Pods mit dem Status „Pending“ in allen Clustern
Wenn Sie Kubernetes Web View ausprobieren möchten, empfehle ich, sich die oder die .
Natürlich könnte die Benutzeroberfläche besser sein, aber vorerst ist die Kubernetes-Webansicht ein Werkzeug für "fortgeschrittene Nutzer", die es nicht scheuen, die URL-Pfade manuell zu manipulieren, wenn nötig. Wenn Sie Anmerkungen/Ergänzungen/Wünsche haben, kontaktieren Sie bitte !
Dieser Artikel ist eine kurze Erzählung über die Voraussetzungen, die zur Schaffung der Kubernetes-Webansicht geführt haben. Weitere werden folgen! (Anmerkung des Übersetzers.: Diese sind zu erwarten im .)
P.S. vom Übersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «».
Quelle: habr.com
