
tillhandahÄller ett terminalgrÀnssnitt för att interagera med Kubernetes-kluster. MÄlet med detta Open Source-projekt Àr att underlÀtta enkel navigering av applikationer i K8s, övervakning av dem samt hantering av dem. K9s övervakar kontinuerligt förÀndringar i Kubernetes och erbjuder snabba kommandon för arbete med de övervakade resurserna.
Projektet Àr skrivet i Go och har funnits i mer Àn ett och ett halvt Är: den första committen gjordes den 1 februari 2019. Vid tidpunkten för skrivandet finns det över 9000 stjÀrnor pÄ och cirka 80 bidragsgivare. Vad kan k9s göra?
Installera och köra
Detta Àr en klientapplikation (i förhÄllande till Kubernetes-klustret) som enklast kan köras som en Docker-bild:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sFör vissa Linux-distributioner och andra operativsystem finns det Àven paket som kan installeras. I allmÀnhet kan du för Linux-system installera en binÀrfil:
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 pÄ sjÀlva K8s-klustret. Enligt recensionerna fungerar applikationen Àven med Àldre versioner av Kubernetes, som 1.12.
Applikationen startas med hjĂ€lp av standardkonfigurationsfilen .kube/config â pĂ„ ett sĂ€tt som liknar hur det görs av kubectl.
Navigation
Som standard öppnas ett fönster med det standardnamnrymd som anges för kontexten. Det vill sÀga, om du angav kubectl config set-context --current --namespace=test, kommer namnomrÄdet att öppnas test. (Om att byta mellan kontexter/namnrymder, se nedan.)

ĂvergĂ„ng till kommandolĂ€ge sker genom att trycka pĂ„ â:â. Efter det kan du styra k9s med hjĂ€lp av kommandon â till exempel för att visa listan över StatefulSets (i det aktuella namnomrĂ„det) kan du skriva :sts.
![]()
För nÄgra andra Kubernetes-resurser:
-
:nsâ Namnrymder; -
:deployâ Distributioner; -
:ingâ Ingress; -
:svcâ TjĂ€nster.
För att fÄr en komplett lista över resurstypen som Àr tillgÀngliga för visning finns det ett kommando :aliases.
Det Ă€r bekvĂ€mt att se en lista över kommandon som Ă€r tillgĂ€ngliga med genvĂ€gar i det aktuella fönstret: för detta rĂ€cker det att trycka pĂ„ â?â.

I k9s finns det ocksĂ„ söklĂ€ge, för att övergĂ„ till detta rĂ€cker det att skriva â/â. Med det görs sökningar i innehĂ„llet i det aktuella âfönstretâ. Anta att om du tidigare har angett :ns, har du en lista över namnrymder. Om det finns för mĂ„nga, sĂ„ för att slippa scrolla för lĂ€nge ner, rĂ€cker det att skriva i fönstret med namnrymder. /mynamespace.
För att söka efter etiketter kan du vÀlja alla poddar i det önskade namnomrÄdet och sedan till exempel skriva in, / -l app=whoami. Vi fÄr en lista med poddar som har denna etikett:
![]()
Sökningen fungerar i alla typer av fönster, inklusive loggar, visning av YAML-manifest och objektet PVC: för resurser â mer information om dessa möjligheter finns nedan.
Hur ser sekvensen för navigation ut generellt?
Med kommandot :ctx kan du vÀlja kontext:

För att vÀlja namnomrÄde finns det redan nÀmnda kommandot :ns, och sedan kan man anvÀnda sökfunktionen för det önskade namnomrÄdet: /test.
Om vi nu vÀljer den resurs som intresserar oss (till exempel StatefulSet) kommer motsvarande information att visas: hur mÄnga poddar som körs med kort information om dem.
![]()
Kanske vill vi bara se poddar â dĂ„ rĂ€cker det att skriva in :pod. NĂ€r det gĂ€ller ConfigMap (:cm â för listan över dessa resurser) kan man vĂ€lja det intressanta objektet och trycka pĂ„ "u", dĂ„ kommer K9s att föreslĂ„ vem som specifikt anvĂ€nder detta CM.
En annan praktisk funktion för att se resurser Àr deras "röntgen" (XRay view). Denna lÀge Äkallas med kommandot :xray RESOURCE och... det Àr enklare att visa hur det fungerar Àn att förklara. HÀr Àr en illustration för StatefulSets:

(Varje av dessa resurser kan redigeras, Àndras, göras objektet PVC:.)
HÀr Àr en Deployment med Ingress:

Arbeta med resurser
Om varje resurs kan man fÄ information i YAML eller dess objektet PVC: genom att trycka pÄ motsvarande tangentkombinationer ("y" och "d" respektive). Basoperationerna Àr naturligtvis Ànnu fler: deras lista och tangentkombinationer Àr alltid synliga tack vare en bekvÀm "huvud" i grÀnssnittet (den döljs med Ctrl + e).

Vid redigering av vilken resurs som helst ("e" efter att ha valt den) öppnas en textredigerare som definieras i miljövariabler (export EDITOR=vim).
HÀr Àr hur en detaljerad beskrivning av resursen ser ut (objektet PVC:):

Denna utdata (eller utdata frÄn att visa YAML-manifestet för resursen) kan sparas med den vanliga tangentkombinationen Ctrl + s. Var den sparas blir kÀnt frÄn meddelandet frÄn K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml sparad framgÄngsrikt! FrÄn de skapade backupfilerna kan resurser ÄterstÀllas, efter att ha tagit bort systemetiketter och anteckningar. För detta krÀvs det att gÄ till katalogen med dem (:dir /tmp), och sedan vÀlja den nödvÀndiga filen och tillÀmpa apply.
För att nÀmna det, kan man nÀr som helst ÄtergÄ till föregÄende ReplicaSet om det nuvarande har problem. För att göra detta mÄste du vÀlja den relevanta RS (:rs för deras lista):

⊠och utföra rollback med hjÀlp av Ctrl + l. Vi bör fÄ en avisering om att allt har gÄtt bra:
k9s/whoami-5cfbdbb469 har ÄterstÀllts framgÄngsriktFör att skala upp repliker rÀcker det med att trycka pÄ «s» (scale) och vÀlja det antal instanser som behövs:

I vilken container som helst kan du gÄ in med hjÀlp av shell: gÄ till den önskade podden, tryck pÄ «s» (shell) och vÀlj containern.
Andra möjligheter
SjÀlvklart stöds Àven visning av loggar («l» för den valda resursen). För att se nya loggar behöver du inte kontinuerligt trycka pÄ Enter: det rÀcker att markera («m»), varefter du bara följder de nya meddelandena.

I detta fönster kan du ocksÄ vÀlja en tidsperiod för loggarna:
- tangenten «1» â för 1 minut;
- «2» â 5 minuter;
- «3» â 15 minuter;
- «4» â 30 minuter;
- «5» â 1 timme;
- «0» â för hela livslĂ€ngden för podden.
Ett speciellt lÀge i Pulse (kommandot :pulse) visar allmÀn information om Kubernetes-klustret:

HÀr kan du se antalet resurser och deras status (de med status visas i grönt Running).
En annan intressant funktion i K9s kallas Popeye. Den kontrollerar alla resurser efter vissa korrekthetskriterier och ger en «betyg» med förklaringar. Till exempel kan du se att det saknas begrĂ€nsningar eller grĂ€nser, och att en viss container kan köras som rootâŠ

Det finns grundlÀggande stöd för Helm. Till exempel kan du pÄ detta sÀtt se vilka releaser som har distribuerats till klustret:
:helm all # alla
:helm $namespace # i ett specifikt namnrymd
Benchmark
I K9s har de till och med byggt in â det Ă€r en enkel belastningstestare för HTTP-servrar, ett alternativ till den mer kĂ€nda ab (ApacheBench).
För att aktivera det behöver du aktivera port-forward i podden. VÀlj podden och tryck pÄ Shift + f, gÄ till undermenyn port-forward med aliaset «pf».

Efter val av port och tryck pÄ Ctrl + b startas sjÀlva benchmarket. Resultaten av dess arbete sparas i /tmp och Àr tillgÀngliga för efterföljande visning i K9s.


För att Àndra benchmark-konfigurationen mÄste du skapa en fil $HOME/.k9s/bench-.yml (det bestÀms för varje kluster).
NB: Viktigt att alla YAML-filer i katalogen .k9s har just .yml (.yaml fungerar inte korrekt).
Exempelkonfiguration:
benchmark:
defaults:
# Antal trÄdar
concurrency: 2
# Antal förfrÄgningar
requests: 1000
containers:
# InstÀllningar för containern med benchmark
# Containern definieras som 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:
# Benchmarking kan göras pÄ tjÀnster av typen NodePort och LoadBalancer
# Syntax: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
GrÀnssnitt
Visning av kolumner för resurslistor modifieras genom att skapa en fil $HOME/.k9s/views.yml. Exempel pÄ innehÄllet Àr:
k9s:
views:
v1/pods:
columns:
- Ă
LDER
- NAMESPACE
- NAMN
- IP
- NOD
- STATUS
- KLAR
v1/services:
columns:
- Ă
LDER
- NAMESPACE
- NAMN
- TYP
- KLUSTER-IP
Det saknas dock en kolumn för etiketter, vilket finns som .
Sortering av kolumner görs med tangentkombinationer:
- Shift + n â efter namn;
- Shift + o â efter noder;
- Shift + i â efter IP;
- Shift + a â efter behĂ„llarens livstid;
- Shift + t â efter antalet omstarter;
- Shift + r â efter status för beredskap;
- Shift + c â efter CPU-anvĂ€ndning;
- Shift + m â efter minnesanvĂ€ndning.
Om nÄgon inte gillar den förvalda fÀrgsÀttningen, stöder K9s till och med . FÀrdiga exempel (7 stycken) finns tillgÀngliga . HÀr Àr ett exempel pÄ ett av dessa teman (in the navy):

Plugins
Slutligen, ökar K9s möjligheter. Jag har sjĂ€lv anvĂ€nt bara ett av dem â kubectl get all -n $namespace.
Det ser ut pÄ följande sÀtt. Vi skapar en fil $HOME/.k9s/plugin.yml med följande innehÄll:
plugin:
get-all:
shortCut: g
confirm: false
description: hÀmta allt
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE get all -o wide | less"Nu kan vi gÄ till namnomrÄdet och trycka pÄ "g" för att utföra kommandot:

Bland plugins finns till exempel integrationer med kubectl-jq och loggvisningsverktyget .
Slutsats
Efter min mening har K9s visat sig vara mycket anvÀndbar: man vÀnjer sig snabbt vid att hitta allt utan att anvÀnda kubectl. Jag blev glad över loggvisningen och deras sparande, snabb redigering av resurser, och hastigheten i allmÀnhet*, fungerade lÀget Popeye bra. Möjligheten att skapa plugins och anpassa applikationen efter egna behov förtjÀnar sÀrskild uppmÀrksamhet.
* Ăven om jag har mĂ€rkt att K9s arbetar lĂ„ngsamt vid stora loggningsvolymer. Under sĂ„dana tider "Ă„t" verktyget 2 kĂ€rnor av Intel Xeon E312xx och kunde till och med frysa.
Vad saknas just nu? En snabb Ă„tergĂ„ng till en tidigare version (inte RS) utan att gĂ„ in i katalogen. Dessutom sker Ă„terstĂ€llningen endast för alla resursen: om du har tagit bort en annotation eller etikett mĂ„ste du ta bort och Ă„terstĂ€lla hela resursen (och hĂ€r mĂ„ste du gĂ„ in i katalogen). En annan smĂ„sak â det saknas datum för sĂ„dana sparade "backup-filer".
P.S.
LÀs Àven i vÄr blogg:
- «»;
- «»;
- «».
KĂ€lla: habr.com
