
Biedt een terminalgebruikersinterface voor interactie met Kubernetes-clusters. Het doel van dit open source-project is om het navigeren, bewaken en beheren van applicaties in K8s eenvoudiger te maken. K9s bewaakt voortdurend wijzigingen in Kubernetes en biedt snelle opdrachten voor het werken met bewaakte resources.
Het project is geschreven in Go en bestaat al meer dan anderhalf jaar: de eerste commit werd gedaan op 1 februari 2019. Op het moment van schrijven staan er meer dan 9000 sterren op en ongeveer 80 bijdragers. Laten we eens kijken wat k9s kunnen doen?
Installatie en lancering
Dit is een clienttoepassing (met betrekking tot het Kubernetes-cluster), die het eenvoudigst kan worden uitgevoerd als een Docker-image:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sVoor sommige Linux-distributies en andere besturingssystemen zijn er ook kant-en-klare versies . Over het algemeen kunt u voor Linux-systemen het volgende binaire bestand installeren:
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/binEr zijn geen specifieke vereisten voor het K8s-cluster zelf. Volgens beoordelingen werkt de applicatie met oudere versies van Kubernetes, zoals 1.12.
De applicatie wordt gestart met de standaardconfiguratie. .kube/config - vergelijkbaar met hoe het doet kubectl.
Navigatie
Standaard wordt een venster geopend met de standaardnaamruimte die voor de context is opgegeven. Dat wil zeggen, als u zich heeft geregistreerd kubectl config set-context --current --namespace=test, dan wordt de naamruimte geopend test. (Zie hieronder voor het wijzigen van contexten/naamruimten.)

Overgang naar opdrachtmodus wordt gedaan door op ":" te drukken. Daarna kunt u k9s besturen met behulp van opdrachten. Om bijvoorbeeld een lijst met StatefulSets (in de huidige naamruimte) te bekijken, kunt u typen :sts.
![]()
Voor enkele andere Kubernetes-bronnen:
-
:ns— Naamruimten; -
:deploy— Implementaties; -
:ing- Ingangen; -
:svc— Diensten.
Om een volledige lijst met beschikbare brontypen weer te geven, is er een opdracht :aliases.
Het is ook handig om de lijst met opdrachten te bekijken die via sneltoetscombinaties binnen het huidige venster beschikbaar zijn: klik hiervoor eenvoudig op “?”.

Ook in k9s is er zoekmodus, om er te komen is het voldoende om “/” in te voeren. Hiermee kunt u de inhoud van het huidige "venster" doorzoeken. Stel dat je eerder bent binnengekomen :ns, heb je een lijst met naamruimten open. Als er te veel zijn, is het voldoende om het venster met naamruimten in te voeren om niet te lang naar beneden te hoeven scrollen /mynamespace.
Om op labels te zoeken, kunt u alle pods in de gewenste naamruimte selecteren en vervolgens bijvoorbeeld invoeren: / -l app=whoami. We krijgen een lijst met pods met dit label:
![]()
Zoeken werkt in alle soorten vensters, inclusief logboeken, YAML-manifestweergave en describe voor bronnen - zie hieronder voor meer informatie over deze opties.
Hoe ziet het algehele navigatieproces eruit?
Met de opdracht :ctx U kunt de context selecteren:

Om een naamruimte te selecteren, bestaat de reeds genoemde opdracht. :ns, en dan kunt u zoeken naar de gewenste ruimte: /test.
Als we nu de resource selecteren waarin we geïnteresseerd zijn (bijvoorbeeld dezelfde StatefulSet), wordt de bijbehorende informatie hiervoor weergegeven: hoeveel pods er actief zijn, met beknopte informatie over hen.
![]()
Alleen pods kunnen interessant zijn - dan is het voldoende om in te voeren :pod. In het geval van ConfigMaps (:cm — voor een lijst van deze bronnen) kunt u het object van interesse selecteren en op "u" drukken, waarna K9s u precies vertelt wie (deze CM) het gebruikt.
Een andere handige functie voor het bekijken van bronnen is hun "Röntgenfoto" (röntgenfoto). Deze modus wordt aangeroepen door de opdracht :xray RESOURCE en... het is makkelijker om te laten zien hoe het werkt, dan om uit te leggen. Hier is een illustratie voor StatefulSets:

(Elk van deze bronnen kan worden bewerkt, aangepast, describe.)
En hier is Deployment met Ingress:

Werken met hulpbronnen
Voor elke bron kunt u informatie verkrijgen in YAML of de bijbehorende describe door op de overeenkomstige sneltoetsen te drukken (respectievelijk “y” en “d”). Er zijn natuurlijk nog meer basisbewerkingen: hun lijst en sneltoetsen zijn altijd zichtbaar dankzij de handige 'kop' in de interface (verborgen door op Ctrl + e te drukken).

Bij het bewerken van een bron ('e' na selectie) wordt de teksteditor die is gedefinieerd in de omgevingsvariabelen (export EDITOR=vim).
En dit is hoe een gedetailleerde beschrijving van de bron eruit ziet (describe):

Deze uitvoer (of de uitvoer van het bekijken van het YAML-manifest van de resource) kan worden opgeslagen met de bekende sneltoets Ctrl + s. Waar het opgeslagen zal worden, zal blijken uit het bericht van de K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! U kunt ook bronnen herstellen vanuit de gemaakte back-upbestanden, nadat u systeemlabels en annotaties hebt verwijderd. Om dit te doen, moet je naar de directory gaan met hen (:dir /tmp), selecteer vervolgens het gewenste bestand en pas toe apply.
Overigens kunt u op elk gewenst moment teruggaan naar de vorige ReplicaSet als er problemen zijn met de huidige. Om dit te doen, moet u de gewenste RS selecteren (:rs (voor hun lijst):

… en terugdraaien met Ctrl + l. We zouden een melding moeten ontvangen dat alles succesvol is verlopen:
k9s/whoami-5cfbdbb469 successfully rolled backEn om de replica's te schalen, klikt u gewoon op 's' (schaal) en selecteert u het gewenste aantal kopieën:

U kunt elke container betreden via de shell. Ga hiervoor naar de gewenste pod, druk op "s" (shell) en selecteer de container.
Andere functies
Uiteraard is het ook mogelijk om logs te bekijken ("l" voor de geselecteerde resource). En om nieuwe logs te bekijken, hoeft u niet constant op Enter te drukken: markeer het gewoon ("m") en houd vervolgens alleen de nieuwe berichten bij.

In hetzelfde venster kunt u ook het tijdsbereik voor het uitgeven van logs selecteren:
- toets “1” - in 1 minuut;
- "2" - 5 minuten;
- "3" - 15 minuten;
- "4" - 30 minuten;
- "5" - 1 uur;
- "0" - voor de gehele levensduur van de pod.
Speciale bedrijfsmodus Puls (opdracht :pulse) toont algemene informatie over het Kubernetes-cluster:

Hierin kunt u het aantal bronnen en hun status zien (de bronnen met de status worden in het groen weergegeven) Running).
Een andere interessante eigenschap van K9's wordt genoemd Popeye. Alle bronnen worden gecontroleerd op bepaalde criteria van correctheid en de resulterende 'beoordeling' wordt weergegeven met uitleg. U kunt bijvoorbeeld zien dat er niet genoeg probes of limieten zijn, en dat sommige containers onder root kunnen draaien…

Basis Helm-ondersteuning is beschikbaar. Zo kunt u bijvoorbeeld de releases bekijken die op een cluster zijn geïmplementeerd:
:helm all # все
:helm $namespace # в конкретном пространстве имен
criterium
K9s heeft zelfs ingebouwde — is een eenvoudige HTTP-serverbelastinggenerator, een alternatief voor de bekendere ab (ApacheBench).
Om dit te kunnen doen, moet u poortdoorsturing inschakelen in de pod. Om dit te doen, selecteert u pod en drukt u op Shift + f, gaat u naar het submenu poort-doorsturen met behulp van de alias "pf".

Nadat u de poort hebt geselecteerd en op Ctrl + b hebt gedrukt, start de benchmark zelf. De resultaten van zijn werk worden opgeslagen in /tmp en zijn later beschikbaar om te bekijken in K9s.


Om de benchmarkconfiguratie te wijzigen, moet u een bestand maken $HOME/.k9s/bench-<my_context>.yml (gedefinieerd voor elk cluster).
NB: Het is belangrijk dat de extensie van alle YAML-bestanden in de directory .k9s het was precies .yml (.yaml werkt niet goed).
Configuratievoorbeeld:
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
interface
Het uiterlijk van kolommen voor bronnenlijsten wordt gewijzigd door een bestand aan te maken $HOME/.k9s/views.yml. Een voorbeeld van de inhoud:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Het is waar, er is geen kolom op de etiketten, wat is wat we hebben .
Sorteren op kolommen doet u met behulp van sneltoetsen:
- Shift + n — op naam;
- Shift + o - bij knooppunten;
- Shift + i — door IP;
- Shift + a — per containerlevensduur;
- Shift + t — op basis van het aantal herstarts;
- Shift + r — volgens gereedheidsstatus;
- Shift + c — op basis van CPU-verbruik;
- Shift + m — op geheugengebruik.
Als iemand het standaardkleurenschema niet leuk vindt, ondersteunt K9s zelfs . Er zijn kant-en-klare voorbeelden (7 stuks) beschikbaar . Hier is een voorbeeld van een van deze skins (bij de marine):

plugins
Tenslotte de kunt u de mogelijkheden van K9s uitbreiden. Ik heb er zelf maar één in mijn werk gebruikt - kubectl get all -n $namespace.
Het ziet er zo uit. Een bestand aanmaken $HOME/.k9s/plugin.yml met inhoud als deze:
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"Nu kunt u naar de naamruimte gaan en op "g" drukken om de bijbehorende opdracht uit te voeren:

Onder de plugins bevinden zich bijvoorbeeld integraties met kubectl-jq en een hulpprogramma voor het bekijken van logs .
Conclusie
Naar mijn mening zijn de K9's erg handig om mee te werken: je raakt er snel aan gewend om alles wat je nodig hebt te vinden zonder ze te gebruiken. kubectl. Ik vond het prettig om logs te kunnen bekijken en opslaan, bronnen snel te kunnen bewerken, de algehele werksnelheid* te hebben en de Popeye-modus bleek erg handig. Speciaal vermeldenswaardig is de mogelijkheid om plug-ins te maken en de applicatie aan te passen aan uw behoeften.
* Hoewel er een groot volume aan boomstammen was, merkte ik ook dat de K9's langzamer werkten. Op zulke momenten “at” het hulpprogramma 2 cores van de Intel Xeon E312xx op en kon zelfs vastlopen.
Wat ontbreekt er op dit moment? Snelle terugdraaiing naar de vorige versie (niet over RS) zonder naar de directory te gaan. Bovendien vindt de restauratie alleen plaats voor alleen resource: als u een annotatie of label hebt verwijderd, moet u de gehele resource verwijderen en herstellen (dit is waar u naar de map moet gaan). Een ander klein dingetje is dat de datum van dergelijke opgeslagen “backups” ontbreekt.
PS
Lees ook op onze blog:
- «";
- «";
- «.
Bron: www.habr.com
