Hinweis perev. : Der Autor des Originalmaterials ist Henning Jacobs von Zalando. Er erstellte eine neue Weboberfläche für die Arbeit mit Kubernetes, die als "kubectl for the web" positioniert ist. Warum das neue Open Source-Projekt erschien und welche Kriterien die vorhandenen Lösungen nicht erfüllten, lesen Sie den Artikel.
In dieser Veröffentlichung beschäftige ich mich mit den verschiedenen Open-Source-Weboberflächen von Kubernetes, stelle meine Anforderungen an eine universelle Benutzeroberfläche vor und erkläre, warum ich
Kubernetes Web View entwickelt habe , eine Schnittstelle, die die gleichzeitige Unterstützung und Fehlerbehebung mehrerer Cluster erleichtert.
Anwendungsfälle
Bei Zalando bedienen wir eine große Anzahl von Kubernetes (900+) und Cluster (100+) Benutzern. Es gibt einige typische Anwendungsfälle, in denen die Hilfe eines speziellen Web-Tools sehr nützlich wäre:
- Kommunikation mit unterstützenden Kollegen;
- Reaktion auf Vorfälle und Untersuchung ihrer Ursachen.
Unterstützung
Nach meiner Erfahrung sieht die Kommunikation innerhalb eines Support-Frameworks oft so aus:
- Hilfe, unser XYZ-Service ist nicht verfügbar!
- Was sehen Sie, wenn Sie kubectl describe ingress ...
?Oder ähnliches für CRD:
- Ich habe ein Problem mit dem Identifikationsdienst ...
- Und was kubectl describe platformcredentialsset ...
?Eine solche Kommunikation
kubectl
normalerweise darauf hinaus, verschiedene Variationen des
kubectl
, um das Problem zu beheben. Infolgedessen sind beide Seiten des Gesprächs gezwungen, ständig zwischen Terminal und Web-Chat zu wechseln, und beobachten eine andere Situation.
Daher möchte ich, dass das Kubernetes-Web-Frontend Folgendes zulässt:
- Benutzer können Links austauschen und dasselbe beobachten.
- Es würde helfen, menschliche Fehler bei der Unterstützung zu vermeiden : z. B. Eingabe des falschen Clusters in der Befehlszeile, Tippfehler in CLI-Befehlen usw.
- Sie können Ihre eigenen Ansichten für das Senden an Kollegen generieren , dh Beschriftungsspalten hinzufügen und viele Arten von Ressourcen auf einer Seite anzeigen.
- Idealerweise sollten Sie mit diesem webbasierten Tool Deep Links zu bestimmten Abschnitten von YAML einfügen können (z. B. auf einen ungültigen Parameter verweisen, der Abstürze verursacht).
Reaktion und Analyse von Vorfällen
Die Reaktion auf Vorfälle in der Infrastruktur erfordert Situationsbewusstsein, die Fähigkeit, die Auswirkungen zu bewerten und nach Mustern in Clustern zu suchen. Einige Beispiele aus dem wirklichen Leben:
- Der kritische Produktionsdienst hat Probleme, und Sie müssen alle Kubernetes-Ressourcen in allen Clustern nach Namen suchen , um die Probleme zu beheben.
- Knoten beginnen beim Skalieren zu fallen, und Sie müssen alle Pods mit dem Status "Ausstehend" in allen Clustern finden , um das Ausmaß des Problems beurteilen zu können.
- Einzelne Benutzer melden ein Problem mit DaemonSet, das in allen Clustern bereitgestellt wird, und es muss herausgefunden werden, ob das Problem vollständig ist .
Meine Standardlösung in solchen Fällen ist so etwas wie
for i in $clusters; do kubectl ...; done
for i in $clusters; do kubectl ...; done
for i in $clusters; do kubectl ...; done
. Natürlich können Sie ein Tool entwickeln, das ähnliche Funktionen bietet.
Bestehende Kubernetes-Webschnittstellen
Die Open-Source-Welt der Kubernetes-Weboberflächen ist nicht zu groß *, daher habe ich versucht, über
Twitter zusätzliche Informationen zu sammeln:
* Meine Erklärung für die begrenzte Anzahl von Webschnittstellen für Kubernetes: Cloud-Dienste und Anbieter Kubernetes bieten normalerweise ihre eigenen Frontends an, sodass der Markt für die "gute" kostenlose Kubernetes-Benutzeroberfläche relativ klein ist.Ich habe über
K8Dash ,
Kubernator und
Octant getwittert . Schauen wir uns diese und andere vorhandene Open Source-Lösungen an und versuchen zu verstehen, was sie sind.
K8Dash
"K8Dash ist der einfachste Weg, um Ihren Kubernetes-Cluster zu verwalten."
K8Dash sieht gut aus und fühlt sich schnell an, hat jedoch mehrere Nachteile für die oben aufgeführten Anwendungsfälle:
- Es funktioniert nur innerhalb der Grenzen eines Clusters.
- Sortieren und Filtern sind möglich, haben aber keine Permalinks.
- Benutzerdefinierte Ressourcendefinitionen (CRDs) werden nicht unterstützt.
Kubernator
„Kubernator ist eine alternative Benutzeroberfläche für Kubernetes. Im Gegensatz zum übergeordneten Kubernetes-Dashboard bietet es eine einfache Steuerung und einen hervorragenden Überblick über alle Objekte im Cluster sowie die Möglichkeit, neue Objekte zu erstellen, zu bearbeiten und Konflikte zu lösen. Da es sich um eine vollständig Client-Anwendung (wie kubectl) handelt, ist außer dem Kubernetes-API-Server selbst kein Backend erforderlich. Außerdem werden die Regeln für den Zugriff auf den Cluster berücksichtigt. "
Dies ist eine ziemlich genaue Beschreibung von
Kubernator . Leider fehlen ihm einige Funktionen:
- Bedient nur einen Cluster.
- Es gibt keinen Listenansichtsmodus (dh Sie können nicht alle Pods mit dem Status "Ausstehend" anzeigen).
Kubernetes Dashboard
„Kubernetes Dashboard ist eine universelle Weboberfläche für Kubernetes-Cluster. Benutzer können damit Anwendungen verwalten und Fehler beheben, die im Cluster ausgeführt werden, sowie den Cluster selbst verwalten. “
Leider hilft das
Kubernetes Dashboard bei meinen Aktivitäten zur Unterstützung und Reaktion von Vorfällen nicht viel, weil es:
- Es gibt keine Permalinks, wenn ich beispielsweise Ressourcen filtere oder die Sortierreihenfolge ändere.
- Es gibt keine einfache Möglichkeit, nach Status zu filtern. Zeigen Sie beispielsweise alle Pods mit dem Status "Ausstehend" an.
- Es wird nur ein Cluster unterstützt.
- CRD werden nicht unterstützt (diese Funktion befindet sich in der Entwicklung);
- Keine benutzerdefinierten Spalten (z. B.
kubectl -L
).
Kubernetes Operational View (Kube-Ops-Ansicht)
"K8s Cluster Space Observer System Panel."
Kubernetes Operational View verfolgt einen völlig anderen Ansatz: Dieses Tool zeigt nur Clusterknoten und Pods mit WebGL ohne Textdetails der Objekte an. Es eignet sich hervorragend für eine Online-Übersicht über den Clusterstatus („Fallen Pods?“) *, Nicht jedoch für die oben beschriebenen Fälle von Unterstützung und Reaktion auf Vorfälle.
* Hinweis perev. : In diesem Sinne könnte Sie auch unser grafana-statusmap-Plugin interessieren, das wir in diesem Artikel ausführlicher behandelt haben .Kubernetes-Ressourcenbericht (kube-resource-report)
"Sammeln Sie Informationen zu Ressourcenanforderungen von Pods und Kubernetes-Clustern, vergleichen Sie sie mit dem Ressourcenverbrauch und generieren Sie statisches HTML."
Kubernetes Resource Report generiert statische HTML-Berichte zur Ressourcennutzung und Kostenverteilung durch Teams / Anwendungen in Clustern. Der Bericht ist nützlich, um Vorfälle zu unterstützen und darauf zu reagieren, da Sie den Cluster, in dem die Anwendung bereitgestellt wird, schnell finden können.
Hinweis perev. : Beim Anzeigen von Informationen über die Verteilung von Ressourcen und deren Kosten von Cloud-Anbietern kann auch der kürzlich veröffentlichte Kubecost- Dienst und -Tool hilfreich sein.Oktant
"Eine erweiterbare Webentwicklungsplattform, die ein besseres Verständnis der Komplexität von Kubernetes-Clustern ermöglicht."
Octant , erstellt in VMware, ist ein neues Produkt, das ich vor relativ kurzer Zeit
kennengelernt habe . Wenn Sie es verwenden, ist es praktisch, den Cluster auf einem lokalen Computer zu untersuchen (es gibt sogar Visualisierungen), es werden jedoch nur in begrenztem Umfang die Probleme der Unterstützung und Reaktion auf Vorfälle angesprochen. Oktant Nachteile:
- Keine Clustersuche.
- Es funktioniert nur auf dem lokalen Computer (nicht im Cluster bereitgestellt).
- Objekte können nicht sortiert / gefiltert werden (nur die Etikettenauswahl wird unterstützt).
- Sie können keine benutzerdefinierten Spalten angeben.
- Sie können Objekte nicht nach Namespace auflisten.
Ich hatte auch Stabilitätsprobleme mit Octants Zalando-Clustern: Es stürzte auf einigen CRDs ab.
Einführung in Kubernetes Web View
"Kubectl für das Web."
Nachdem ich die verfügbaren Schnittstellenoptionen für Kubernetes analysiert hatte, entschied ich mich, eine neue zu erstellen:
Kubernetes Web View . In der Tat brauche ich nur die ganze Kraft von
kubectl
im Web, nämlich:
- Zugänglichkeit aller (schreibgeschützten) Operationen, bei denen Benutzer kubectl bevorzugen;
- Alle URLs sollten permanent sein und die Seite in ihrer ursprünglichen Form darstellen, damit Kollegen sie freigeben und in anderen Tools verwenden können.
- Unterstützung für alle Kubernetes-Objekte, die das Problem jeglicher Art lösen;
- Ressourcenlisten sollten für weitere Arbeiten (in Tabellenkalkulationen, CLI-Tools wie
grep
) und Speicher (z. B. für Postmortems) heruntergeladen werden können. - Unterstützung für die Auswahl von Ressourcen nach Labels (ähnlich wie bei
kubectl get .. -l
); - die Fähigkeit, kombinierte Listen verschiedener Arten von Ressourcen zu erstellen (ähnlich wie bei
kubectl get all
), um ein gemeinsames Betriebsbild unter Kollegen zu erhalten (z. B. bei der Reaktion auf einen Vorfall); - die Möglichkeit, anpassbare „intelligente“ Deep Links zu anderen Tools wie Dashboards, Loggern, Anwendungsregistern usw. hinzuzufügen. zur Erleichterung der Fehlerbehebung / Reaktion auf Vorfälle;
- Das Frontend sollte so einfach wie möglich sein (reines HTML), um versehentliche Probleme zu vermeiden, z. B. eingefrorenes JavaScript.
- Unterstützung für mehrere Cluster, um die Interaktion während der Remote-Beratung zu erleichtern (z. B. um nur eine URL zu speichern);
- Wenn möglich, sollte die Situationsanalyse vereinfacht werden (z. B. mit Links zum Herunterladen von Ressourcen für alle Cluster / Namespaces).
- zusätzliche Möglichkeiten zum Erstellen flexibler Links und Hervorheben von Textinformationen, damit Kollegen beispielsweise auf einen bestimmten Abschnitt in der Ressourcenbeschreibung verweisen können (Zeile in YAML);
- die Möglichkeit, sich an die Anforderungen eines bestimmten Clients anzupassen, z. B. die Erstellung spezieller Anzeigevorlagen für CRD, Ihre Tabellenansichten und die Änderung von CSS-Stilen;
- Tools für weitere Studien in der Befehlszeile (z. B.
kubectl
vollwertiger kubectl
Befehle, die zum Kopieren bereit sind);
Außerhalb der von Kubernetes Web View gelösten
Nichtziele gibt es:
- Abstraktion von Kubernetes-Objekten;
- Anwendungsverwaltung (z. B. Bereitstellungsverwaltung, Helmdiagramme usw.);
- Schreibvorgänge (müssen über sichere CI / CD- und / oder GitOps-Tools ausgeführt werden);
- schöne Oberfläche (JavaScript, Themen usw.);
- Visualisierungen (siehe kube-ops-view );
- Kostenanalyse (siehe kube-resource-report ).
Wie unterstützt und reagiert Kubernetes Web View auf Vorfälle?
Unterstützung
- Alle Links sind permanent , was den Informationsaustausch mit Kollegen erleichtert.
- Sie können eigene Ansichten erstellen, z. B. alle Bereitstellungen und Pods mit einer bestimmten Bezeichnung in zwei bestimmten Clustern anzeigen (im Link können mehrere Clusternamen und Ressourcentypen angegeben werden, die durch Kommas getrennt sind).
- Sie können auf bestimmte Zeilen in der YAML-Datei des Objekts verweisen, um mögliche Probleme bei der Spezifikation des Objekts anzuzeigen.
Clustersuche in der Kubernetes-WebansichtReaktion auf Vorfälle
- Mit der globalen Suche können Sie in allen Clustern nach Objekten suchen.
- Listenansichten können alle Objekte mit einem bestimmten Status / einer bestimmten Spalte in allen Clustern anzeigen (z. B. müssen alle Pods mit dem Status "Ausstehend" gefunden werden).
- Objektlisten können zur späteren Analyse im TSV-Format (Tab Delimited Format) heruntergeladen werden.
- Mit anpassbaren externen Links können Sie zu den entsprechenden Dashboards und anderen Tools wechseln.
Kubernetes Web View: Eine Liste der Pods mit dem Status "Ausstehend" in allen ClusternWenn Sie Kubernetes Web View ausprobieren möchten, empfehlen wir Ihnen, sich mit der
Dokumentation vertraut zu machen oder sich die
Live-Demoversion anzusehen.
Natürlich könnte die Benutzeroberfläche besser sein, aber Kubernetes Web View ist derzeit ein Tool für "fortgeschrittene Benutzer", die nicht davor zurückschrecken, URL-Pfade bei Bedarf manuell zu bearbeiten. Wenn Sie Kommentare / Ergänzungen / Wünsche haben, kontaktieren Sie
mich bitte
auf Twitter !
Dieser Artikel enthält eine kurze Darstellung der Prämissen, die zur Erstellung von Kubernetes Web View geführt haben. Andere werden folgen!
( Anmerkung übersetzt .: Sie sollten im Blog des Autors erwartet werden.)PS vom Übersetzer
Lesen Sie auch in unserem Blog: