Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Ü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 besteht darin, die Navigation, Überwachung und Verwaltung 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 existiert seit über anderthalb Jahren: Der erste Commit erfolgte am 1. Februar 2019. Zum Zeitpunkt des Verfassens dieses Artikels gibt es mehr als 9000 Sterne GitHub und etwa 80 Mitwirkende. Mal sehen, was k9s kann?

Installation und Start

Dies ist eine Clientanwendung (in Bezug auf den Kubernetes-Cluster), die sich am einfachsten als Docker-Image ausführen lässt:

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

Für einige Linux-Distributionen und andere Betriebssysteme gibt es auch einbaufertige Versionen пакеты. 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

Für den K8s-Cluster selbst gelten keine besonderen Anforderungen. Den Testberichten zufolge funktioniert die Anwendung auch mit älteren Kubernetes-Versionen wie 1.12.

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

Navigation

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

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Gehe zu Befehlsmodus erfolgt durch Drücken von „:“. Danach können Sie den Betrieb von k9s mithilfe von Befehlen steuern – um beispielsweise die Liste der StatefulSets (im aktuellen Namespace) anzuzeigen, können Sie eingeben :sts.

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Für einige andere Kubernetes-Ressourcen:

  • :ns — Namensräume;
  • :deploy – Bereitstellungen;
  • :ing – Einbrüche;
  • :svc - Dienstleistungen.

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

Es ist auch praktisch, die Liste der über Hotkey-Kombinationen verfügbaren Befehle im aktuellen Fenster anzuzeigen: Klicken Sie dazu einfach auf „?“.

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Auch in k9s gibt es Suchmodus, um dorthin zu gelangen, genügt die Eingabe von „/“. Damit wird eine Suche nach dem Inhalt des aktuellen „Fensters“ durchgeführt. Nehmen wir an, Sie haben bereits zuvor eingetreten :ns, haben Sie eine Liste der geöffneten Namespaces. Wenn es zu viele davon gibt, genügt es, in das Fenster mit Namespaces einzutreten, um nicht lange nach unten zu scrollen /mynamespace.

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

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Die Suche funktioniert in allen Arten von Fenstern, einschließlich Protokollen, der Anzeige von YAML-Manifesten usw describe Weitere Informationen zu diesen Funktionen finden Sie weiter unten.

Wie sieht der gesamte Navigationsfluss aus?

Mit dem Befehl :ctx Sie können einen Kontext auswählen:

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Um einen Namensraum auszuwählen, gibt es den bereits erwähnten Befehl :ns, und dann können Sie die Suche nach dem gewünschten Raum verwenden: /test.

Wenn wir nun die Ressource auswählen, die uns interessiert (z. B. dasselbe StatefulSet), werden die entsprechenden Informationen dazu angezeigt: Wie viele Pods laufen, mit kurzen Informationen darüber.

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Möglicherweise sind nur Pods von Interesse – dann reicht es, einzutreten :pod. Im Fall von ConfigMaps (:cm - für die Liste dieser Ressourcen) können Sie das gewünschte Objekt auswählen und auf „u“ klicken, woraufhin K9s Ihnen mitteilt, wer es konkret nutzt (dieses CM).

Eine weitere praktische Funktion zum Anzeigen von Ressourcen ist deren „x-ray“ (Röntgenansicht). Dieser Modus wird durch den Befehl aufgerufen :xray RESOURCE 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 Terminalschnittstelle für Kubernetes
(Jede dieser Ressourcen kann bearbeitet, geändert und erstellt werden describe.)

Und hier ist die Bereitstellung mit Ingress:

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Arbeiten mit Ressourcen

Sie können Informationen zu jeder Ressource in YAML oder seiner eigenen Version abrufen describe durch Drücken der entsprechenden Tastenkombinationen („y“ bzw. „d“). Natürlich gibt es noch grundlegendere Vorgänge: Ihre Liste und Tastaturkürzel sind dank einer praktischen „Kopfzeile“ in der Benutzeroberfläche immer sichtbar (durch Drücken von Strg + e ausgeblendet).

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

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

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

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Diese Ausgabe (oder die Ausgabe der Anzeige des YAML-Ressourcenmanifests) kann mit der bekannten Tastenkombination Strg + s gespeichert werden. Wo es gespeichert wird, ist aus der K9s-Nachricht ersichtlich:

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

Sie können Ressourcen auch aus den erstellten Sicherungsdateien wiederherstellen, nachdem Sie 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 es Probleme mit dem aktuellen gibt. Wählen Sie dazu den gewünschten RS aus (:rs für ihre Liste):

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

... und Rollback mit Strg + l. Wir sollten eine Benachrichtigung erhalten, dass alles gut gelaufen ist:

k9s/whoami-5cfbdbb469 successfully rolled back

Und um die Replikate zu skalieren, klicken Sie einfach auf das „s“ (Skalierung) und wählen Sie die gewünschte Anzahl an Instanzen aus:

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

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

Andere Eigenschaften

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

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Außerdem können Sie im selben Fenster den Zeitbereich für die Ausgabe von Protokollen auswählen:

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

Sonderbetriebsart Impuls (Befehl :pulse) zeigt allgemeine Informationen zum Kubernetes-Cluster:

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Darin sehen Sie die Anzahl der Ressourcen und deren Status (grün zeigt diejenigen an, die den Status haben). Running).

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

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Es gibt grundlegende Helm-Unterstützung. So können Sie beispielsweise die im Cluster bereitgestellten Releases sehen:

:helm all # все
:helm $namespace # в конкретном пространстве имен

Benchmark

Sogar in K9 eingebaut Hallo ist ein einfacher HTTP-Serverlastgenerator, eine Alternative zum bekannteren ab (ApacheBench).

Um es zu aktivieren, müssen Sie Port-Forward im Pod aktivieren. Wählen Sie dazu den Pod aus und drücken Sie Umschalt + F. Gehen Sie mit dem Alias ​​„pf“ zum Port-Forward-Untermenü.

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Nachdem Sie den Port ausgewählt und Strg + B gedrückt haben, wird der Benchmark selbst gestartet. Die Ergebnisse seiner Arbeit werden in gespeichert /tmp und stehen zur späteren Ansicht in K9s zur Verfügung.

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes
Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

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

NB: Es ist wichtig, dass die Erweiterung aller YAML-Dateien in einem Verzeichnis vorhanden ist .k9s es war genau .yml (.yaml funktioniert 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

Das Erscheinungsbild der Spalten für Ressourcenlisten wird durch das Erstellen einer Datei geändert $HOME/.k9s/views.yml. Ein Beispiel für den Inhalt:

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

Es stimmt, es gibt nicht genügend Spalten für Beschriftungen, für die es eine gibt Problem im Projekt.

Die Sortierung nach Spalten erfolgt über Tastaturkürzel:

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

Wenn jemandem das Standardfarbschema nicht gefällt, unterstützt K9s es sogar Häute. Es stehen fertige Muster (7 Stück) zur Verfügung hier. Hier ist ein Beispiel für einen dieser Skins (in der Marine):

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Plugins

Schließlich wird die Plugins ermöglichen es Ihnen, die Fähigkeiten von K9s zu erweitern. Ich selbst habe in meiner Arbeit nur eines davon verwendet - kubectl get all -n $namespace.

Es sieht aus wie das. Erstellen Sie eine Datei $HOME/.k9s/plugin.yml mit Inhalten wie diesem:

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 zum Namespace gehen und „g“ drücken, um den entsprechenden Befehl auszuführen:

Überblick über k9s – eine erweiterte Terminalschnittstelle für Kubernetes

Zu den Plugins zählen beispielsweise Integrationen mit kubectl-jq und ein Dienstprogramm zum Anzeigen von Protokollen Stern.

Abschluss

Für meinen Geschmack erwies sich die Arbeit mit K9 als sehr praktisch: Man kann sich schnell daran gewöhnen, nach allem zu suchen, was man braucht, ohne es zu benutzen. kubectl. Ich war zufrieden mit der Ansicht der Protokolle und deren Speicherung, der schnellen Bearbeitung von Ressourcen, der Arbeitsgeschwindigkeit im Allgemeinen *, der Popeye-Modus erwies sich als nützlich. Besonders hervorzuheben ist die Möglichkeit, Plugins zu erstellen und die Anwendung an Ihre Bedürfnisse anzupassen.

* Allerdings ist mir bei einer großen Menge an Protokollen auch der langsame Betrieb von K9s aufgefallen. In solchen Momenten „fraß“ das Dienstprogramm 2 Kerne vom Intel Xeon E312xx und konnte sogar einfrieren.

Was fehlt im Moment? Schnelles Rollback zur vorherigen Version (wir sprechen hier nicht von RS), ohne in das Verzeichnis zu gehen. Darüber hinaus erfolgt die Wiederherstellung nur für lediglich Ressource: Wenn Sie eine Anmerkung oder ein Etikett löschen, müssen Sie die gesamte Ressource löschen und wiederherstellen (hier müssen Sie in das Verzeichnis wechseln). Eine weitere Kleinigkeit: Es gibt nicht genügend Datum für solche gespeicherten „Backups“.

PS

Lesen Sie auch auf unserem Blog:

Source: habr.com

Kommentar hinzufügen