
Tillhandahåller ett terminalgränssnitt för att interagera med Kubernetes-kluster. Målet med detta projekt med öppen källkod är att göra det enkelt att navigera, övervaka och hantera applikationer i K8s. K9s övervakar kontinuerligt förändringar i Kubernetes och tillhandahåller snabba kommandon för att arbeta med övervakade resurser.
Projektet är skrivet i Go och har funnits i över ett och ett halvt år: den första commiten gjordes den 1 februari 2019. I skrivande stund finns det 9000+ stjärnor på och cirka 80 bidragsgivare. Låt oss se vad K9:or kan göra?
Installation och start
Detta är en klientapplikation (i relation till Kubernetes-klustret) som enklast körs som en Docker-avbildning:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sFör vissa Linuxdistributioner och andra operativsystem finns det även färdiga att installera. . Generellt sett kan du för Linux-system installera binärfilen:
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/binDet finns inga specifika krav för själva K8s-klustret. Enligt recensioner fungerar applikationen med äldre versioner av Kubernetes, till exempel 1.12.
Applikationen startas med standardkonfigurationen. .kube/config - liknande hur det gör kubectl.
Навигация
Som standard öppnas ett fönster med standardnamnrymden som anges för kontexten. Det vill säga om du har registrerat dig kubectl config set-context --current --namespace=test, då öppnas namnrymden test. (Se nedan för ändring av kontexter/namnrymder.)

Övergång till kommandoläge görs genom att trycka på ":". Efter det kan du styra k9s med hjälp av kommandon - till exempel, för att visa en lista över StatefulSets (i det aktuella namnutrymmet) kan du skriva :sts.
![]()
För några andra Kubernetes-resurser:
-
:ns— Namnrymder; -
:deploy— Utplaceringar; -
:ing- Inträngningar; -
:svc— Tjänster.
För att visa en fullständig lista över tillgängliga resurstyper finns det ett kommando :aliases.
Det är också bekvämt att visa listan över kommandon som är tillgängliga via snabbtangentkombinationer i det aktuella fönstret: för att göra detta, klicka helt enkelt på “?”.

Även i k9s finns det sökläge, för att gå till vilken det räcker att ange “/”. Det gör det möjligt att söka igenom innehållet i det aktuella "fönstret". Låt oss säga om du gick in tidigare :ns, du har en lista med namnrymder öppna. Om det finns för många av dem, räcker det att gå in i fönstret med namnrymder för att inte behöva scrolla ner länge. /mynamespace.
För att söka efter etiketter kan du välja alla poddar i önskat namnutrymme och sedan ange, till exempel, / -l app=whoami. Vi får en lista med poddar med denna etikett:
![]()
Sökningen fungerar i alla typer av fönster, inklusive loggar, visning av YAML-manifest och describe för resurser - se nedan för mer information om dessa alternativ.
Hur ser den övergripande navigeringssekvensen ut?
Med kommandot :ctx du kan välja kontexten:

För att välja ett namnrymd finns det redan nämnda kommandot. :ns, och sedan kan du använda sökfunktionen för att hitta önskat utrymme: /test.
Om vi nu väljer den resurs vi är intresserade av (till exempel samma StatefulSet), kommer motsvarande information att visas för den: hur många poddar som körs med kortfattad information om dem.
![]()
Endast poddar kan vara av intresse – sedan räcker det att gå in :pod. När det gäller ConfigMaps (:cm — för en lista över dessa resurser) kan du välja objektet av intresse och trycka på "u", varefter K9s kommer att berätta exakt vem (denna CM) som använder det.
En annan praktisk funktion för att visa resurser är deras "Röntgen" (röntgenvy). Detta läge anropas av kommandot :xray RESOURCE och... det är lättare att visa hur det fungerar än att förklara. Här är en illustration för StatefulSets:

(Var och en av dessa resurser kan redigeras, modifieras, göras describe.)
Och här är distribution med Ingress:

Arbeta med resurser
För varje resurs kan du hämta information i YAML eller dess describe genom att trycka på motsvarande kortkommandon (“y” respektive “d”. Det finns naturligtvis ännu mer grundläggande funktioner: deras lista och kortkommandon är alltid synliga tack vare den praktiska "rubriken" i gränssnittet (dold genom att trycka Ctrl + e).

När man redigerar en resurs ('e' efter att man har valt den), används textredigeraren som definieras i miljövariablerna (export EDITOR=vim).
Och så här ser en detaljerad beskrivning av resursen ut (describe):

Denna utdata (eller utdata från visningen av resursens YAML-manifest) kan sparas med den välbekanta kortkommandot Ctrl + s. Var det kommer att sparas framgår av K9s meddelande:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Du kan också återställa resurser från de skapade säkerhetskopiorna efter att du har tagit bort systemetiketter och anteckningar. För att göra detta måste du gå till katalogen med dem (:dir /tmp), välj sedan önskad fil och tillämpa apply.
Förresten, du kan återgå till den föregående ReplicaSet när som helst om det uppstår problem med den nuvarande. För att göra detta måste du välja önskad RS (:rs för deras lista):

... och återställ med Ctrl + l. Vi borde få ett meddelande om att allt lyckades:
k9s/whoami-5cfbdbb469 successfully rolled backOch för att skala replikerna, klicka bara på "s" (skalning) och välj önskat antal kopior:

Du kan ange vilken behållare som helst med hjälp av skalet: för att göra detta, gå till önskad pod, tryck på "s" (skal) och välj behållaren.
Andra funktioner
Naturligtvis stöds även visning av loggar ("l" för den valda resursen). Och för att visa nya loggar behöver du inte ständigt trycka på Enter: markera bara ("m") och spåra sedan bara nya meddelanden.

I samma fönster kan du även välja tidsintervall för att skriva ut loggar:
- tangent “1” - om 1 minut;
- "2" - 5 minuter;
- "3" - 15 minuter;
- "4" - 30 minuter;
- "5" - 1 timme;
- "0" - för hela podens livslängd.
Specialdriftläge Puls (kommando :pulse) visar allmän information om Kubernetes-klustret:

I den kan du se antalet resurser och deras status (de med status visas i grönt) Running).
En annan intressant egenskap hos K9s kallas Popeye. Den kontrollerar alla resurser för vissa kriterier för korrekthet och visar den resulterande "betygsättningen" med förklaringar. Till exempel kan du se att det inte finns tillräckligt med sonder eller gränser, och vissa behållare kan köras under root…

Grundläggande Helm-stöd är tillgängligt. Så här kan du till exempel visa versioner som distribuerats till ett kluster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
riktmärke
K9s har till och med inbyggd — är en enkel HTTP-serverbelastningsgenerator, ett alternativ till den mer kända ab (ApacheBench).
För att aktivera det måste du aktivera port forward i poden. För att göra detta, välj pod och tryck på Shift + f, gå till undermenyn för portvidarebefordran med aliaset "pf".

Efter att du valt porten och tryckt Ctrl + b startar själva prestandatestet. Resultaten av hans arbete lagras i /tmp och finns tillgängliga för senare visning i K9s.


För att ändra benchmarkkonfigurationen måste du skapa en fil $HOME/.k9s/bench-<my_context>.yml (definierad för varje kluster).
OBS: Det är viktigt att filändelsen för alla YAML-filer i katalogen .k9s det var exakt .yml (.yaml fungerar inte korrekt).
Konfigurationsexempel:
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
gränssnitt
Utseendet på kolumner för resurslistor ändras genom att skapa en fil $HOME/.k9s/views.yml. Ett exempel på dess innehåll:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Det är sant att det inte finns någon kolumn på etiketter, vilket är vad vi har .
Sortering efter kolumner görs med hjälp av kortkommandon:
- Skift + n — efter namn;
- Shift + o - vid noder;
- Skift + i — efter IP;
- Shift + a — efter containerns livslängd;
- Skift + t — efter antal omstarter;
- Shift + r — efter beredskapsstatus;
- Skift + c — baserat på CPU-förbrukning;
- Skift + m — baserat på minnesförbrukning.
Om någon inte gillar standardfärgschemat stöder K9s till och med . Färdiga exempel (7 stycken) finns tillgängliga . Här är ett exempel på ett av dessa skinn (i flottan):

plugin-program
Slutligen låter dig utöka funktionerna hos K9s. Jag har själv bara använt en av dem i mitt arbete - kubectl get all -n $namespace.
Det ser ut så här. Skapa en fil $HOME/.k9s/plugin.yml med innehåll som detta:
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 kan du gå till namnrymden och trycka på "g" för att köra motsvarande kommando:

Bland plugin-programmen finns till exempel integrationer med kubectl-jq och ett verktyg för att visa loggar. .
Slutsats
Enligt min mening visade sig K9s vara väldigt praktiska att arbeta med: det är ganska lätt att vänja sig vid att hitta allt man behöver utan att använda den. kubectl. Jag var nöjd med hur jag kunde visa loggar och spara dem, den snabba redigeringen av resurser, den övergripande arbetshastigheten* och Popeye-läget visade sig vara användbart. Möjligheten att skapa plugins och anpassa applikationen efter dina behov är värd ett särskilt omnämnande.
* Även med en stor volym stockar märkte jag att K9s var långsam. I sådana ögonblick "åt" verktyget 2 kärnor från Intel Xeon E312xx och kunde till och med frysa.
Vad saknas just nu? Snabb återställning till föregående version (gäller inte RS) utan att gå till katalogen. Dessutom sker restaureringen endast för bara resurs: om du har tagit bort en anteckning eller etikett måste du ta bort och återställa hela resursen (det är här du måste gå till katalogen). En annan liten sak är att datumet för sådana sparade "säkerhetskopior" saknas.
PS
Läs även på vår blogg:
- «";
- «";
- «".
Källa: will.com
