Hinweis.: Der Autor des Originals ist Henning Jacobs von Zalando. Er hat ein neues Web-Interface für die Arbeit mit Kubernetes geschaffen, das als «kubectl für das Web» positioniert wird. Warum dieses neue Open Source-Projekt entstanden ist und welche bestehenden Lösungen nicht den Anforderungen entsprachen – erfahren Sie in seinem Artikel.

In diesem Artikel beleuchte ich verschiedene Open Source-Web-Interfaces für Kubernetes, stelle meine Anforderungen an eine universelle Benutzeroberfläche vor und erkläre, warum ich – eine Benutzeroberfläche entwickelt habe, die darauf abzielt, die Unterstützung und Fehlersuche in mehreren Clustern gleichzeitig zu erleichtern.
Anwendungsszenarien
Bei Zalando betreuen wir eine große Anzahl von Kubernetes-Nutzern (über 900) und Clustern (über 100). Es gibt einige typische Anwendungsfälle, in denen ein spezialisiertes Web-Tool sehr nützlich wäre:
- Kommunikation mit Kollegen im Support;
- Reagieren auf Vorfälle und deren Ursachen recherchieren.
Support
Nach meiner Erfahrung sieht die Kommunikation im Support oft so aus:
– Helfen Sie mir, unser Service XYZ ist nicht verfügbar!
– Was sehen Sie, wenn Sie kubectl describe ingress ...?
ausführen? Oder etwas Ähnliches für CRD:
— Ich habe ein Problem mit dem Identifizierungsdienst...
— Was gibt der Befehl aus kubectl describe platformcredentialsset ...?
Solche Gespräche beschränken sich meist auf die Eingabe verschiedener Variationen des Befehls kubectl um das Problem zu identifizieren. In der Folge müssen beide Parteien ständig zwischen dem Terminal und dem Web-Chat wechseln und sehen unterschiedliche Situationen.
Daher wäre es wünschenswert, dass das Web-Frontend für Kubernetes Folgendes ermöglicht:
- Benutzer könnten Links austauschen und dasselbe sehen;
- es würde helfen, menschliche Fehler bei der Unterstützung zu vermeiden: zum Beispiel beim Einloggen in den falschen Cluster über die Kommandozeile, Tippfehler in den CLI-Befehlen usw.;
- es würde ermöglichen, eigene Ansichten zu generieren um sie Kollegen zu senden, das heißt, Spalten für Labels hinzuzufügen und verschiedene Ressourcentypen auf einer Seite anzuzeigen;
- Idealerweise sollte dieses Web-Tool „tiefe“ Links zu bestimmten Abschnitten von YAML setzen können (zum Beispiel auf einen fehlerhaften Parameter hinweisen, der Abstürze verursacht).
Reaktion auf Vorfälle und Analyse
Die Reaktion auf Vorfälle in der Infrastruktur erfordert situatives Bewusstsein, die Fähigkeit, Auswirkungen zu bewerten, und die Suche nach Mustern in Clustern. Einige Beispiele aus der Praxis:
- bei einem kritischen Produktionsservice treten Probleme auf, und Sie müssen alle Kubernetes-Ressourcen nach Namen in allen Clustern finden, um Störungen zu beheben;
- Knoten fallen beim Skalieren aus, und Sie müssen alle Pods mit dem Status "Pending" in allen Clustern finden, um das Ausmaß des Problems zu bewerten;
- einzelne Benutzer berichten von einem Problem mit einem DaemonSet, das in allen Clustern bereitgestellt wurde, und es muss festgestellt werden, ob das Problem von allgemeiner Natur ist..
Meine Standardlösung in solchen Fällen ist etwas wie for i in $clusters; do kubectl ...; done. Offensichtlich kann ein Tool entwickelt werden, das ähnliche Funktionen bietet.
Vorhandene Web-Interfaces für Kubernetes
Die Open Source-Welt der Web-Interfaces für Kubernetes ist nicht sehr groß*, also habe ich versucht, zusätzliche Informationen zu sammeln mit :

* Meine Erklärung der begrenzten Anzahl von Web-Interfaces für Kubernetes: Cloud-Services und Kubernetes-Anbieter bieten in der Regel eigene Frontends an, daher ist der Markt für „gute“ kostenlose Kubernetes-UIs vergleichsweise klein.
Durch einen Tweet erfuhr ich von , und . Lassen Sie uns einen Blick auf diese und andere vorhandene Open Source-Lösungen werfen und versuchen zu verstehen, was sie bieten.
K8Dash
„K8Dash ist der einfachste Weg, einen Kubernetes-Cluster zu verwalten.“

sieht gut aus und fühlt sich schnell an, hat jedoch eine Reihe von Nachteilen für die oben genannten Nutzungsszenarien:
- Funktioniert nur innerhalb eines Clusters.
- Sortieren und Filtern ist möglich, hat jedoch keine dauerhaften Links.
- Unterstützung für Custom Resource Definitions (CRDs) fehlt.
Kubernator
Kubernator ist eine alternative Benutzeroberfläche für Kubernetes. Im Gegensatz zum hochentwickelten Kubernetes Dashboard bietet es eine niedrigere Kontrolle und eine hervorragende Übersicht ü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 kein Backend außer dem API-Server von Kubernetes und berücksichtigt die Zugriffsregeln für das Cluster.

Das ist eine ziemlich genaue Beschreibung Leider fehlen ihm einige Funktionen:
- Es bedient nur einen Cluster.
- Es gibt keinen Listenansicht-Modus (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. Sie ermöglicht den Benutzern, Anwendungen im Cluster zu verwalten und zu beheben, sowie das Cluster selbst zu verwalten.

Leider, hilft mir nicht besonders bei meinen Unterstützungs- und Incident-Response-Aktivitäten, da es:
- keine permanenten Links gibt, zum Beispiel wenn ich Ressourcen filtere oder die Sortierreihenfolge ändere;
- Es gibt keinen einfachen Weg, nach Status zu filtern – beispielsweise alle Pods mit dem Status „Pending“ anzuzeigen;
- Es wird nur ein Cluster unterstützt;
- CRDs werden nicht unterstützt (diese Funktion ist in Entwicklung);
- Benutzerdefinierte Spalten werden nicht unterstützt (zum Beispiel Spalten mit Labels wie
kubectl -L).
Kubernetes Operationsansicht (kube-ops-view)
„Systemdashboard zur Überwachung des K8s Cluster Raums“.

U ein ganz anderer Ansatz: Dieses Tool zeigt lediglich die Knoten des Clusters und Pods mithilfe von WebGL an, ohne jegliche textuelle Details zu den Objekten. Es eignet sich hervorragend für einen operativen Überblick über den Zustand des Clusters („Fallen Pods?“)*, ist jedoch für die oben genannten Anwendungsfälle in der Unterstützung und Reaktion auf Vorfälle nicht geeignet.
* Hinweis.: In diesem Sinne könnte auch unser Plugin , über das wir ausführlicher in .
Kubernetes Ressourcenbericht (kube-resource-report)
„Sammeln Sie Informationen über die Ressourcenanforderungen von Pods und des Kubernetes Clusters, vergleichen Sie sie mit dem Ressourcenverbrauch und generieren Sie statisches HTML.“

generiert statische HTML-Berichte über die Ressourcennutzung und Kostenverteilung nach Teams/Anwendungen in Clustern. Der Bericht ist in einem gewissen Maße hilfreich für die Unterstützung und Reaktion auf Vorfälle, da er die schnelle Identifizierung des Clusters erleichtert, in dem die Anwendung bereitgestellt ist.
Hinweis.: Bei der Anzeige von Informationen zur Ressourcenzuteilung und ihren Kosten kann der Service und das Tool von Cloud-Anbietern ebenfalls hilfreich sein, , dessen Übersicht wir .
Octant
„Erweiterbare Webplattform für Entwickler, die ein besseres Verständnis der Komplexität von Kubernetes-Clustern bieten soll.“

, entwickelt von VMware – ein neues Produkt, von dem ich relativ neu erfahren habe. Es ermöglicht eine bequeme Untersuchung des Clusters auf einem lokalen Rechner (es gibt sogar Visualisierungen), behandelt jedoch die Problematik der Unterstützung und Reaktion auf Vorfälle nur in begrenztem Maße. Nachteile von Octant:
- Keine Cluster-Suche.
- Funktioniert nur auf dem lokalen Rechner (nicht im Cluster bereitstellbar).
- Objekte können nicht sortiert/filtriert werden (es wird nur ein Label-Selector unterstützt).
- Benutzerdefinierte Spalten können nicht festgelegt werden.
- Es ist nicht möglich, die Liste der Objekte nach Namensräumen auszugeben.
Ich hatte auch Probleme mit der Stabilität der Octant-App mit Zalando-Clusters: bei einigen CRDs .
Ich präsentiere Kubernetes Web View
»kubectl für das Web«.

Nach der Analyse der verfügbaren Schnittstellen für Kubernetes habe ich beschlossen, eine neue zu erstellen: . Schließlich benötige ich nur die gesamte Leistung kubectl im Web, nämlich:
- die Verfügbarkeit aller (read-only) Operationen, die Benutzer bevorzugen, um kubectl zu verwenden;
- alle URLs sollten dauerhaft sein und die Seite im Originalzustand darstellen, damit Kollegen sie austauschen und in anderen Tools verwenden können;
- Unterstützung aller Kubernetes-Objekte, was die Lösung von Problemen jeder Art ermöglicht;
- Ressourcenlisten sollten herunterladbar sein für die weitere Verarbeitung (in Tabellenkalkulationen, CLI-Tools wie
grep) und Speicherung (zum Beispiel für Postmortems); - Unterstützung der Filterung von Ressourcen nach Labels (analog zu
kubectl get .. -l); - die Möglichkeit, kombinierte Listen verschiedener Ressourcentypen zu erstellen (analog zu
kubectl get all) um ein übergreifendes operatives Bild unter Kollegen zu erfassen (zum Beispiel im Prozess der Incident-Reaktion); - die Möglichkeit, anpassbare „intelligente“ Deep Links zu anderen Tools hinzuzufügen, wie z. B. Dashboards, Logger, Anwendungsregister usw., um die Suche/Fehlerbehebung und Incident-Response zu erleichtern;
- das Frontend sollte so einfach wie möglich sein (reines HTML), um zufällige Probleme wie hängendes JavaScript zu vermeiden;
- Unterstützung mehrerer Cluster zur Vereinfachung der Interaktion bei Remote-Beratung (zum Beispiel um sich nur eine URL zu merken);
- Situationsanalysen sollten, wo möglich, vereinfacht werden (z. B. mit Links zum Herunterladen von Ressourcen über alle Cluster/Namensräume);
- zusätzliche Funktionen zur Erstellung flexibler Links und zur Hervorhebung von Textinformationen, um Kollegen auf einen bestimmten Abschnitt in der Ressourcenbeschreibung (eine Zeile in YAML) hinzuweisen;
- die Möglichkeit, sich an die Anforderungen eines bestimmten Kunden anzupassen, z. B. durch das Erstellen von speziellen Anzeigemustern für CRD, eigenen Tabellenansichten und das Ändern von CSS-Stilen;
- Hilfsmittel für eine weiterführende Untersuchung in der Kommandozeile (z. B. vollständige Befehle anzeigen)
kubectl, bereit zum Kopieren);
Außer den im Kubernetes Web View zu lösenden Aufgaben (Nichtziele) verbleiben:
- Abstraktion von Kubernetes-Objekten;
- Anwendungsmanagement (z.B. Verwaltung von Deployments, Helm-Charts usw.);
- Schreiboperationen (müssen über sichere CI/CD-Tools und/oder GitOps durchgeführt werden);
- schöne Oberfläche (JavaScript, Themen 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 Austausch von Informationen mit Kollegen erleichtert.
- Es können eigene Ansichten erstellt werden, beispielsweise 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).
- Es kann auf bestimmte Zeilen in einer YAML-Datei des Objekts verwiesen werden, um potenzielle Probleme in der Objektspezifikation aufzuzeigen.

Suche in Clustern im 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/Attribut in allen Clustern anzeigen (zum Beispiel müssen wir alle Pods mit dem Status „Pending“ finden).
- Objektlisten können heruntergeladen werden im Tabulator-separierten Werteformat (TSV) für die weitere Analyse.
- erlauben den Zugriff auf die entsprechenden Dashboards und andere Tools.

Kubernetes Web View: Liste der Pods mit dem Status „Pending“ in allen Clustern
Wenn Sie Kubernetes Web View ausprobieren möchten, empfehle ich, sich mit den oder einen Blick auf die .
Natürlich könnte die Benutzeroberfläche besser sein, aber derzeit ist Kubernetes Web View ein Tool für „fortgeschrittene Benutzer“, die nicht scheuen, die URL-Pfade manuell zu manipulieren, wenn nötig. Wenn Sie Anmerkungen, Ergänzungen oder Wünsche haben, kontaktieren Sie !
Dieser Artikel ist eine kurze Erzählung über die Hintergründe, die zur Erstellung von Kubernetes Web View geführt haben. Weitere werden folgen! (Hinweis.: Diese sind im .)
P.S. vom Übersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «».
Quelle: habr.com
