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: