{"id":97736,"date":"2020-10-21T14:42:17","date_gmt":"2020-10-21T12:42:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes"},"modified":"2020-10-21T14:42:17","modified_gmt":"2020-10-21T12:42:17","slug":"obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/11274841ee84b0e2c3ac74c9c738faba.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/\">K9s<\/a><\/noindex> bietet eine Terminal-Benutzeroberfl\u00e4che zur Interaktion mit Kubernetes-Clustern. Ziel dieses Open-Source-Projekts ist es, die Navigation in Anwendungen auf K8s, deren \u00dcberwachung und Verwaltung zu erleichtern. K9s verfolgt kontinuierlich \u00c4nderungen in Kubernetes und bietet schnelle Befehle f\u00fcr die Arbeit mit \u00fcberwachten Ressourcen.<\/p>\n<p>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 \u00fcber 9000 Sterne auf <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> und etwa 80 Mitwirkende. Schauen wir uns an, was k9s kann?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Installation und Ausf\u00fchrung<\/h2>\n<p>\nEs handelt sich um eine Client-Anwendung (in Bezug auf das Kubernetes-Cluster), die am einfachsten als Docker-Image gestartet werden kann:<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\/.kube\/config quay.io\/derailed\/k9s<\/code><\/pre>\n<p>\nF\u00fcr einige Linux-Distributionen und andere Betriebssysteme gibt es ebenfalls vorinstallierte <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">Pakete<\/a><\/noindex>. Im Allgemeinen k\u00f6nnen Sie f\u00fcr Linux-Systeme die Bin\u00e4rdatei installieren:<\/p>\n<pre><code class=\"bash\">sudo wget -qO- https:\/\/github.com\/derailed\/k9s\/releases\/download\/v0.22.0\/k9s_Linux_x86_64.tar.gz | tar zxvf - -C \/tmp\/\nsudo mv \/tmp\/k9s \/usr\/local\/bin<\/code><\/pre>\n<p>\nEs 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.<\/p>\n<p>Die Anwendung wird unter Verwendung der Standardkonfiguration <code>.kube\/config<\/code> gestart \u2013 \u00e4hnlich wie es <code>kubectl<\/code>.<\/p>\n<h2>Navigation<\/h2>\n<p>\nStandardm\u00e4\u00dfig wird ein Fenster mit dem Standard-Namespace ge\u00f6ffnet, der f\u00fcr den Kontext angegeben ist. Das hei\u00dft, wenn Sie eingegeben haben <code>kubectl config set-context --current --namespace=test<\/code>, wird der Namespace <code>test<\/code>. <i>ge\u00f6ffnet (Informationen zum Wechseln von Kontexten\/Namensr\u00e4umen finden Sie weiter unten). <\/i><\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Wechsel in den <b>Befehlsmodus<\/b> erfolgt durch Dr\u00fccken von \u201e:\u201c. Danach k\u00f6nnen Sie k9s mit Befehlen steuern \u2013 zum Beispiel k\u00f6nnen Sie zur Anzeige der Liste der StatefulSets (im aktuellen Namensraum) eingeben <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00fcr einige andere Kubernetes-Ressourcen:<\/p>\n<ul>\n<li> <code>:ns<\/code> \u2013 Namespaces;<\/li>\n<li> <code>:deploy<\/code> \u2013 Deployments;<\/li>\n<li> <code>:ing<\/code> \u2013 Ingresses;<\/li>\n<li> <code>:svc<\/code> \u2013 Services.<\/li>\n<\/ul>\n<p>\nUm die vollst\u00e4ndige Liste der verf\u00fcgbaren Ressourcentypen zur Ansicht zu erhalten, verwenden Sie den Befehl <code>:aliases<\/code>.<\/p>\n<p>Es ist praktisch, auch die Liste der verf\u00fcgbaren Befehle \u00fcber die aktuellen Hotkey-Kombinationen im Rahmen des aktuellen Fensters anzuzeigen: Dazu m\u00fcssen Sie einfach \u201e?\u201c dr\u00fccken.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK9s bietet auch einen <b>Suchmodus<\/b>, zu dem Sie gelangen, indem Sie einfach \u201e\/\u201c eingeben. Damit k\u00f6nnen Sie im Inhalt des aktuellen \u201eFensters\u201c suchen. Angenommen, Sie haben zuvor eingegeben <code>:ns<\/code>, Sie haben eine Liste von Namensr\u00e4umen ge\u00f6ffnet. Wenn es zu viele sind, reicht es aus, im Fenster mit den Namensr\u00e4umen einzugeben, <code>\/mynamespace<\/code>.<\/p>\n<p>Um nach Labels zu suchen, k\u00f6nnen alle Pods im gew\u00fcnschten Namensraum ausgew\u00e4hlt werden, gefolgt von der Eingabe, zum Beispiel, <code>\/ -l app=whoami<\/code>. Wir erhalten eine Liste von Pods mit diesem Label:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Suche funktioniert in allen Fenstern, einschlie\u00dflich Protokollen, YAML-Manifestsicht und <code>describe<\/code> f\u00fcr Ressourcen \u2013 mehr zu diesen M\u00f6glichkeiten, siehe unten.<\/p>\n<p>Wie sieht generell die Abfolge von Aktionen zur Navigation aus?<\/p>\n<p>Mit dem Befehl <code>:ctx<\/code> kann der Kontext ausgew\u00e4hlt werden:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUm einen Namensraum auszuw\u00e4hlen, gibt es den bereits erw\u00e4hnten Befehl <code>:ns<\/code>, und danach kann die Suche f\u00fcr den gew\u00fcnschten Raum verwendet werden: <code>\/test<\/code>.<\/p>\n<p>Wenn wir nun die interessierende Ressource (zum Beispiel denselben StatefulSet) ausw\u00e4hlen, wird die entsprechende Information angezeigt: wie viele Pods mit kurzen Informationen \u00fcber sie gestartet sind.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs k\u00f6nnten nur die Pods von Interesse sein \u2013 dann reicht es, einzugeben <code>:pod<\/code>. Im Falle von ConfigMaps (<code>:cm<\/code> \u2013 f\u00fcr die Liste dieser Ressourcen) kann das interessierende Objekt ausgew\u00e4hlt und die Taste \u201eu\u201c gedr\u00fcckt werden, woraufhin K9s anzeigt, wer genau es (diese CM) verwendet.<\/p>\n<p>Eine weitere praktische Funktion zur Ansicht von Ressourcen ist deren <b>\u201eR\u00f6ntgen\u201c (XRay-Ansicht)<\/b>. Dieser Modus wird mit dem Befehl <code>:xray RESOURCE<\/code> aufgerufen und\u2026 es ist einfacher zu zeigen, wie es funktioniert, als zu erkl\u00e4ren. Hier ist eine Illustration f\u00fcr StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Jede dieser Ressourcen kann bearbeitet, ge\u00e4ndert und erstellt werden. <code>describe<\/code>.)<\/i><\/p>\n<p>Hier ist der Deployment mit Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Arbeiten mit Ressourcen<\/h2>\n<p>\nZu jeder Ressource k\u00f6nnen Informationen im YAML-Format oder deren <code>describe<\/code> durch Dr\u00fccken der entsprechenden Tastenkombinationen (\u201ey\u201c und \u201ed\u201c jeweils) abgerufen werden. Die grundlegenden Operationen sind nat\u00fcrlich noch mehr: ihre Liste und Tastenkombinationen sind dank der praktischen \u201eKopfzeile\u201c in der Benutzeroberfl\u00e4che immer sichtbar (versteckt durch Dr\u00fccken von Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBei der Bearbeitung einer Ressource (\u201ee\u201c nach ihrer Auswahl) \u00f6ffnet sich der Texteditor, der in den Umgebungsvariablen definiert ist (<code>export EDITOR=vim<\/code>).<\/p>\n<p>So sieht eine detaillierte Beschreibung der Ressource aus (<code>describe<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDieser Output (oder der Output der Anzeige des YAML-Manifests der Ressource) kann \u00fcber die gewohnte Tastenkombination Ctrl + s gespeichert werden. Wo es gespeichert wird, wird aus der Nachricht von K9s bekannt sein:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml erfolgreich gespeichert!<\/code><\/pre>\n<p>\nAus den erstellten Backup-Dateien k\u00f6nnen Ressourcen wiederhergestellt werden, nachdem die Systemlabel und Anmerkungen entfernt wurden. Dazu muss man in das Verzeichnis wechseln (<code>:dir \/tmp<\/code>), danach die gew\u00fcnschte Datei ausw\u00e4hlen und anwenden <code>apply<\/code>.<\/p>\n<p>\u00dcbrigens kann man jederzeit auf den vorherigen ReplicaSet zur\u00fccksetzen, falls es mit dem aktuellen Probleme gibt. Dazu muss man den entsprechenden RS ausw\u00e4hlen (<code>:rs<\/code> f\u00fcr deren Liste):<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 und rollback mit Ctrl + l ausf\u00fchren. Wir sollten eine Benachrichtigung erhalten, dass alles erfolgreich war:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 erfolgreich zur\u00fcckgesetzt<\/code><\/pre>\n<p>\nUm die Replikate zu skalieren, gen\u00fcgt es, die Taste \u201es\u201c (scale) zu dr\u00fccken und die gew\u00fcnschte Anzahl an Instanzen auszuw\u00e4hlen:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn jeden Container kann man \u00fcber die Shell gelangen: Dazu w\u00e4hlt man den gew\u00fcnschten Pod aus, dr\u00fcckt die Taste \u201es\u201c (shell) und w\u00e4hlt den Container aus.<\/p>\n<h2>Weitere M\u00f6glichkeiten<\/h2>\n<p>\nNat\u00fcrlich wird auch das Ansehen der Protokolle unterst\u00fctzt (\u201el\u201c f\u00fcr die ausgew\u00e4hlte Ressource). Um neue Protokolle zu sehen, muss man nicht st\u00e4ndig Enter dr\u00fccken: Es gen\u00fcgt, eine Markierung (\u201em\u201c) zu setzen, um nur neue Nachrichten zu verfolgen.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEbenso kann in diesem Fenster ein Zeitraum f\u00fcr die Ausgabe der Protokolle ausgew\u00e4hlt werden:<\/p>\n<ul>\n<li> Taste \u201e1\u201c \u2014 f\u00fcr 1 Minute;<\/li>\n<li> \u201e2\u201c \u2014 5 Minuten;<\/li>\n<li> \u201e3\u201c \u2014 15 Minuten;<\/li>\n<li> \u201e4\u201c \u2014 30 Minuten;<\/li>\n<li> \u201e5\u201c \u2014 1 Stunde;<\/li>\n<li> \"0\" \u2014 f\u00fcr die gesamte Lebensdauer des Pods.<\/li>\n<\/ul>\n<p>\nEin spezieller Betriebsmodus von Pulse (Befehl <code>:pulse<\/code>) zeigt allgemeine Informationen \u00fcber das Kubernetes-Cluster an:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier sieht man die Anzahl der Ressourcen und ihren Status (gr\u00fcn zeigt die an, die den Status haben <code>Laufend<\/code>).<\/p>\n<p>Eine weitere interessante Funktion von K9s hei\u00dft <b>Popeye<\/b>. Sie \u00fcberpr\u00fcft alle Ressourcen auf bestimmte Kriterien der Korrektheit und gibt das erhaltene \u201eRating\u201c mit Erkl\u00e4rungen aus. Zum Beispiel kann man sehen, dass bestimmte Probes oder Limits fehlen, oder dass ein Container als root gestartet werden k\u00f6nnte\u2026<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs gibt grundlegende Unterst\u00fctzung f\u00fcr Helm. Zum Beispiel kann man so die im Cluster bereitgestellten Releases ansehen:<\/p>\n<pre><code class=\"bash\">:helm all # alle\n:helm $namespace # im spezifischen Namespace\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nIn K9s wurde sogar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 ein einfacher Lastgenerator f\u00fcr HTTP-Server, als Alternative zum bekannteren ab (ApacheBench), integriert.<\/p>\n<p>Um ihn zu aktivieren, ist es notwendig, Port-Forward im Pod zu aktivieren. Dazu w\u00e4hlt man den Pod aus und dr\u00fcckt Shift + f, um ins Untermen\u00fc Port-Forward \u00fcber den Alias \u201epf\u201c zu wechseln.<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNach der Auswahl des Ports und Dr\u00fccken von Ctrl + b wird der Benchmark gestartet. Die Ergebnisse seiner Ausf\u00fchrung werden in <code>\/tmp<\/code> gespeichert und sind f\u00fcr die sp\u00e4tere Ansicht in K9s verf\u00fcgbar. <\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUm die Konfiguration des Benchmarks zu \u00e4ndern, muss eine Datei erstellt werden. <code>$HOME\/.k9s\/bench-.yml<\/code> (wird f\u00fcr jeden Cluster festgelegt).<\/p>\n<p><i>NB: Es ist wichtig, dass die Erweiterung aller YAML-Dateien im Verzeichnis <code>.k9s<\/code> genau <code>.yml<\/code> (<code>.yaml<\/code> nicht korrekt funktioniert).<\/i><\/p>\n<p>Beispielkonfiguration:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Anzahl der Threads\n    concurrency: 2\n    # Anzahl der Anfragen\n    requests: 1000\n  containers:\n    # Einstellungen f\u00fcr den Benchmark-Container\n    # Der Container wird als namespace\/pod-name:container-name definiert\n    default\/nginx:nginx:\n      concurrency: 2\n      requests: 10000\n      http:\n        path: \/\n        method: POST\n        body:\n          {\"foo\":\"bar\"}\n        header:\n          Accept:\n            - text\/html\n          Content-Type:\n            - application\/json\n services:\n    # Leistungsbenchmarks k\u00f6nnen auf Services wie NodePort und LoadBalancer durchgef\u00fchrt werden\n    # Syntax: namespace\/service-name\n    default\/nginx:\n      concurrency: 5\n      requests: 500\n      http:\n        method: GET\n        path: \/auth\n      auth:\n        user: flant\n        password: s3cr3tp455w0rd\n<\/code><\/pre>\n<p><\/p>\n<h2>Benutzeroberfl\u00e4che<\/h2>\n<p>\nDie Spaltenansicht f\u00fcr Ressourcenlisten wird durch Erstellen einer Datei modifiziert <code>$HOME\/.k9s\/views.yml<\/code>. Ein Beispiel f\u00fcr ihren Inhalt:<\/p>\n<pre><code class=\"plaintext\">k9s:\n views:\n   v1\/pods:\n     columns:\n       - ALTER\n       - NAMESPACE\n       - NAME\n       - IP\n       - KNOTEN\n       - STATUS\n       - BEREIT\n   v1\/services:\n     columns:\n       - ALTER\n       - NAMESPACE\n       - NAME\n       - TYP\n       - CLUSTER-IP\n<\/code><\/pre>\n<p>\n<i>Allerdings fehlt eine Spalte f\u00fcr Labels, was ein <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">Problem im Projekt darstellt.<\/a><\/noindex>.<\/i><\/p>\n<p>Die Sortierung nach Spalten erfolgt \u00fcber Tastenkombinationen:<\/p>\n<ul>\n<li> Shift + n \u2014 nach Name;<\/li>\n<li> Shift + o \u2014 nach Knoten;<\/li>\n<li> Shift + i \u2014 nach IP;<\/li>\n<li> Shift + a \u2014 nach Lebensdauer des Containers;<\/li>\n<li> Shift + t \u2014 nach Anzahl der Neustarts;<\/li>\n<li> Shift + r \u2014 nach Status der Bereitschaft;<\/li>\n<li> Shift + c \u2014 nach CPU-Verbrauch;<\/li>\n<li> Shift + m \u2014 nach Speicherverbrauch.<\/li>\n<\/ul>\n<p>\nWenn jemand das standardm\u00e4\u00dfige Farbschema nicht mag, unterst\u00fctzt K9s sogar <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">Skins.<\/a><\/noindex>Fertige Beispiele (7 St\u00fcck) sind verf\u00fcgbar. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">hier<\/a><\/noindex>Hier ist ein Beispiel f\u00fcr eines dieser Skins <i>(in der Marine)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugins<\/h2>\n<p>\nSchlie\u00dflich <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">erlauben Plugins, die Funktionen von K9s zu erweitern. Ich habe in der Praxis nur eines davon verwendet \u2014<\/a><\/noindex> kubectl get all -n $namespace <code>Das sieht folgenderma\u00dfen aus. Erstellen Sie eine Datei<\/code>.<\/p>\n<p>$HOME\/.k9s\/plugin.yml <code>plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: alle abrufen\n   scopes:\n   - all\n   command: sh\n   background: false\n   args:\n   - -c\n   - \"kubectl -n $NAMESPACE get all -o wide | less\"<\/code> mit folgendem Inhalt:<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: alle abrufen\n   scopes:\n   - all\n   command: sh\n   background: false\n   args:\n   - -c\n   - \"kubectl -n $NAMESPACE get all -o wide | less\"<\/code><\/pre>\n<p>\nUnter den Plugins gibt es beispielsweise Integrationen mit kubectl-jq und dem Tool zum Anzeigen von Logs<\/p>\n<p><img decoding=\"async\" alt=\"\u00dcberblick \u00fcber k9s \u2013 eine erweiterte Terminaloberfl\u00e4che f\u00fcr Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nstern. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">Meiner Meinung nach war K9s in der Arbeit sehr angenehm: Man gew\u00f6hnt sich schnell daran, alles Notwendige ohne Nutzung<\/a><\/noindex>.<\/p>\n<h2>Fazit<\/h2>\n<p>\nzu suchen. <code>kubectl<\/code>. Die \u00dcberpr\u00fcfung der Protokolle und deren Speicherung, die schnelle Bearbeitung von Ressourcen, die allgemeine Geschwindigkeit* und der n\u00fctzliche Modus Popeye waren erfreulich. Besonders erw\u00e4hnenswert sind die M\u00f6glichkeiten, Plugins zu erstellen und die Anwendung an die eigenen Bed\u00fcrfnisse anzupassen.<\/p>\n<p><i>* Obwohl ich bei gro\u00dfer Protokollmenge auch langsame Arbeitsgeschwindigkeit von K9s bemerkt habe. In solchen Momenten ben\u00f6tigte das Tool 2 Kerne des Intel Xeon E312xx und konnte sogar abst\u00fcrzen.<\/i><\/p>\n<p>Was fehlt derzeit? Ein schneller R\u00fcckgriff auf die vorherige Version (nicht RS) ohne das Wechseln in das Verzeichnis. Zudem erfolgt die Wiederherstellung nur f\u00fcr <i>alles<\/i> Ressource: Wenn Sie eine Annotation oder ein Label gel\u00f6scht haben, m\u00fcssen Sie die gesamte Ressource l\u00f6schen und wiederherstellen (hier ist das Wechseln in das Verzeichnis erforderlich). Ein weiteres kleines Manko ist das Fehlen eines Datums f\u00fcr solche gespeicherten \u201eBackups\u201c.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">\u00dcberblick \u00fcber grafische Benutzeroberfl\u00e4chen f\u00fcr Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Ank\u00fcndigung der Kubernetes Web View Benutzeroberfl\u00e4che (und kurzer \u00dcberblick \u00fcber andere Web-UIs f\u00fcr Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox und andere Konsolenoberfl\u00e4chen f\u00fcr Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/524196\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>K9s \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 K8s, \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. K9s \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Kubernetes \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043b\u0435\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00dcberblick k9s - einer fortschrittlichen Terminaloberfl\u00e4che f\u00fcr Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-21T12:42:17+00:00","article:modified_time":"2020-10-21T12:42:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97736","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:14:39","updated":"2022-10-03 07:12:05","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}