
oferă o interfață de terminal pentru interacțiunea cu clusterele Kubernetes. Scopul acestui proiect Open Source este de a facilita navigarea ușoară a aplicațiilor în K8s, monitorizarea acestora și gestionarea lor. K9s monitorizează constant modificările din Kubernetes și oferă comenzi rapide pentru a lucra cu resursele observate.
Proiectul este scris în Go, există de mai bine de un an și jumătate: prima sa commitere a fost realizată pe 1 februarie 2019. La momentul redactării acestui articol, are peste 9000 de stele pe și aproximativ 80 de contribuabili. Să vedem ce poate face k9s?
Instalare și rulare
Este o aplicație client (în raport cu clusterul Kubernetes) care este cel mai ușor de rulat ca o imagine Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sPentru unele distribuții Linux și alte sisteme de operare, sunt disponibile și pachete gata de instalat. În general, pentru sistemele Linux, se poate instala fișierul binar:
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/binNu există cerințe specifice pentru clusterul K8s. Conform recenziilor, aplicația funcționează și cu versiuni mai vechi de Kubernetes, cum ar fi 1.12.
Aplicația se lansează utilizând configurația standard .kube/config — similar cu ceea ce face kubectl.
Navigare
Implicit, se deschide o fereastră cu namespace-ul standard specificat pentru context. Așadar, dacă ați setat kubectl config set-context --current --namespace=test, atunci se va deschide namespace-ul test. (Despre schimbarea contextelor/namespaces, vezi mai jos.)

Trecerea în modul de comandă se realizează apăsând „:”. După aceea, se poate gestiona funcționarea k9s folosind comenzi — de exemplu, pentru a vizualiza lista StatefulSets (în namespace-ul curent) se poate introduce :sts.
![]()
Pentru unele alte resurse Kubernetes:
-
:ns— Namespaces; -
:deploy— Deployments; -
:ing— Ingresses; -
:svc— Services.
Pentru a afișa lista completă a tipurilor de resurse disponibile pentru vizualizare, există comanda :aliases.
Este convenabil să vizualizați și lista comenzilor disponibile prin combinații de taste rapide în cadrul ferestrei curente: pentru asta este suficient să apăsați „?”.

De asemenea, în k9s există modul de căutare, pentru a accesa care este suficient să introduceți „/”. Acesta permite căutarea în conținutul ferestrei curente. De exemplu, dacă ați introdus anterior :ns, aveți deschis lista de namespaces. Dacă sunt prea multe, pentru a nu derula mult în jos, este suficient să introduceți în fereastra cu namespaces /mynamespace.
Pentru a căuta după etichete, se pot selecta toate pod-urile din spațiul de nume dorit, după care se poate introduce, de exemplu, / -l app=whoami. Vom obține o listă de pod-uri cu această etichetă:
![]()
Căutarea funcționează în toate tipurile de feronerie, inclusiv în jurnale, vizualizarea manifestelor YAML și describe pentru resurse – mai multe detalii despre aceste funcționalități se găsesc mai jos.
Cum arată, în general, secvența de acțiuni pentru navigare?
Folosind comanda :ctx se poate alege contextul:

Pentru a selecta namespace-ul, există deja comanda menționată :ns, și apoi se poate folosi căutarea pentru spațiul dorit: /test.
Dacă acum alegem resursa care ne interesează (de exemplu, același StatefulSet), pentru aceasta va apărea informația corespunzătoare: câte pod-uri sunt pornite cu detalii sumare despre ele.
![]()
Pot fi interesante doar pod-urile – atunci este suficient să introduci :pod. În cazul ConfigMap-urilor (:cm – pentru lista acestor resurse) se poate selecta obiectul interesant și se poate apăsa «u», după care K9s va sugera cine folosește (această CM) în mod specific.
Î încă o caracteristică convenabilă pentru vizualizarea resurselor – „rentgen” (XRay view). Acest mod este activat prin comanda :xray RESOURCE și... este mai simplu să arăți cum funcționează decât să explici. Iată o ilustrație pentru StatefulSets:

(Fiecare dintre aceste resurse poate fi editată, modificată, făcută describe.)
Iată Deployment-ul cu Ingress:

Lucrul cu resursele
Despre fiecare resursă poți obține informații în YAML sau describe prin apăsarea combinațiilor de taste corespunzătoare («y» și «d» respectiv). Baza operațiunilor, desigur, este mult mai mare: lista acestora și combinațiile de taste sunt întotdeauna vizibile datorită „antetului” convenabil din interfață (se ascunde apăsând Ctrl + e).

Când editezi orice resursă («e» după ce o alegi), se deschide un editor de text definit în variabilele de mediu (export EDITOR=vim).
Iată cum arată descrierea detaliată a resursei (describe):

Această ieșire (sau ieșirea vizualizării manifestului YAML al resursei) poate fi salvată folosind combinația familiară de taste Ctrl + s. Unde va fi salvat, va fi indicat în mesajul K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Din fișierele de backup create se pot și restaura resurse, după ce se îndepărtează etichetele și adnotările sistemului. Pentru aceasta va fi necesar să se navigheze în directorul cu ele (:dir /tmp), după care se va alege fișierul dorit și se va aplica aplicare.
De exemplu, poți reveni oricând la ReplicaSet-ul anterior dacă întâmpini probleme cu cel curent. Pentru aceasta, trebuie să alegi RS-ul dorit (:rs pentru lista lor):

… și să efectuezi rollback folosind Ctrl + l. Trebuie să primim o notificare că totul a decurs cu succes:
k9s/whoami-5cfbdbb469 a fost revertit cu succesIar pentru a scala replicile, este suficient să apeși pe „s” (scale) și să alegi numărul dorit de instanțe:

Este posibil să intri în oricare dintre containere folosind shell: pentru aceasta, navighează la pod-ul dorit, apasă „s” (shell) și alege containerul.
Alte funcționalități
Desigur, este suportată și vizualizarea log-urilor („l” pentru resursa selectată). Iar pentru a vizualiza log-urile noi, nu este nevoie să apeși constant Enter: este suficient să marchezi („m”), după care vei monitoriza doar mesajele noi.

De asemenea, în această fereastră poți alege o fereastră temporală pentru ieșirea log-urilor:
- tasta „1” – pentru 1 minut;
- „2” – 5 minute;
- „3” – 15 minute;
- „4” – 30 minute;
- „5” – 1 oră;
- „0” – pentru întreaga viață a pod-ului.
Modul special de lucru Pulse (comanda :pulse) arată informații generale despre clusterul Kubernetes:

Aici poți vedea numărul de resurse și starea acestora (cele cu statusul sunt afișate în verde. Running).
O altă funcție interesantă a K9s se numește Popeye. Aceasta verifică toate resursele pe baza unor criterii de validitate și prezintă „rating-ul” obținut cu explicații. De exemplu, poți observa că lipsește un limită sau o cotă, iar un container ar putea rula sub root…

Există suport de bază pentru Helm. De exemplu, poți vizualiza release-urile implementate în cluster:
:helm all # toate
:helm $namespace # în spațiul de nume specific
Benchmark
În K9s a fost integrat chiar și — un generator simplu de încărcare pentru serverul HTTP, alternativă la mai cunoscutul ab (ApacheBench).
Pentru a-l activa, va fi necesară activarea port-forward în pod. Pentru aceasta, alegi pod-ul și apeși Shift + f, apoi accesezi submeniul port-forward folosind alias-ul „pf”.

După ce ai ales portul și ai apăsat Ctrl + b, benchmark-ul va începe. Rezultatele sale sunt salvate în /tmp și sunt disponibile pentru vizualizare ulterioară în K9s.


Pentru a modifica configurația benchmark-ului, trebuie să creezi un fișier $HOME/.k9s/bench-.yml (definit pentru fiecare cluster).
NB: Este important ca extensia tuturor fișierelor YAML din directorul .k9s să fie exact .yml (.yaml nu funcționează corect).
Exemplu de configurare:
benchmark-uri:
defaults:
# Numărul de fire
concurrency: 2
# Numărul de cereri
requests: 1000
containere:
# Setări pentru containerul de benchmark
# Containerul este definit ca 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
servicii:
# Se poate efectua un benchmark pe servicii de tip NodePort și LoadBalancer
# Sintaxă: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
Interfața
Tipul coloanelor pentru listele de resurse se modifică prin crearea unui fișier $HOME/.k9s/views.yml. Un exemplu al conținutului său:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Adevărul este că lipsește o coloană pentru etichete, ceea ce este .
Sortarea pe coloane se face prin combinații de taste:
- Shift + n — după nume;
- Shift + o — după noduri;
- Shift + i — după IP;
- Shift + a — după timpul de viață al containerului;
- Shift + t — după numărul de restarts;
- Shift + r — după starea de pregătire;
- Shift + c — după consumul CPU;
- Shift + m — după consumul de memorie.
Dacă cineva nu îi place schema de culori implicită, K9s suportă chiar și . Exemplele gata făcute (7 la număr) sunt disponibile . Iată un exemplu al uneia dintre aceste teme (in the navy):

Plugin-uri
În cele din urmă, permit extinderea funcționalităților K9s. Eu personal am folosit doar una dintre ele — kubectl get all -n $namespace.
Arată în felul următor. Creăm un fișier $HOME/.k9s/plugin.yml cu următorul conținut:
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"Acum poți merge în spațiul de nume și apăsa «g» pentru a executa comanda corespunzătoare:

Printre pluginuri există, de exemplu, integrarea cu kubectl-jq și utilitarul pentru vizualizarea logurilor .
Concluzie
Din punctul meu de vedere, K9s s-a dovedit foarte convenabilă în utilizare: este destul de ușor să te obișnuiești să cauți tot ce ai nevoie fără a folosi kubectl. M-a impresionat vizualizarea logurilor și salvarea acestora, editarea rapidă a resurselor, viteza de lucru în general*, modul Popeye s-a dovedit a fi util. Merită menționate capacitățile de a crea pluginuri și de a adapta aplicația la nevoile tale.
* Deși am observat, la un volum mare de jurnale, că K9s funcționează lent. În aceste momente, utilitarul utiliza 2 nuclee de la Intel Xeon E312xx și putea chiar să se blocheze.
Ce lipsește în acest moment? O revenire rapidă la versiunea anterioară (vorbim despre RS) fără a accesa directorul. În plus, restaurarea are loc doar pentru câteva secunde resursa: dacă ați șters o notă sau un eticheta, va trebui să ștergeți și să restaurați întreaga resursă (aici va fi necesar să accesați directorul). Un alt detaliu simplu — lipsa datei acestor „backup-uri” salvate.
P.S.
Citiți și în blogul nostru:
- «»;
- «»;
- «».
Sursa: habr.com
