
giver et terminalinterface til interaktion med Kubernetes-klynger. Målet med dette Open Source-projekt er at lette navigationen i applikationer i K8s, overvågning af dem og håndtering af dem. K9s følger konstant med i ændringer i Kubernetes og tilbyder hurtige kommandoer til arbejde med de overvågede ressourcer.
Projektet er skrevet i Go og har eksisteret i mere end halvandet år: den første commit blev lavet den 1. februar 2019. På tidspunktet for artiklens skrivning er der mere end 9000 stjerner på og omkring 80 bidragydere. Lad os se, hvad k9s kan?
Installation og opstart
Det er en klientapplikation (i forhold til Kubernetes-klyngen), som nemmest kan startes som et Docker-billede:
docker run --rm -it -v $KUBECONFIG:/.kube/config quay.io/derailed/k9sDer er også færdige installationspakker til nogle Linux-distributioner og andre operativsystemer. Generelt kan man installere den binære fil til Linux-systemer:
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/binDer er ingen specifikke krav til selve K8s-klyngen. Ifølge anmeldelser fungerer applikationen også med ældre versioner af Kubernetes, som 1.12.
Applikationen startes ved hjælp af standardkonfigurationen .kube/config — svarende til det, som kubectl.
Navigation
Som standard åbnes et vindue med det standard namespace, der er angivet for konteksten. Det vil sige, hvis du har skrevet kubectl config set-context --current --namespace=test, så vil namespace test. (Om ændring af kontekster/namespaces se nedenfor.)

Overgangen til kommandotilstand finder sted ved at trykke på ":". Derefter kan man styre k9s med kommandoer - for eksempel for at se listen over StatefulSets (i det aktuelle namespace) kan man indtaste :sts.
![]()
For nogle andre Kubernetes-reserver:
-
:ns— Namespaces; -
:deploy— Deployments; -
:ing— Ingresses; -
:svc— Services.
For at vise den fulde liste af ressource typer, der er tilgængelige for visning, er der kommandoen :aliases.
Det er praktisk at se listen over kommandoer, der er tilgængelige via genvejstaster i det nuværende vindue: for dette er det tilstrækkeligt at trykke på "?".

K9s har også en søgemode, for at skifte til den skal man blot indtaste "/". Med den kan man søge i indholdet af det nuværende "vindue". Antag, at du tidligere har indtastet :ns, du har åbnet listen over navnerum. Hvis der er for mange, så for at undgå langscrolling nedad, er det nok at indtaste /mynamespace.
For at søge efter labels kan du vælge alle pods i det ønskede navnerum, hvorefter du kan indtaste for eksempel / -l app=whoami. Vi får en liste over pods med denne label:
![]()
Søgningen virker i alle typer vinduer, inklusiv logs, visning af YAML-manifester og describe for ressourcer — mere om disse funktioner nedenfor.
Hvordan ser sekvensen af handlinger ud for navigation?
Med kommandoen :ctx kan man vælge konteksten:

For at vælge navnerummet er der allerede nævnt kommandoen :ns, og derefter kan man bruge søgningen til det ønskede rum: /test.
Hvis vi nu vælger den ressource, der interesserer os (for eksempel den samme StatefulSet), vil der komme information frem om den: hvor mange pods der kører med korte oplysninger om dem.
![]()
Måske er kun pods interessante — i så fald er det nok at indtaste :pod. I tilfælde af ConfigMaps (:cm — for listen over disse ressourcer) kan man vælge den interessante genstand og trykke på «u», hvorefter K9s vil informere om, hvem der specifikt bruger den (denne CM).
Endnu en praktisk funktion til visning af ressourcer — deres «røntgen» (XRay view). Denne tilstand aktiveres med kommandoen :xray RESOURCE og… det er lettere at vise, hvordan det fungerer, end at forklare. Her er en illustration for StatefulSets:

(Hver af disse ressourcer kan redigeres, ændres, gøres describe.)
Og her er Deployment med Ingress:

Arbejdet med ressourcer
Om hver ressource kan man få information i YAML eller dens describe ved at trykke på de tilsvarende tastaturkombinationer («y» og «d» henholdsvis). Der er selvfølgelig flere grundlæggende operationer: deres liste og tastaturkombinationer er altid synlige takket være den praktiske «header» i grænsefladen (den skjules ved at trykke på Ctrl + e).

Ved redigering af enhver ressource («e» efter valg) åbnes den teksteditor, der er defineret i miljøvariablerne (export EDITOR=vim).
Og sådan ser den detaljerede beskrivelse af ressourcen ud (describe):

Sådan en output (eller output af visning af YAML-manifestet for ressourcen) kan gemmes med den velkendte tastaturkombination Ctrl + s. Hvor det gemmes, vil være kendt fra meddelelsen fra K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml gemt med succes! Fra de oprettede backup-filer kan ressourcer gendannes ved først at fjerne systemmærker og annotationer. For dette kræves det at navigere til mappen med dem (:dir /tmp), hvorefter den ønskede fil vælges og anvendes. apply.
For at sige det på en anden måde, kan man til enhver tid rulle tilbage til en tidligere ReplicaSet, hvis der er problemer med den nuværende. For dette skal den ønskede RS vælges (:rs til listen):

… og udføre rollback ved hjælp af Ctrl + l. Vi skal modtage en meddelelse om, at alt er gået godt:
k9s/whoami-5cfbdbb469 er rullet tilbage med succesOg for at skalere replikaterne, skal du blot trykke på «s» (scale) og vælge det ønskede antal instanser:

I enhver af containerne kan du få adgang via shell: gå til den ønskede pod, tryk på «s» (shell) og vælg containeren.
Andre funktioner
Selvfølgelig understøttes visning af logs også («l» for den valgte ressource). For at se nye logs skal du ikke konstant trykke på Enter: det er nok at markere («m»), hvorefter kun nye meddelelser følges.

I samme vindue kan du også vælge en tidsramme for output af logs:
- tast «1» — for 1 minut;
- «2» — 5 minutter;
- «3» — 15 minutter;
- «4» — 30 minutter;
- «5» — 1 time;
- «0» — for hele livscyklussen af pod’en.
Den specielle arbejdsmetode Pulse (kommando :pulse) viser generelle oplysninger om Kubernetes-klusteret:

Her kan du se antallet af ressourcer og deres tilstand (de, der har status, vises i grønt. Kørende).
En anden interessant funktion i K9s kaldes Popeye. Den kontrollerer alle ressourcer baseret på bestemte korrekthedskriterier og giver den resulterende «vurdering» med forklaringer. For eksempel kan du se, at der mangler begrænsninger eller grænser, og at en container kan køre som root…

Der er grundlæggende support for Helm. For eksempel kan du se udgivelserne, der er deployet til klusteret:
:helm all # alt
:helm $namespace # i et bestemt navnerum
Benchmark
I K9s er der endda indbygget — en simpel belastningsgenerator til HTTP-serveren, et alternativ til det mere kendte ab (ApacheBench).
For at aktivere det kræves port-forward aktivering i pod'en. Vælg pod og tryk på Shift + f, gå til undermenuen port-forward med aliaset «pf».

Efter at have valgt porten og trykket på Ctrl + b starter benchmarken. Resultaterne gemmes i /tmp og er tilgængelige for senere visning i K9s.


For at ændre konfigurationen af benchmark’en skal du oprette en fil $HOME/.k9s/bench-.yml (defineres for hver klynge).
NB: Det er vigtigt, at alle YAML-filer i mappen .k9s har endelsen .yml (.yaml fungerer ikke korrekt).
Eksempel på konfiguration:
benchmarks:
defaults:
# Antal tråde
concurrency: 2
# Antal forespørgsler
requests: 1000
containers:
# Indstillinger for benchmark-container
# Containeren defineres 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:
# Det er muligt at køre benchmark på tjenester som NodePort og LoadBalancer
# Syntax: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
Interface
Visningen af kolonner for ressource lister ændres ved at oprette en fil $HOME/.k9s/views.yml. Eksempel på indholdet:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Dog er der manglende kolonne til labels, hvilket der er .
Sortering efter kolonner udføres med tastaturkombinationer:
- Shift + n — efter navn;
- Shift + o — efter noder;
- Shift + i — efter IP;
- Shift + a — efter containerens levetid;
- Shift + t — efter antal genstart;
- Shift + r — efter status for beredskab;
- Shift + c — efter CPU-forbrug;
- Shift + m — efter hukommelsesforbrug.
Hvis nogen ikke kan lide det standard farveskema, understøtter K9s endda . Klar til eksempler (7 stykker) tilgængelige . Her er et eksempel på et af disse skins (in the navy):

Plugins
Endelig, muliggør udvidelse af K9s' kapaciteter. Personligt har jeg kun brugt en af dem — kubectl get all -n $namespace.
Det ser således ud. Vi opretter en fil $HOME/.k9s/plugin.yml med følgende indhold:
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å til navnerummet og trykke på "g" for at udføre den pågældende kommando:

Blandt plugins findes der for eksempel integrationer med kubectl-jq og en logvisningsværktøj .
Konklusion
Efter min mening har K9s vist sig at være meget praktisk at arbejde med: man vænner sig hurtigt til at finde alt det nødvendige uden brug kubectl. Jeg blev positivt overrasket over logvisningen og dennes gemmefunktion, hurtig redigering af ressourcer, og den generelle ydeevne. Way Popeye viste sig at være nyttig. Det er også værd at nævne muligheden for at oprette plugins og tilpasse applikationen til ens behov.
* Selvom jeg ved store mængder logs også har bemærket langsom ydeevne fra K9s. I sådanne øjeblikke brugte værktøjet 2 kerner fra Intel Xeon E312xx og kunne endda fryse.
Hvad mangler i øjeblikket? En hurtig tilbagekobling til den tidligere version (ikke RS) uden at skifte mappe. Desuden sker genoprettelsen kun for alle ressourcen: hvis du har slettet en annotation eller et label, er du nødt til at slette og genskabe hele ressourcen (her er det nødvendigt at skifte mappe). En anden lille ting — der mangler datoer for sådanne gemte 'backups'.
P.S.
Læs også på vores blog:
- «»;
- «»;
- «».
Kilde: habr.com
