
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 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/k9sFür einige Linux-Distributionen und andere Betriebssysteme gibt es ebenfalls vorinstallierte . 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/binEs 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).

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.
![]()
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.

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:
![]()
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:

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.
![]()
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:

(Jede dieser Ressourcen kann bearbeitet, geändert und erstellt werden. describe.)
Hier ist der Deployment mit Ingress:

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).

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):

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):

… und rollback mit Ctrl + l ausführen. Wir sollten eine Benachrichtigung erhalten, dass alles erfolgreich war:
k9s/whoami-5cfbdbb469 erfolgreich zurückgesetztUm die Replikate zu skalieren, genügt es, die Taste „s“ (scale) zu drücken und die gewünschte Anzahl an Instanzen auszuwählen:

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.

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:

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…

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 — 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.

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.


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 .
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 Fertige Beispiele (7 Stück) sind verfügbar. Hier ist ein Beispiel für eines dieser Skins (in der Marine):

Plugins
Schließlich 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

stern. .
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
