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

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

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

Das Projekt wurde in Go entwickelt und besteht seit über anderthalb Jahren: Der erste Commit wurde am 1. Februar 2019 vorgenommen. Zum Zeitpunkt des Schreibens des Artikels hat 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:/root/.kube/config quay.io/derailed/k9s

Für einige Linux-Distributionen und andere Betriebssysteme sind ebenfalls installierbare Pakete. Im Allgemeinen kann für Linux-Systeme eine Binärdatei installiert werden:

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 an das K8s-Cluster selbst. Nach Berichten funktioniert die Anwendung auch mit älteren Kubernetes-Versionen wie 1.12.

Die Anwendung wird mit der Standardkonfiguration gestartet. .kube/config — ähnlich wie es kubectl.

Navigation

Standardmäßig öffnet sich ein Fenster mit dem Standard-Namespace, der für den Kontext festgelegt ist. Das heißt, wenn Sie kubectl config set-context --current --namespace=testeingeben, wird auch dieser Namespace geöffnet. test. (Zur Änderung von Kontexten/Namensräumen siehe unten.)

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

Wechseln zu Befehlsmodus erfolgt durch Drücken von „:“. Danach können Sie die Funktion von k9s mit Befehlen steuern — zum Beispiel können Sie zur Anzeige der Liste von StatefulSets (im aktuellen Namespace) eingeben: :sts.

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

Für einige andere Kubernetes-Ressourcen:

  • :ns — Namensräume;
  • :deploy — Deployments;
  • :ing — Ingresses;
  • :svc — Dienste.

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

Es ist auch praktisch, die Liste der Befehle zu sehen, die über die aktuellen Tastenkombinationen im Fenster verfügbar sind: dafür reicht es, „?“ zu drücken.

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

Außerdem gibt es in k9s einen Suchmodus, in den Sie wechseln können, indem Sie „/“ eingeben. Damit wird im Inhalt des aktuellen „Fensters“ gesucht. Angenommen, Sie haben zuvor eingegeben: :ns, Sie haben eine Liste von Namespaces geöffnet. Wenn es zu viele sind, können Sie im Fenster mit den Namespaces einfach eingeben, um das Scrollen nach unten zu vermeiden. /mynamespace.

Um nach Labels zu suchen, können Sie alle Pods im gewünschten Namespace auswählen und dann beispielsweise eingeben, / -l app=whoami. Wir erhalten eine Liste von Pods mit diesem Label:

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

Die Suche funktioniert in allen Fensterarten, einschließlich Logs, Ansicht von YAML-Manifests und describe für Ressourcen — weitere Informationen zu diesen Funktionen finden Sie weiter unten.

Wie sieht die allgemeine Abfolge der Schritte 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 Namespace auszuwählen, gibt es den bereits erwähnten Befehl :ns, danach kann die Suche für den gewünschten Namespace genutzt werden: /test.

Wenn nun die betreffende Ressource (zum Beispiel derselbe StatefulSet) ausgewählt wird, erscheint entsprechende Informationen: wie viele Pods ausgeführt werden, mit kurzen Informationen über sie.

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

Es können nur die Pods von Interesse sein — dann genügt es, einzugeben :pod. Im Falle von ConfigMaps (:cm — für die Liste dieser Ressourcen) kann das gewünschte Objekt ausgewählt und auf «u» gedrückt werden, woraufhin K9s anzeigt, wer genau diesen CM verwendet.

Eine weitere praktische Funktion zur Anzeige von Ressourcen ist deren „Röntgen“ (XRay-Ansicht). Dieser Modus wird durch den Befehl ausgelöst :xray RESOURCE und… ehrlich gesagt, 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, verändert und verwaltet werden) describe.)

Hier ist ein Deployment mit Ingress:

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

Arbeiten mit Ressourcen

Über jede Ressource können Informationen im YAML-Format oder deren describe erhalten werden, indem die entsprechenden Tastenkombinationen gedrückt werden („y“ für YAML und „d“ für Details). Die Grundoperationen sind in der Tat noch zahlreicher: Ihre Liste und die Tastenkombinationen sind dank der praktischen „Kopfleiste“ im Interface stets sichtbar (versteckt durch Drücken von Ctrl + e).

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

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

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

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

Solche Ausgaben (oder die Anzeige des YAML-Manifests der Ressource) können mit der gängigen Tastenkombination Ctrl + s gespeichert werden. Wo genau es gespeichert wird, ist aus der Nachricht K9s bekannt:

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

Aus den erstellten Backup-Dateien können Ressourcen wiederhergestellt werden, nachdem die systematischen Labels und Anmerkungen entfernt wurden. Dazu müssen Sie ins Verzeichnis wechseln (:dir /tmp), danach wählen Sie die benötigte Datei aus und wenden Sie apply.

Übrigens können Sie jederzeit auf ein vorheriges ReplicaSet zurücksetzen, falls Probleme mit dem aktuellen auftreten. Wählen Sie dazu das benötigte RS (:rs aus deren Liste):

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

… und führen Sie das Rollback mit Ctrl + l aus. Wir sollten eine Benachrichtigung erhalten, dass alles erfolgreich war:

k9s/whoami-5cfbdbb469 erfolgreich zurückgesetzt

Um die Replikate zu skalieren, genügt es, «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 der Container können Sie über die Shell gelangen: wechseln Sie dazu zu dem gewünschten Pod, drücken Sie «s» (shell) und wählen Sie den Container aus.

Weitere Möglichkeiten

Natürlich wird auch die Anzeige von Logs unterstützt («l» für die ausgewählte Ressource). Und um neue Logs zu sehen, müssen Sie nicht ständig Enter drücken: eine Markierung («m») genügt, danach werden nur neue Nachrichten verfolgt.

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

In demselben Fenster können Sie auch den Zeitrahmen für die Ausgabe der Logs auswählen:

  • Taste «1» — für 1 Minute;
  • «2» — 5 Minuten;
  • «3» — 15 Minuten;
  • «4» — 30 Minuten;
  • «5» — 1 Stunde;
  • «0» — während der gesamten Lebensdauer des Pods.

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

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

Hier können Sie die Anzahl der Ressourcen und deren Zustand sehen (die grünen zeigen an, dass sie den Status Running).

Eine weitere interessante Funktion von K9s heißt Popeye. Sie überprüft alle Ressourcen auf bestimmte Korrektheitskriterien und gibt das erreichte „Rating“ mit Erklärungen aus. So kann man zum Beispiel sehen, dass es an Proben oder Limitierungen fehlt oder dass ein bestimmter Container als Root ausgeführt werden kann...

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

Es gibt grundlegende Unterstützung für Helm. So kann man zum Beispiel die im Cluster bereitgestellten Releases einsehen:

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

Benchmark

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

Um ihn zu aktivieren, ist eine Aktivierung des Port-Forward in dem Pod erforderlich. Wählen Sie dazu den Pod aus und drücken Sie Shift + f, um in das Untermenü des Port-Forward mit dem Alias „pf“ zu gelangen.

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

Nach der Auswahl des Ports und Drücken von Ctrl + b wird der Benchmark selbst gestartet. Die Ergebnisse werden in /tmp gespeichert und sind für eine 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, müssen Sie eine Datei erstellen. $HOME/.k9s/bench-.yml (dies 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
    # 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 bei Diensten 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 Sicht der Spalten für die Ressourcenlisten wird durch das Erstellen einer Datei modifiziert. $HOME/.k9s/views.yml. Ein Beispiel für ihren Inhalt:

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

Es fehlt jedoch eine Spalte für Labels, wofür es eine Issue im Projekt gibt..

Die Sortierung nach Spalten erfolgt mit Tastenkombinationen:

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

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

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

Plugins

Letztendlich Plugins erlauben sie es, die Möglichkeiten von K9s zu erweitern. Ich habe in meiner Arbeit nur eines davon verwendet — kubectl get all -n $namespace.

Das sieht folgendermaßen aus. Erstellen Sie eine Datei $HOME/.k9s/plugin.yml mit folgendem Inhalt:

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

Jetzt können Sie in den Namespace wechseln und auf „g“ drücken, um die entsprechende Kommando auszuführen:

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

Unter den Plugins gibt es beispielsweise Integrationen mit kubectl-jq und dem Log-Anzeige-Tool stern.

Fazit

Meiner Meinung nach erwies sich K9s als sehr praktisch: Man gewöhnt sich schnell daran, alles Nötige ohne Verwendung zu suchen. kubectl. Ich war beeindruckt von der Protokollanzeige und deren Speicherung, der schnellen Bearbeitung von Ressourcen und der allgemeinen Geschwindigkeit*. Besonders nützlich war der Popeye-Modus. Erwähnenswert sind zudem die Möglichkeiten, Plugins zu erstellen und die Anwendung nach eigenen Bedürfnissen anzupassen.

* Obwohl ich bei großen Protokollmengen auch langsame Reaktionen von K9s bemerkt habe. In solchen Momenten benötigte das Tool 2 Kerne des Intel Xeon E312xx und konnte sogar einfrieren.

Was fehlt momentan? Eine schnelle Rückkehr zur vorherigen Version (nicht die Rede von RS) ohne den Wechsel in das Verzeichnis. Zudem erfolgt die Wiederherstellung nur für nur die Ressource: Wenn Sie eine Annotation oder ein Label gelöscht haben, müssen Sie die gesamte Ressource löschen und wiederherstellen (hier ist ein Wechsel in das Verzeichnis erforderlich). Ein weiteres kleines Manko – es fehlen Datumsangaben für diese gespeicherten „Backups“.

P.S.

Lesen Sie auch in unserem Blog:

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster