Ein Überblick über k9s - eine erweiterte Terminalschnittstelle für Kubernetes





K9s bietet eine Terminal-Benutzeroberfläche für die Interaktion mit Kubernetes-Clustern. Das Ziel dieses Open Source-Projekts ist es, das Navigieren, Überwachen und Verwalten von Anwendungen in K8s zu vereinfachen. K9s überwacht ständig Änderungen in Kubernetes und bietet schnelle Befehle für die Arbeit mit überwachten Ressourcen.



Das Projekt ist in Go geschrieben und besteht seit über anderthalb Jahren. Die erste Zusage erfolgte am 1. Februar 2019. Zum Zeitpunkt dieses Schreibens gibt es auf GitHub mehr als 9000 Sterne und ungefähr 80 Mitwirkende. Mal sehen, was K9s können?



Installation und Start



Dies ist eine Clientanwendung (in Bezug auf den Kubernetes-Cluster) und am einfachsten als Docker-Image auszuführen:



docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s


Für einige Linux-Distributionen und andere Betriebssysteme stehen auch Pakete zur Installation bereit . Im Allgemeinen können Sie für Linux-Systeme eine Binärdatei installieren:



sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin


Es gibt keine spezifischen Anforderungen für den K8s-Cluster selbst. Basierend auf den Bewertungen funktioniert die App mit älteren Versionen von Kubernetes wie 1.12.



Die Anwendung wird mit der Standardkonfiguration gestartet .kube/config- genauso wie sie es tut kubectl.



Navigation



Standardmäßig wird ein Fenster mit dem für den Kontext angegebenen Standard-Namespace geöffnet. Wenn Sie sich registriert haben kubectl config set-context --current --namespace=test, wird der Namespace geöffnet test. (Informationen zum Ändern von Kontexten / Namespaces finden Sie weiter unten.) Sie können







in den Befehlsmodus wechseln, indem Sie auf ":" klicken. Sie können dann den Betrieb von k9s mithilfe von Befehlen steuern. Um beispielsweise eine Liste von StatefulSets (im aktuellen Namespace) anzuzeigen, können Sie diese eingeben :sts.







Für einige andere Kubernetes-Ressourcen:



  • :ns - Namespaces;
  • :deploy - Bereitstellungen;
  • :ing - Eingriffe;
  • :svc - Dienstleistungen.


Um eine vollständige Liste der zur Anzeige verfügbaren Ressourcentypen anzuzeigen, gibt es einen Befehl :aliases.



Es ist auch praktisch, die Liste der Befehle anzuzeigen, die über Tastenkombinationen im aktuellen Fenster verfügbar sind: Klicken Sie einfach auf "?"







Auch in k9s gibt es einen Suchmodus , in den man wechseln kann, um "/" einzugeben. Es wird verwendet, um nach dem Inhalt des aktuellen "Fensters" zu suchen. Angenommen :ns, Sie haben zuvor eine Liste mit Namespaces geöffnet. Wenn es zu viele von ihnen gibt, reicht es aus, in das Fenster mit Namespaces einzutreten, um nicht lange nach unten zu scrollen /mynamespace.



Um nach Beschriftungen zu suchen, können Sie alle pod'y im richtigen Namespace auswählen und dann beispielsweise eingeben / -l app=whoami. Wir erhalten eine Liste der Pods mit diesem Label:







Die Suche funktioniert in allen Arten von Fenstern, einschließlich Protokollen, Anzeigen von YAML-Manifesten und describeRessourcen. Weitere Informationen zu diesen Funktionen finden Sie weiter unten.



Wie ist die gesamte Navigationssequenz?



Mit dem Befehl :ctxkönnen Sie Kontext auswählen:







Um einen Namespace auszuwählen, haben Sie das Team bereits erwähnt :ns, und dann können Sie nach dem gewünschten Bereich suchen : /test.



Wenn wir nun die Ressource auswählen, an der wir interessiert sind (z. B. dasselbe StatefulSet), werden die entsprechenden Informationen angezeigt: Wie viele Pods werden mit kurzen Informationen zu ihnen ausgeführt?







Es können nur Pods von Interesse sein - dann geben Sie einfach ein :pod. Im Fall von ConfigMaps (:cm- Für eine Liste dieser Ressourcen) können Sie das gewünschte Objekt auswählen und auf "u" klicken. Danach teilt Ihnen K9s genau mit, wer es verwendet (dieses CM).



Eine weitere praktische Funktion zum Anzeigen von Ressourcen ist die XRay-Ansicht . Ein solcher Modus wird von einem Befehl aufgerufen :xray RESOURCEund ... es ist einfacher zu zeigen, wie es funktioniert, als zu erklären. Hier ist eine Illustration für StatefulSets:





(Jede dieser Ressourcen kann bearbeitet, geändert, ausgeführt werden describe.)



Und hier ist eine Bereitstellung mit Ingress:







Mit Ressourcen arbeiten



Informationen zu jeder Ressource erhalten Sie in YAML oder describedurch Drücken der entsprechenden Tastenkombinationen ("y" bzw. "d"). Es gibt natürlich noch grundlegendere Funktionen: Ihre Listen- und Tastaturkürzel sind dank der praktischen "Kopfzeile" in der Benutzeroberfläche immer sichtbar (durch Drücken von Strg + e ausgeblendet).







Beim Bearbeiten einer Ressource ("e" nach ihrer Auswahl) wird der in den Umgebungsvariablen ( export EDITOR=vim) definierte Texteditor geöffnet .



Und so sieht die detaillierte Beschreibung der Ressource ( describe) aus :







Eine solche Ausgabe (oder die Ausgabe zum Anzeigen des YAML-Manifests einer Ressource) kann mit den üblichen Tastenkombinationen Strg + s gespeichert werden. Wo es gespeichert wird, ist aus der K9-Nachricht bekannt:



Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!


Aus den erstellten Sicherungsdateien können Sie auch Ressourcen wiederherstellen, nachdem Sie die Systembezeichnungen und Anmerkungen entfernt haben. Dazu müssen Sie mit ihnen in das Verzeichnis gehen ( :dir /tmp), dann die gewünschte Datei auswählen und anwenden apply.



Übrigens können Sie jederzeit zum vorherigen ReplicaSet zurückkehren, wenn Probleme mit dem aktuellen ReplicaSet auftreten. Wählen Sie dazu den gewünschten RS ( :rsfür die Liste):







… und setzen Sie den Rollback mit Strg + l fort. Wir sollten eine Benachrichtigung erhalten, dass alles gut gelaufen ist:



k9s/whoami-5cfbdbb469 successfully rolled back


Um Replikate zu skalieren, klicken Sie einfach auf "s" (Skalieren) und wählen Sie die erforderliche Anzahl von Instanzen aus:







Sie können jeden Container über die Shell eingeben: Gehen Sie dazu zum gewünschten Pod, klicken Sie auf "s" (Shell) und wählen Sie den Container aus ...



Andere Möglichkeiten



Natürlich wird auch das Anzeigen der Protokolle ("l" für die ausgewählte Ressource) unterstützt. Und um neue Protokolle anzusehen, müssen Sie nicht ständig die Eingabetaste drücken: Es reicht aus, ("m") zu markieren und dann nur neue Nachrichten zu verfolgen.







Im selben Fenster können Sie auch den Zeitbereich für die Anzeige von Protokollen auswählen:



  • Taste "1" - in 1 Minute;
  • "25 Minuten;
  • "3" - 15 Minuten;
  • "4" - 30 Minuten;
  • "5" - 1 Stunde;
  • "0" - für die gesamte Lebensdauer des Pods.


Der spezielle Pulsbetriebsmodus (Befehl :pulse) zeigt allgemeine Informationen zum Kubernetes-Cluster an:







Sie können die Anzahl der Ressourcen und ihren Status darin sehen (diejenigen, die einen Status haben, werden grün angezeigt Running).



Ein weiteres cooles Feature der K9 heißt Popeye . Es überprüft alle Ressourcen auf bestimmte Korrektheitskriterien und zeigt die resultierende "Bewertung" mit Erläuterungen an. Sie können beispielsweise feststellen, dass nicht genügend Sonden oder Grenzwerte vorhanden sind und einige Container als Root ausgeführt werden können.







Es gibt grundlegende Helmunterstützung. So können Sie beispielsweise die im Cluster bereitgestellten Releases anzeigen:



:helm all # 
:helm $namespace #    


Benchmark



Sogar hey wurde in K9s eingebaut - es ist ein einfacher HTTP-Server- Lastgenerator , eine Alternative zum bekannteren ab (ApacheBench).



Um es zu aktivieren, müssen Sie die Port-Forward-Aktivierung im Pod aktivieren. Wählen Sie dazu pod aus und drücken Sie Umschalt + f. Wechseln Sie mit dem Alias ​​"pf" zum Untermenü "Port-Forward".







Nachdem Sie einen Port ausgewählt und Strg + b gedrückt haben, wird der Benchmark selbst gestartet. Die Ergebnisse seiner Arbeit werden /tmpin K9s gespeichert und stehen für eine spätere Anzeige zur Verfügung.









Um die Konfiguration des Benchmarks zu ändern, müssen Sie eine Datei erstellen $HOME/.k9s/bench-<my_context>.yml(für jeden Cluster definiert).



NB: Es ist wichtig, dass die Erweiterung aller YAML-Dateien im Verzeichnis .k9sgenau ist .yml( .yamlfunktioniert nicht richtig).



Konfigurationsbeispiel:



benchmarks:
  defaults:
    #  
    concurrency: 2
    #  
    requests: 1000
  containers:
    #     
    #    namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    #       NodePort  LoadBalancer
    # : namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd


Schnittstelle



Die Spaltenansicht für Ressourcenlisten wird durch Erstellen einer Datei geändert $HOME/.k9s/views.yml. Ein Beispiel für seinen Inhalt:



k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP


Es fehlt zwar eine Spalte für Beschriftungen, für die es im Projekt ein Problem gibt .



Das Sortieren nach Spalten erfolgt über Tastaturkürzel:



  • Umschalt + n - nach Namen;
  • Shift + o - um Knoten;
  • Umschalt + i - nach IP;
  • Shift + a - um die Containerlebensdauer;
  • Umschalt + t - um die Anzahl der Neustarts;
  • Shift + r - nach Bereitschaftsstatus;
  • Shift + c - nach CPU-Verbrauch;
  • Shift + m - nach Speicherverbrauch.


Wenn jemand das Standardfarbschema nicht mag, unterstützt K9s sogar Skins . Fertige Beispiele (7 Stück) finden Sie hier . Hier ist ein Beispiel für eine dieser Skins (in der Marine) :







Plugins



Schließlich können Sie mit Plugins die Funktionen der K9 erweitern. Ich selbst habe nur einen von ihnen in meiner Arbeit verwendet - kubectl get all -n $namespace.



Es sieht aus wie das. Erstellen Sie eine Datei $HOME/.k9s/plugin.ymlmit folgendem Inhalt:



plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"


Jetzt können Sie in den Namespace gehen und "g" drücken, um den entsprechenden Befehl auszuführen:







Unter den Plugins gibt es beispielsweise die Integration mit kubectl-jq und das Dienstprogramm zum Anzeigen von Protokollen im Heck .



Fazit



Nach meinem Geschmack erwies sich der K9 als sehr bequem zu bedienen: Mit ihm ist es ziemlich schnell, sich daran zu gewöhnen, nach allem zu suchen, was man braucht, ohne es zu benutzen kubectl. Ich war zufrieden mit der Anzeige von Protokollen und deren Speicherung, der schnellen Bearbeitung von Ressourcen, der Arbeitsgeschwindigkeit im Allgemeinen * und dem Popeye-Modus, der sich als nützlich herausstellte. Eine separate Erwähnung ist die Möglichkeit, Plugins zu erstellen und die Anwendung an Ihre Bedürfnisse anzupassen.



* Obwohl mit einem großen Volumen an Protokollen, bemerkte ich auch die langsame Arbeit von K9s. In solchen Momenten "aß" das Dienstprogramm 2 Kerne von Intel Xeon E312xx und konnte sogar einfrieren.



Was fehlt im Moment? Schneller Rollback auf die vorherige Version (es geht nicht um RS), ohne in das Verzeichnis zu wechseln. Außerdem erfolgt die Wiederherstellung nur für alles.Ressource: Wenn Sie die Anmerkung oder Beschriftung gelöscht haben, müssen Sie die gesamte Ressource löschen und wiederherstellen (hier müssen Sie in das Verzeichnis wechseln). Eine weitere Kleinigkeit ist, dass es nicht genug Datum für solche gespeicherten "Backups" gibt.



PS



Lesen Sie auch in unserem Blog:






All Articles