
furnisce una interfaccia d'utilizatore terminale per interagisce cù i cluster Kubernetes. L'obiettivu di stu prughjettu Open Source hè di fà più faciule per navigà, monitorizà è gestisce l'applicazioni in K8s. K9s monitoreghja constantemente i cambiamenti in Kubernetes è offre cumandamenti rapidi per travaglià cù risorse monitorate.
U prugettu hè scrittu in Go è hè statu dapoi più di un annu è mezu: u primu impegnu hè statu fattu l'1 di ferraghju 2019. À u mumentu di a scrittura, ci sò più di 9000 stelle è circa 80 cuntributori. Videmu ciò chì k9s pò fà?
Installazione è lanciazione
Questa hè una applicazione cliente (in relazione à u cluster Kubernetes) chì hè più faciule per eseguisce cum'è una maghjina Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sPer certi distribuzioni Linux è altri sistemi operativi, ci sò ancu pronti per installà . In generale, per i sistemi Linux, pudete installà un schedariu binariu:
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/binÙn ci sò micca esigenze specifiche per u cluster K8s stessu. A ghjudicà da e recensioni, l'applicazione funziona ancu cù versioni più vechje di Kubernetes cum'è 1.12.
L'applicazione hè lanciata cù a cunfigurazione standard .kube/config - simile à cumu si faci kubectl.
Navigazione
Per automaticamente, una finestra si apre cù u spaziu di nome predeterminatu specificatu per u cuntestu. Questu hè, si avete scrittu kubectl config set-context --current --namespace=test, allura u spaziu di nomi si apre test. (Vede quì sottu per cambià cuntesti / namespaces.)

Andà à modu di cumandamentu hè fattu premendu ":". Dopu questu, pudete cuntrullà l'operazione di k9s cù cumandamenti - per esempiu, per vede a lista di StatefulSets (in u namespace currente), pudete entre. :sts.
![]()
Per alcune altre risorse Kubernetes:
-
:ns- spazii di nomi; -
:deploy- implementazioni; -
:ing- Ingressi; -
:svc- Servizi.
Per vede una lista completa di i tipi di risorse dispunibuli per vede, ci hè un cumandamentu :aliases.
Hè ancu cunvenutu per vede a lista di cumandamenti dispunibuli da combinazioni di tasti caldi in a finestra attuale: per fà questu, basta à cliccà nantu à "?".

Ancu in k9s ci hè modu di ricerca, per andà à quale basta à entre "/". Cun ella, una ricerca hè realizata nantu à u cuntenutu di a "finestra" attuale. Diciamu s'è vo avete intrutu prima :ns, avete una lista di spazii di nomi aperti. S'ellu ci sò troppu, allora per ùn scorri per un bellu pezzu, hè abbastanza per entre in a finestra cù namespaces. /mynamespace.
Per cercà per etichette, pudete selezziunate tutti i pods in u spaziu di nome desideratu, dopu entre, per esempiu, / -l app=whoami. Averemu una lista di pods cù questa etichetta:
![]()
A ricerca travaglia in tutti i tipi di finestri, cumpresi logs, vede manifesti YAML, è describe per e risorse - vede quì sottu per più dettagli nantu à queste caratteristiche.
Chì ghjè u flussu generale di navigazione?
Utilizà u cumandamentu :ctx pudete sceglie un cuntestu:

Per selezziunà un namespace, ci hè u cumandimu digià citatu :ns, è dopu pudete aduprà a ricerca di u spaziu desideratu: /test.
Sè avemu avà selezziunate a risorsa chì ci interessa (per esempiu, u stessu StatefulSet), l'infurmazioni currispundenti apparisceranu per questu: quantu pods sò in esecuzione cù brevi infurmazioni nantu à elli.
![]()
Solu i baccelli ponu esse d'interessu - allora hè abbastanza per entre :pod. In u casu di ConfigMaps (:cm - per a lista di sti risorse), pudete selezziunà l'ughjettu d'interessu è cliccate nant'à "u", dopu chì K9s vi diciarà quale l'usa specificamente (questu CM).
Un'altra funzione utile per vede risorse hè u so "x-ray" (vista a raghji X). Stu modu hè chjamatu da u cumandamentu :xray RESOURCE è ... hè più faciule per dimustrà cumu funziona chè di spiegà. Eccu un'illustrazione per StatefulSets:

(Ognunu di sti risorse pò esse editatu, cambiatu, fattu describe.)
È quì hè Deployment with Ingress:

U travagliu cù risorse
Pudete ottene infurmazione nantu à ogni risorsa in YAML o in u so describe premendo i tasti di scelta rapida corrispondenti ("y" è "d", rispettivamente). Di sicuru, ci sò ancu più operazioni basiche: a so lista è i scurciati di u teclatu sò sempre visibili grazia à una "header" cunvene in l'interfaccia (oculata pressu Ctrl + e).

Quandu editate ogni risorsa ("e" dopu a so selezzione), l'editore di testu definitu in e variabili di l'ambiente hè apertu (export EDITOR=vim).
È quì hè ciò chì a descrizzione dettagliata di a risorsa pare (describe):

Questa output (o output di vede u manifestu di risorsa YAML) pò esse salvatu usendu a scurciata di tastiera familiar Ctrl + s. Induve serà salvatu serà cunnisciutu da u missaghju K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Pudete ancu risturà risorse da i schedarii di salvezza creati, dopu avè eliminatu l'etichetti di u sistema è l'annotazioni. Per fà questu, avete bisognu à andà in u cartulare cun elli (:dir /tmp), dopu selezziunate u schedariu desideratu è applicà apply.
Per via, in ogni mumentu pudete retrocede à u ReplicaSet precedente se ci sò prublemi cù l'attuale. Per fà questu, selezziunate u RS desideratu (:rs per a so lista):

... è rollback cù Ctrl + l. Avemu da riceve una notificazione chì tuttu hè andatu bè:
k9s/whoami-5cfbdbb469 successfully rolled backÈ per scala e rèpliche, basta à cliccà nantu à a "s" (scala) è selezziunate u numeru desideratu di casi:

Pudete inserisce qualsiasi di i cuntenituri cù a cunchiglia: per fà questu, andate à u pod desideratu, cliccate nantu à "s" (shell) è selezziunate u cuntinuu.
Altre caratteristiche
Di sicuru, a visualizazione di logs hè ancu supportata ("l" per a risorsa scelta). È per guardà novi logs, ùn ci hè bisognu di appughjà constantemente Enter: hè abbastanza per marcà ("m"), è dopu solu seguità novi missaghji.

Ancu in a stessa finestra, pudete selezziunà u intervalu di tempu per l'output di logs:
- chjave "1" - per 1 minutu;
- "2" - 5 minuti;
- "3" - 15 minuti;
- "4" - 30 minuti;
- "5" - 1 ora;
- "0" - per tutta a vita di u pod.
Modu operativu speciale Pulse (cumandamentu :pulse) mostra infurmazione generale nantu à u cluster Kubernetes:

In questu pudete vede u numeru di risorse è u so statutu (i verdi mostranu quelli chì anu u statutu Running).
Una altra funzione cool di K9s hè chjamata Popeye. Verifica tutte e risorse per certi criterii di correttezza è mostra a "valutazione" risultante cù spiegazioni. Per esempiu, pudete vede chì ùn ci sò micca abbastanza campioni o limiti, è qualchì cuntainer pò esse esecutatu cum'è root ...

Ci hè un supportu basicu per Helm. Per esempiu, questu hè cumu pudete vede e versioni implementate in u cluster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Benchmark
Ancu integratu in K9s hè un simplice generatore di carica di u servitore HTTP, una alternativa à l'ab più cunnisciutu (ApacheBench).
Per attivà, avete bisognu di attivà port-forward in u pod. Per fà questu, selezziunate u pod è appughjà Shift + f, andate à u submenu di portu-forward cù l'alias "pf".

Dopu avè sceltu u portu è pressu Ctrl + b, u benchmark stessu cumminciarà. I risultati di u so travagliu sò guardati in /tmp è sò dispunibili per a visualizazione dopu in K9s.


Per cambià a cunfigurazione di u benchmark, avete bisognu di creà un schedariu $HOME/.k9s/bench-<my_context>.yml (determinatu per ogni cluster).
NB: Hè impurtante chì l'estensione di tutti i schedari YAML in un cartulare .k9s era esattamente .yml (.yaml ùn funziona micca bè).
Esempiu di cunfigurazione:
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
interfaccia
L'apparizione di e culonni per i listi di risorse hè mudificatu creendu un schedariu $HOME/.k9s/views.yml. Un esempiu di u so cuntenutu:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
True, ùn ci hè micca abbastanza colonna per etichette, per quale ci hè .
L'ordinamentu per colonne hè realizatu da i tasti di scelta rapida:
- Shift + n - per nome;
- Shift + o - per nodi;
- Shift + i - per IP;
- Shift + a - da a vita di u cuntinuu;
- Shift + t - da u numeru di riavvia;
- Shift + r - per statu di prontezza;
- Shift + c - da u cunsumu CPU;
- Shift + m - per u cunsumu di memoria.
Se qualchissia ùn piace micca u schema di culore predeterminatu, K9s supporta ancu . Esempii pronti (7 pezzi) sò dispunibili . Eccu un esempiu di una di sti pelle (in marina):

Plugins
Infine permette di espansione e capacità di K9s. Eiu stessu aghju utilizatu solu unu di elli in u mo travagliu - kubectl get all -n $namespace.
Sembra cusì. Crea un schedariu $HOME/.k9s/plugin.yml cun cuntenutu cum'è questu:
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"Avà pudete andà à u namespace è appughjà "g" per eseguisce cù u cumandamentu currispundente:

Trà i plugins ci sò, per esempiu, integrazioni cù kubectl-jq è una utilità per vede logs .
cunchiusioni
Per u mo gustu, K9s hè diventatu assai cunvene per travaglià: pudete rapidamente abituà à circà tuttu ciò chì avete bisognu senza usà. kubectl. Eru cuntentu cù a vista di i logs è u so salvamentu, edizione rapida di risorse, a rapidità di u travagliu in generale *, u modu Popeye hè stata utile. Una menzione speciale hè a capacità di creà plugins è mudificà l'applicazione per adattà à i vostri bisogni.
* Ancu s'ellu, cù un grande voluminu di logs, aghju nutatu ancu l'operazione lenta di K9s. In tali mumenti, l'utilità "mangia" 2 core da l'Intel Xeon E312xx è puderia ancu congelate.
Chì manca à u mumentu ? Ritorna rapida à a versione precedente (ùn parlemu micca di RS) senza andà in u cartulare. Inoltre, a ricuperazione accade solu per tutali risorsa: se sguassate una annotazione o etichetta, duverete sguassà è restaurà tuttu u risorsu (hè quì chì avete bisognu à andà in u cartulare). Un altru trifle - ùn ci hè micca abbastanza data per tali "backups" salvati.
PS
Leghjite puru nant'à u nostru blog:
- «";
- «";
- «».
Source: www.habr.com
