Kubebox und andere Konsolen-Shells für Kubernetes



Wir haben bereits vor einem Jahr über „Konsolenassistenten“ für Kubernetes geschrieben und noch früher einen Überblick über andere nützliche Dienstprogramme gegeben. Mit der Entwicklung der K8 und ihrer Gemeinschaft ändert sich jedoch auch das zugehörige Ökosystem. Deshalb haben wir den Fans der Konsole wieder etwas zu erzählen. Lass uns gehen!

kubebox


  • GitHub (400+ Sterne)
  • Sprache: JavaScript (Node.js)
  • Lizenz: MIT

Dieses Projekt war der Grund für das Schreiben der Bewertung. Einerseits ist er ein hervorragender Vertreter der Softwarekategorie „Geeks do for Geeks“, andererseits ist er so weit gewachsen, dass er nicht nur das Auge erfreut, sondern auch praktische Vorteile bringt ...

Der Zweck von kubebox besteht also darin, vollständig mit Kubernetes im Rahmen einer praktischen Konsolenschnittstelle zu arbeiten, die im pseudografischen Stil dargestellt wird:

Bild

Arbeit bedeutet Funktionen wie die Navigation durch Pods durch Namespaces, das Anzeigen von Protokollen und sogar Grafiken des Verbrauchs wichtiger Ressourcen (CPU, Speicher, Netzwerk) und die Remote-Ausführung von Befehlen in Containern. Einstellungen für die Verbindung zu Clustern können der Umgebungsvariablen KUBECONFIG oder den Konfigurationen in $HOME/.kube .

Zu den weiteren Plänen der Entwickler gehören die Unterstützung für die Bearbeitung von Konfigurationen und die Durchführung von CRUD-Operationen sowie eine umfassende Neugestaltung der Benutzeroberfläche zur Unterstützung neuer Arten von Grundelementen (Dienste, Bereitstellungen usw.) und eine bequeme Navigation mit zusätzlichen Informationen (insbesondere kubectl describe pod ).

Ein wichtiges Merkmal ist die Verfügbarkeit einer Online-Version (um eine Verbindung zum Kubernetes-API-Server herzustellen, benötigen Sie zulässige cors-allowed-origins ). Darüber hinaus kann kubebox als separate ausführbare Datei, als In-Cluster- Client (über kubectl) sowie von einem in einem Kubernetes- oder OpenShift-Cluster bereitgestellten Dienst ( Xterm.js wird zum Emulieren des Terminals verwendet) gestartet werden .

Seit fast zwei Jahren entwickelt ein Red Hat-Mitarbeiter aus Frankreich kubebox (genauer gesagt, sogar weniger als 10% der Commits wurden von seinem Kollegen getätigt). Das Projekt wurde erst letzten Monat ausreichend bekannt gemacht (über Reddit und eine Reihe anderer Ressourcen), so dass zu erwarten ist, dass dies seiner Entwicklung neue Impulse geben wird.

kube-shell und kube-prompt


Würfelschale


  • GitHub (950+ Sterne)
  • Sprache: Python
  • Lizenz: Apache 2.0


(Achtung, dieses ~ 2 Mb GIF!)

kube-prompt


  • GitHub (über 700 Sterne)
  • Sprache: Geh
  • Lizenz: MIT



Wir haben bereits vor einem Jahr über diese Projekte geschrieben, und zu dieser Zeit waren sie bedingungslose Favoriten unter den vollwertigen Konsolen-Shells für die Arbeit mit Kubernetes. Beide sind als verbesserte (bequemere) Schnittstellen zu kubectl positioniert. In der kube-shell verwenden sie die prompt-toolkit- Bibliothek für Python und für die kube-prompt haben sie eine ähnliche Bibliothek für Go ( go-prompt ) verwendet.

Wenn Sie sie mit kubebox vergleichen, basiert die Oberfläche nicht auf Pseudografien, sondern auf der üblichen Konsole zur Eingabe von Befehlen (siehe Screenshots oben) , die jedoch von sehr interessanten „Spezialeffekten“ begleitet wird: Tooltips mit Befehlen, bequemes automatisches Hinzufügen und usw.

Trotz der Vielzahl unterstützter Funktionen (einschließlich des bereits erwähnten entwickelten Systems von Tipps und automatischer Vervollständigung, der Suche nach dem Verlauf von Befehlen und eines vi-ähnlichen Bearbeitungsmodus) weist der Verlauf von Commits in der kube-shell auf eine deutliche Verlangsamung des Projekts hin. In diesem Jahr wurden nur sieben Commits verzeichnet, von denen zwei README Modifikationen sind. Obwohl es einige nützliche gab, zum Beispiel die lang erwartete Unterstützung für die KUBECONFIG Variable. Auf die eine oder andere Weise inspiriert die anhaltende mangelnde Reaktion der Entwickler auf benutzerrelevante Anfragen (siehe Probleme ) keine angemessenen Aussichten.

Die Situation mit der Entwicklung von kube-prompt sieht etwas besser aus. Obwohl dieses Projekt auf GitHub weniger Sterne erzielte (wenn es vor einem Jahr etwas vor seinem Python-Konkurrenten lag, liegt es jetzt deutlich zurück), erscheinen Commits mehr oder weniger regelmäßig und die neueste Version ( 1.0.5 ) ist vom 18. Oktober. Im letzten Jahr gab es jedoch nicht so viele wesentliche Änderungen. Wir weisen auf die Unterstützung von Kubernetes Version 1.11 und die Möglichkeit der automatischen Vervollständigung des Namespace hin. Die Hauptsache ist, dass der Autor selbst zugibt, dass es unmöglich ist, genügend Zeit für die Entwicklung von kube-prompt aufzuwenden, und nach Helfern sucht.

Zusammenfassend können wir sagen, dass kube-shell seine Führungsrolle in Bezug auf unterstützte Funktionen beibehalten und an Popularität gewonnen hat, aber mit den Aussichten für beide Shells ist nicht alles klar. Wenn Sie jedoch mit der Arbeitsweise vertraut sind, gibt es keinen Grund, sie nicht in Betrieb zu nehmen andere Alternativen in einem ähnlichen Design erschienen nicht.

Klicken Sie auf


  • GitHub (750+ Sterne)
  • Sprache: Rost
  • Lizenz: Apache 2.0

Click ist ein recht junges Projekt: In Beta-Form wurde es Ende März vorgestellt - und auf seine Weise sehr interessant. Das Konzept besteht darin, kubectl in einer REPL-Schleife zu verwenden , was das Leben erleichtert, indem eine konstante Umgebung aufrechterhalten wird. Letzteres ist, dass Click den aktuellen Kontext, den Namespace usw. unter "merkt" und den Benutzer auffordert, den gewünschten Befehl für die angegebene Ressource auszuführen, ohne diesen gesamten "Pfad" neu angeben zu müssen.



Die Idee des Projekts entstand bei Databricks, wo sie Kubernetes aktiv nutzen und es leid sind, dasselbe Szenario mit kubectl zu beobachten, was die ständige Einführung früherer Daten erfordert. Gleichzeitig ist das Dienstprogramm kubectl selbst - wie die Konsole im Allgemeinen - bei Ingenieuren sehr beliebt. Also erschien dieses Add-In, das nicht behauptete, kubectl zu ersetzen, sondern nur half, damit zu arbeiten. Ein Beispiel für einen Anwendungsfall für Click ist:

pods //
2 //
describe //
events //
logs -c foo > /tmp/podfoo.log //
delete // ( )


Wenn Sie interessiert sind, sehen Sie sich auch einen kleinen Screencast an , der die Arbeit von Click mit Textkommentaren demonstriert.

Arbeiten Sie mit Protokollen


Als Bonus - keine Shells, sondern Konsolentools für die Arbeit mit Protokollen in Kubernetes. Vor einem Jahr haben wir nur k8stail als solches erwähnt, aber die vergangene Zeit hat gezeigt, dass das Problem relevant ist, und es gibt andere Lösungen, die Beachtung verdienen , um es zu lösen.

Stern


  • GitHub (~ 1300 Sterne)
  • Sprache: Geh
  • Lizenz: Apache 2.0

Stern ist der unbestrittene Favorit des Schwanzes in der Kategorie Kubernetes. Aus Gründen der Übersichtlichkeit werden beim Anzeigen von Protokollen verschiedene Farbcodes verwendet:



Ein weiteres wichtiges Merkmal ist die Verwendung regulärer Ausdrücke zum bequemen Filtern von Herden, ohne dass bestimmte IDs bekannt sein müssen (wählen Sie beispielsweise alles mit dem Namen web-\w+ ). In ähnlicher Weise (d. H. Regexpams) können Sie bestimmte Container nach angeforderten Pods filtern. Unter anderem Merkmale des Hecks:

  • Unterstützung für benutzerdefinierte Go-Vorlagen für Ausgabeprotokolle (standardmäßig sind mehrere vordefiniert);
  • Unterstützung für Etikettenselektoren;
  • Beschränkung der Protokollausgabe auf einen bestimmten Zeitwert - --since und / oder eine bestimmte Anzahl von Zeilen;
  • Unterstützung für die automatische Vervollständigung von bash und zsh sowie die dynamische Ersetzung von Werten für Namespaces und Kontexte.

Kubetail


  • GitHub (~ 950 Sterne)
  • Sprache: Shell
  • Lizenz: Apache 2.0

Eine ähnliche Lösung, die in regulärem Bash geschrieben und im letzten Jahr etwas aktiver entwickelt wurde. Wie das Heck unterstützt es das Hervorheben der Namen der Herde (oder der gesamten anpassbaren Linie):



Sie können Pods und Container auch nach vollständigen Namen und regulären Ausdrücken filtern sowie Selektoren verwenden, die Ausgabe auf Zeit und Anzahl der Zeilen beschränken und die automatische Vervollständigung für Bash, zsh und fish unterstützen. Unter anderem:

  • Deaktivierungsmodus --follow zum Aktualisieren von Daten aus Protokollen in Echtzeit (wie in tail -f );
  • --dry-run , um eine Liste geeigneter Pods und Container anzuzeigen, ohne andere Aktionen --dry-run ;
  • Unterstützung des JQ-Selektors für das Parsen der Ausgabe in JSON.

Kail


  • GitHub (~ 500 Sterne)
  • Sprache: Geh
  • Lizenz: MIT

Eine weitere Implementierung, die im letzten Jahr die geringste Aktivität in der Codebasis erfahren hat. Es hat jedoch interessante funktionale Merkmale, die sich von seinen Mitbewerbern unterscheiden, nämlich:

  • Einschränkung der Anforderung von Herden durch die Namen ihrer Dienste, ReplicationController, ReplicaSet, Deployment, Node und / oder Ingress (d. h. Herde, die zu den Diensten gehören, zu denen der angegebene Ingress führt) ;
  • die Fähigkeit, Selektoren nicht nur auszuwählen, sondern auch auszuschließen;
  • Ermittlung der Protokollierungsstufe ( --log-level ).



Es gibt aber auch Nachteile: kail hebt Pods nicht mit Farben hervor und unterstützt keine regulären Ausdrücke für Filter.

PS


Vielen Dank für Ihr Interesse und natürlich freuen wir uns über Ihre Ergebnisse in den Kommentaren!

Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de426985/


All Articles