Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

K9s bietet eine Terminal-Benutzeroberfläche zur Interaktion mit Kubernetes-Clustern. Ziel dieses Open-Source-Projekts ist es, die Navigation in Anwendungen auf K8s, deren Überwachung und Verwaltung zu erleichtern. K9s verfolgt kontinuierlich Änderungen in Kubernetes und bietet schnelle Befehle für die Arbeit mit überwachten Ressourcen.

Das Projekt ist in Go geschrieben und existiert seit mehr als anderthalb Jahren: Der erste Commit wurde am 1. Februar 2019 gemacht. Zum Zeitpunkt des Schreibens des Artikels gibt es über 9000 Sterne auf GitHub und etwa 80 Mitwirkende. Schauen wir uns an, was k9s kann?

Installation und Ausführung

Es handelt sich um eine Client-Anwendung (in Bezug auf das Kubernetes-Cluster), die am einfachsten als Docker-Image gestartet werden kann:

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

Für einige Linux-Distributionen und andere Betriebssysteme gibt es ebenfalls vorinstallierte Pakete. Im Allgemeinen können Sie für Linux-Systeme die 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 speziellen Anforderungen an das K8s-Cluster selbst. Nach den Erfahrungsberichten funktioniert die Anwendung sogar mit so alten Versionen von Kubernetes wie 1.12.

Die Anwendung wird unter Verwendung der Standardkonfiguration .kube/config gestart – ähnlich wie es kubectl.

Navigation

Standardmäßig wird ein Fenster mit dem Standard-Namespace geöffnet, der für den Kontext angegeben ist. Das heißt, wenn Sie eingegeben haben kubectl config set-context --current --namespace=test, wird der Namespace test. geöffnet (Informationen zum Wechseln von Kontexten/Namensräumen finden Sie weiter unten).

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Der Wechsel in den Befehlsmodus erfolgt durch Drücken von „:“. Danach können Sie k9s mit Befehlen steuern – zum Beispiel können Sie zur Anzeige der Liste der StatefulSets (im aktuellen Namensraum) eingeben :sts.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Für einige andere Kubernetes-Ressourcen:

  • :ns – Namespaces;
  • :deploy – Deployments;
  • :ing – Ingresses;
  • :svc – Services.

Um die vollständige Liste der verfügbaren Ressourcentypen zur Ansicht zu erhalten, verwenden Sie den Befehl :aliases.

Es ist praktisch, auch die Liste der verfügbaren Befehle über die aktuellen Hotkey-Kombinationen im Rahmen des aktuellen Fensters anzuzeigen: Dazu müssen Sie einfach „?“ drücken.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

K9s bietet auch einen Suchmodus, zu dem Sie gelangen, indem Sie einfach „/“ eingeben. Damit können Sie im Inhalt des aktuellen „Fensters“ suchen. Angenommen, Sie haben zuvor eingegeben :ns, Sie haben eine Liste von Namensräumen geöffnet. Wenn es zu viele sind, reicht es aus, im Fenster mit den Namensräumen einzugeben, /mynamespace.

Um nach Labels zu suchen, können Sie alle Pods im gewünschten Namensraum auswählen und anschließend zum Beispiel eingeben, / -l app=whoami. Wir erhalten eine Liste der Pods mit diesem Label:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Die Suche funktioniert in allen Fenstern, einschließlich Protokollen, YAML-Manifestsicht und describe für Ressourcen – mehr zu diesen Möglichkeiten, siehe unten.

Wie sieht generell die Abfolge von Aktionen zur Navigation aus?

Mit dem Befehl :ctx kann der Kontext ausgewählt werden:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Um einen Namensraum auszuwählen, gibt es den bereits erwähnten Befehl :ns, und danach kann die Suche für den gewünschten Raum verwendet werden: /test.

Wenn wir nun die interessierende Ressource (zum Beispiel denselben StatefulSet) auswählen, wird die entsprechende Information angezeigt: wie viele Pods mit kurzen Informationen über sie gestartet sind.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Es könnten nur die Pods von Interesse sein – dann reicht es, einzugeben :pod. Im Fall von ConfigMaps (:cm – für die Liste dieser Ressourcen) kann das interessierende Objekt ausgewählt und die Taste „u“ gedrückt werden, woraufhin K9s anzeigt, wer genau es (diese CM) verwendet.

Eine weitere praktische Funktion zur Ansicht von Ressourcen ist deren „Röntgen“ (XRay-Ansicht). Dieser Modus wird mit dem Befehl :xray RESOURCE aufgerufen und… es ist einfacher zu zeigen, wie es funktioniert, als zu erklären. Hier ist eine Illustration für StatefulSets:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes
(Jede dieser Ressourcen kann bearbeitet, geändert und erstellt werden. describe.)

Hier ist der Deployment mit Ingress:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Arbeiten mit Ressourcen

Zu jeder Ressource können Informationen im YAML-Format oder deren describe durch Drücken der entsprechenden Tastenkombinationen („y“ und „d“ jeweils) abgerufen werden. Die grundlegenden Operationen sind natürlich noch mehr: ihre Liste und Tastenkombinationen sind dank der praktischen „Kopfzeile“ in der Benutzeroberfläche immer sichtbar (versteckt durch Drücken von Ctrl + e).

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Bei der Bearbeitung einer Ressource („e“ nach ihrer Auswahl) öffnet sich der Texteditor, der in den Umgebungsvariablen definiert ist (export EDITOR=vim).

So sieht eine detaillierte Beschreibung der Ressource aus (describe):

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Dieser Output (oder der Output der Anzeige des YAML-Manifests der Ressource) kann über die gewohnte Tastenkombination Ctrl + s gespeichert werden. Wo es gespeichert wird, wird aus der Nachricht von K9s bekannt sein:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml erfolgreich gespeichert!

Aus den erstellten Backup-Dateien können Ressourcen wiederhergestellt werden, nachdem die Systemlabel und Anmerkungen entfernt wurden. Dazu muss man in das Verzeichnis wechseln (:dir /tmp), danach die gewünschte Datei auswählen und anwenden apply.

Übrigens kann man jederzeit auf den vorherigen ReplicaSet zurücksetzen, falls es mit dem aktuellen Probleme gibt. Dazu muss man den entsprechenden RS auswählen (:rs für deren Liste):

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

… und rollback mit Ctrl + l ausführen. Wir sollten eine Benachrichtigung erhalten, dass alles erfolgreich war:

k9s/whoami-5cfbdbb469 erfolgreich zurückgesetzt

Um die Replikate zu skalieren, genügt es, die Taste „s“ (scale) zu drücken und die gewünschte Anzahl an Instanzen auszuwählen:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

In jeden Container kann man über die Shell gelangen: Dazu wählt man den gewünschten Pod aus, drückt die Taste „s“ (shell) und wählt den Container aus.

Weitere Möglichkeiten

Natürlich wird auch das Ansehen der Protokolle unterstützt („l“ für die ausgewählte Ressource). Um neue Protokolle zu sehen, muss man nicht ständig Enter drücken: Es genügt, eine Markierung („m“) zu setzen, um nur neue Nachrichten zu verfolgen.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Ebenso kann in diesem Fenster ein Zeitraum für die Ausgabe der Protokolle ausgewählt werden:

  • Taste „1“ — für 1 Minute;
  • „2“ — 5 Minuten;
  • „3“ — 15 Minuten;
  • „4“ — 30 Minuten;
  • „5“ — 1 Stunde;
  • „0“ — für die gesamte Lebensdauer des Pods.

Ein spezieller Betriebsmodus von Pulse (Befehl :pulse) zeigt allgemeine Informationen über das Kubernetes-Cluster an:

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Hier sieht man die Anzahl der Ressourcen und ihren Status (grün zeigt die an, die den Status haben Laufend).

Eine weitere interessante Funktion von K9s heißt Popeye. Sie überprüft alle Ressourcen auf bestimmte Kriterien der Korrektheit und gibt das erhaltene „Rating“ mit Erklärungen aus. Zum Beispiel kann man sehen, dass bestimmte Probes oder Limits fehlen, oder dass ein Container als root gestartet werden könnte…

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Es gibt grundlegende Unterstützung für Helm. Zum Beispiel kann man so die im Cluster bereitgestellten Releases ansehen:

:helm all # alle
:helm $namespace # im spezifischen Namespace

Benchmark

In K9s wurde sogar hey — ein einfacher Lastgenerator für HTTP-Server, als Alternative zum bekannteren ab (ApacheBench), integriert.

Um ihn zu aktivieren, ist es notwendig, Port-Forward im Pod zu aktivieren. Dazu wählt man den Pod aus und drückt Shift + f, um ins Untermenü Port-Forward über den Alias „pf“ zu wechseln.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Nach der Auswahl des Ports und Drücken von Ctrl + b wird der Benchmark gestartet. Die Ergebnisse seiner Ausführung werden in /tmp gespeichert und sind für die spätere Ansicht in K9s verfügbar.

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes
Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Um die Konfiguration des Benchmarks zu ändern, muss eine Datei erstellt werden. $HOME/.k9s/bench-.yml (wird für jeden Cluster festgelegt).

NB: Es ist wichtig, dass die Erweiterung aller YAML-Dateien im Verzeichnis .k9s genau .yml (.yaml nicht korrekt funktioniert).

Beispielkonfiguration:

benchmarks:
  defaults:
    # Anzahl der Threads
    concurrency: 2
    # Anzahl der Anfragen
    requests: 1000
  containers:
    # Einstellungen für den Benchmark-Container
    # Der Container wird als namespace/pod-name:container-name definiert
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Benchmark kann auf Services wie NodePort und LoadBalancer durchgeführt werden
    # Syntax: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Benutzeroberfläche

Die Spaltenansicht für Ressourcenlisten wird durch Erstellen einer Datei modifiziert $HOME/.k9s/views.yml. Ein Beispiel für ihren Inhalt:

k9s:
 views:
   v1/pods:
     columns:
       - ALTER
       - NAMESPACE
       - NAME
       - IP
       - KNOTEN
       - STATUS
       - BEREIT
   v1/services:
     columns:
       - ALTER
       - NAMESPACE
       - NAME
       - TYP
       - CLUSTER-IP

Allerdings fehlt eine Spalte für Labels, was ein Problem im Projekt darstellt..

Die Sortierung nach Spalten erfolgt über Tastenkombinationen:

  • Shift + n — nach Name;
  • Shift + o — nach Knoten;
  • Shift + i — nach IP;
  • Shift + a — nach Lebensdauer des Containers;
  • Shift + t — nach Anzahl der Neustarts;
  • Shift + r — nach Status der Bereitschaft;
  • Shift + c — nach CPU-Verbrauch;
  • Shift + m — nach Speicherverbrauch.

Wenn jemand das standardmäßige Farbschema nicht mag, unterstützt K9s sogar Skins.Fertige Beispiele (7 Stück) sind verfügbar. hierHier ist ein Beispiel für eines dieser Skins (in der Marine):

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

Plugins

Schließlich erlauben Plugins, die Funktionen von K9s zu erweitern. Ich habe in der Praxis nur eines davon verwendet — kubectl get all -n $namespace Das sieht folgendermaßen aus. Erstellen Sie eine Datei.

$HOME/.k9s/plugin.yml plugin: get-all: shortCut: g confirm: false description: alle abrufen scopes: - all command: sh background: false args: - -c - "kubectl -n $NAMESPACE get all -o wide | less" mit folgendem Inhalt:

Jetzt können Sie in den Namensraum wechseln und 'g' drücken, um den entsprechenden Befehl auszuführen:

Unter den Plugins gibt es beispielsweise Integrationen mit kubectl-jq und dem Tool zum Anzeigen von Logs

Überblick über k9s – eine erweiterte Terminaloberfläche für Kubernetes

stern. Meiner Meinung nach war K9s in der Arbeit sehr angenehm: Man gewöhnt sich schnell daran, alles Notwendige ohne Nutzung.

Fazit

zu suchen. kubectl. Die Überprüfung der Protokolle und deren Speicherung, die schnelle Bearbeitung von Ressourcen, die allgemeine Geschwindigkeit* und der nützliche Modus Popeye waren erfreulich. Besonders erwähnenswert sind die Möglichkeiten, Plugins zu erstellen und die Anwendung an die eigenen Bedürfnisse anzupassen.

* Obwohl ich bei großer Protokollmenge auch langsame Arbeitsgeschwindigkeit von K9s bemerkt habe. In solchen Momenten benötigte das Tool 2 Kerne des Intel Xeon E312xx und konnte sogar abstürzen.

Was fehlt derzeit? Ein schneller Rückgriff auf die vorherige Version (nicht RS) ohne das Wechseln in das Verzeichnis. Zudem erfolgt die Wiederherstellung nur für alles Ressource: Wenn Sie eine Annotation oder ein Label gelöscht haben, müssen Sie die gesamte Ressource löschen und wiederherstellen (hier ist das Wechseln in das Verzeichnis erforderlich). Ein weiteres kleines Manko ist das Fehlen eines Datums für solche gespeicherten „Backups“.

P.S.

Lesen Sie auch in unserem Blog:

Quelle: habr.com

60GB SSD 8Gb DDR4