
giver en terminalbrugergrænseflade til interaktion med Kubernetes-klynger. Målet med dette Open Source-projekt er at gøre det nemmere at navigere, overvåge og administrere applikationer i K8s. K9s overvåger konstant ændringer i Kubernetes og giver hurtige kommandoer til at arbejde med overvågede ressourcer.
Projektet er skrevet i Go og har eksisteret i mere end halvandet år: den første commit blev foretaget den 1. februar 2019. I skrivende stund er der 9000+ stjerner på og omkring 80 bidragydere. Lad os se, hvad k9s kan?
Installation og lancering
Dette er en klient (i forhold til Kubernetes-klyngen) applikation, som er nemmest at køre som et Docker-billede:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sFor nogle Linux-distributioner og andre operativsystemer er der også klar til at installere . Generelt for Linux-systemer kan du installere den binære fil:
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. At dømme efter anmeldelserne fungerer applikationen også med ældre versioner af Kubernetes som 1.12.
Applikationen begynder at bruge standardkonfigurationen .kube/config - ligner hvordan det gør kubectl.
Navigation
Som standard åbnes et vindue med det standardnavneområde, der er angivet for konteksten. Altså hvis du skrev kubectl config set-context --current --namespace=test, så åbnes navneområdet test. (Se nedenfor om ændring af kontekster/navneområder.)

Gå til kommandotilstand udføres ved at klikke på “:”. Du kan derefter styre, hvordan k9s fungerer ved hjælp af kommandoer - for for eksempel at se en liste over StatefulSets (i det aktuelle navneområde), kan du indtaste :sts.
![]()
For nogle andre Kubernetes-ressourcer:
-
:ns- Navneområder; -
:deploy— Indsættelser; -
:ing- Indtrængen; -
:svc- Tjenester.
For at få vist en komplet liste over ressourcetyper, der er tilgængelige for visning, er der en kommando :aliases.
Det er også praktisk at se listen over kommandoer, der er tilgængelige via genvejstastkombinationer i det aktuelle vindue: for at gøre dette skal du blot klikke på "?".

Også i k9s er der søgetilstand, for at gå til, hvor du blot skal indtaste "/". Den søger gennem indholdet af det aktuelle "vindue". For eksempel, hvis du tidligere har indtastet :ns, har du en liste over navneområder åben. Hvis der er for mange af dem, så for ikke at rulle ned i lang tid, skal du bare gå ind i vinduet med navneområder /mynamespace.
For at søge efter etiketter kan du vælge alle pods i det ønskede navneområde og derefter indtaste f.eks. / -l app=whoami. Vi får en liste over bælg med denne etiket:
![]()
Søgningen fungerer i alle typer vinduer, inklusive logfiler, visning af YAML-manifester og describe for ressourcer - se nedenfor for mere information om disse muligheder.
Hvordan ser det overordnede navigationsflow ud?
Med kommandoen :ctx du kan vælge konteksten:

For at vælge et navneområde er der den allerede nævnte kommando :ns, og så kan du bruge søgningen efter den ønskede plads: /test.
Hvis vi nu vælger den ressource, vi er interesseret i (f.eks. det samme StatefulSet), vises den tilsvarende information for den: hvor mange pods kører med kort information om dem.
![]()
Kun pods kan have interesse - så er det bare at gå ind :pod. I tilfælde af ConfigMaps (:cm - for en liste over disse ressourcer) kan du vælge objektet af interesse og klikke på "u", hvorefter K9s vil fortælle dig, hvem nøjagtigt (denne CM) bruger det.
En anden praktisk funktion til at se ressourcer er deres "Røntgen" (røntgenvisning). Denne tilstand kaldes af kommandoen :xray RESOURCE og... det er nemmere at vise hvordan det virker end at forklare. Her er en illustration til StatefulSets:

(Hver af disse ressourcer kan redigeres, ændres, laves describe.)
Og her er Deployment with Ingress:

Arbejde med ressourcer
Oplysninger om hver ressource kan fås i YAML eller dens describe ved at trykke på de relevante tastaturgenveje (henholdsvis "y" og "d"). Der er selvfølgelig endnu mere grundlæggende handlinger: deres liste og tastaturgenveje er altid synlige takket være en praktisk "header" i grænsefladen (skjult ved at trykke på Ctrl + e).

Når du redigerer en ressource ("e" efter at have valgt den), er teksteditoren defineret i miljøvariablerne (export EDITOR=vim).
Og her er, hvordan en detaljeret beskrivelse af ressourcen ser ud (describe):

Dette output (eller output fra visning af YAML-manifestet for en ressource) kan gemmes ved at bruge den sædvanlige tastaturgenvej Ctrl + s. Hvor det vil blive gemt, vil være kendt fra K9s besked:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Du kan også gendanne ressourcer fra de oprettede backupfiler ved først at fjerne systemetiketter og anmærkninger. For at gøre dette skal du gå til mappen med dem (:dir /tmp), vælg derefter den ønskede fil og anvend apply.
Forresten kan du til enhver tid rulle tilbage til det forrige ReplicaSet, hvis der er problemer med det nuværende. For at gøre dette skal du vælge den ønskede RS (:rs for deres liste):

... og rulle tilbage med Ctrl + l. Vi skulle modtage en meddelelse om, at alt var lykkedes:
k9s/whoami-5cfbdbb469 successfully rolled backOg for at skalere replikaer skal du blot klikke på "s" (skala) og vælge det nødvendige antal kopier:

Du kan indtaste en hvilken som helst af beholderne ved hjælp af skallen: For at gøre dette skal du gå til den ønskede pod, klikke på "s" (skal) og vælge beholderen.
Andre funktioner
Selvfølgelig understøttes visning af logfiler (“l” for den valgte ressource). Og for at se nye logfiler er der ingen grund til konstant at trykke på Enter: bare sæt et mærke ("m") og overvåg derefter kun nye beskeder.

I samme vindue kan du også vælge tidsinterval for udlæsning af logfiler:
- tast "1" - om 1 minut;
- "2" - 5 minutter;
- "3" - 15 minutter;
- "4" - 30 minutter;
- "5" - 1 time;
- "0" - i hele bælgens levetid.
Speciel driftstilstand Puls (kommando :pulse) viser generel information om Kubernetes-klyngen:

I den kan du se antallet af ressourcer og deres status (dem, der har en status, vises med grønt Running).
En anden interessant funktion ved K9s kaldes Popeye. Den kontrollerer alle ressourcer for bestemte korrekthedskriterier og viser den resulterende "vurdering" med forklaringer. For eksempel kan du se, at der ikke er nok prøver eller grænser, og nogle containere kan køres som root...

Der er grundlæggende Helm-støtte. Sådan kan du f.eks. se udgivelser, der er implementeret til klyngen:
:helm all # все
:helm $namespace # в конкретном пространстве имен
benchmark
De byggede det endda ind i K9'er er en simpel belastningsgenerator til en HTTP-server, et alternativ til den mere velkendte ab (ApacheBench).
For at aktivere det, skal du aktivere port-forward i poden. For at gøre dette skal du vælge pod og trykke på Shift + f, gå til port-forward undermenuen ved at bruge aliaset "pf".

Efter at have valgt porten og trykket på Ctrl + b, starter selve benchmarken. Resultaterne af hans arbejde er gemt i /tmp og er tilgængelige til senere visning i K9s.


For at ændre benchmark-konfigurationen skal du oprette en fil $HOME/.k9s/bench-<my_context>.yml (defineret for hver klynge).
NB: Det er vigtigt, at udvidelsen af alle YAML-filer i mappen .k9s det var præcis .yml (.yaml fungerer ikke korrekt).
Konfigurationseksempel:
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ænseflade
Udseendet af kolonnerne for ressourcelister ændres ved at oprette en fil $HOME/.k9s/views.yml. Et eksempel på dets indhold:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Sandt nok er der ikke nok kolonne til etiketter, hvilket der er .
Sortering efter kolonner udføres ved hjælp af tastaturgenveje:
- Shift + n - efter navn;
- Shift + o - efter noder;
- Shift + i - efter IP;
- Skift + a - efter containerlevetid;
- Shift + t — med antallet af genstarter;
- Shift + r - efter beredskabsstatus;
- Shift + c - efter CPU-forbrug;
- Shift + m - ved hukommelsesforbrug.
Hvis nogen ikke kan lide standardfarveskemaet, understøtter K9s endda . Færdige eksempler (7 stk) er tilgængelige . Her er et eksempel på et af disse skind (i flåden):

plugins
Endelig giver dig mulighed for at udvide mulighederne for K9s. Jeg brugte selv kun én af dem i mit arbejde - kubectl get all -n $namespace.
Det ser sådan ud. Opret en fil $HOME/.k9s/plugin.yml med indhold som dette:
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 navneområdet og trykke på "g" for at udføre den tilsvarende kommando:

Blandt plugins er der for eksempel integrationer med kubectl-jq og et værktøj til at se logs .
Konklusion
For min smag viste K9s sig at være meget praktisk at bruge: med den kan du hurtigt vænne dig til at finde alt, hvad du har brug for uden at bruge kubectl. Jeg var tilfreds med at se logfiler og gemme dem, hurtig redigering af ressourcer, arbejdshastighed generelt*, Popeye-tilstand viste sig at være nyttig. Særligt nævnes muligheden for at oprette plugins og tilpasse applikationen, så den passer til dine behov.
* Selvom jeg, med en stor mængde logfiler, også bemærkede langsom drift af K9s. I sådanne øjeblikke "spiste" værktøjet 2 kerner af Intel Xeon E312xx og kunne endda fryse.
Hvad mangler der i øjeblikket? Hurtig rollback til den tidligere version (vi taler ikke om RS) uden at gå til biblioteket. Derudover sker restaurering kun for kun ressource: hvis du har slettet en anmærkning eller etiket, bliver du nødt til at slette og gendanne hele ressourcen (det er her du skal gå til biblioteket). En anden lille ting er, at datoen for sådanne gemte "sikkerhedskopier" mangler.
PS
Læs også på vores blog:
- «";
- «";
- «'.
Kilde: www.habr.com
