
oferă o interfață de utilizator terminal pentru interacțiunea cu clusterele Kubernetes. Scopul acestui proiect Open Source este de a facilita navigarea, monitorizarea și gestionarea aplicațiilor în K8s. K9s monitorizează constant schimbările din Kubernetes și oferă comenzi rapide pentru a lucra cu resurse monitorizate.
Proiectul este scris în Go și există de peste un an și jumătate: primul comit a fost făcut pe 1 februarie 2019. În momentul scrierii, există peste 9000 de stele și aproximativ 80 de colaboratori. Să vedem ce poate face k9s?
Instalare și lansare
Aceasta este o aplicație client (în legătură cu clusterul Kubernetes) care este cel mai ușor de rulat ca imagine Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sPentru unele distribuții Linux și alte sisteme de operare, există și gata de instalare . În general, pentru sistemele Linux, puteți instala un fișier 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 în sine. Judecând după recenzii, aplicația funcționează și cu versiuni mai vechi de Kubernetes, cum ar fi 1.12.
Aplicația este lansată folosind configurația standard .kube/config - asemănător cu cum se întâmplă kubectl.
Navigare
În mod implicit, se deschide o fereastră cu spațiul de nume implicit specificat pentru context. Adică dacă ai scris kubectl config set-context --current --namespace=test, apoi se va deschide spațiul de nume test. (Vezi mai jos pentru modificarea contextelor/spațiilor de nume.)

Mergi la modul de comandă se face prin apăsarea „:”. După aceea, puteți controla funcționarea k9s folosind comenzi - de exemplu, pentru a vizualiza lista StatefulSets (în spațiul de nume curent), puteți introduce :sts.
![]()
Pentru alte resurse Kubernetes:
-
:ns— spații de nume; -
:deploy— Implementări; -
:ing— Intrări; -
:svc- Servicii.
Pentru a afișa o listă completă de tipuri de resurse disponibile pentru vizualizare, există o comandă :aliases.
De asemenea, este convenabil să vizualizați lista de comenzi disponibile prin combinații de taste rapide în fereastra curentă: pentru a face acest lucru, faceți clic pe „?”.

De asemenea, în k9s există modul de căutare, pentru a merge la care este suficient să introduceți „/”. Cu acesta, se efectuează o căutare pe conținutul „ferestrei” curente. Să spunem dacă ați intrat anterior :ns, aveți deschisă o listă de spații de nume. Dacă sunt prea multe, atunci pentru a nu derula în jos pentru o lungă perioadă de timp, este suficient să intri în fereastra cu spații de nume /mynamespace.
Pentru a căuta după etichete, puteți selecta toate podurile din spațiul de nume dorit, apoi introduceți, de exemplu, / -l app=whoami. Vom primi o listă de păstăi cu această etichetă:
![]()
Căutarea funcționează în toate tipurile de ferestre, inclusiv jurnalele, vizualizarea manifestelor YAML și describe pentru resurse - vezi mai jos pentru mai multe detalii despre aceste caracteristici.
Cum arată fluxul general de navigare?
Cu comanda :ctx poti alege un context:

Pentru a selecta un spațiu de nume, există comanda deja menționată :ns, iar apoi puteți utiliza căutarea spațiului dorit: /test.
Dacă acum selectăm resursa care ne interesează (de exemplu, același StatefulSet), vor apărea informațiile corespunzătoare pentru aceasta: câte pod-uri rulează cu informații scurte despre ele.
![]()
Doar păstăile pot fi de interes - atunci este suficient să intri :pod. În cazul ConfigMaps (:cm - pentru lista acestor resurse), puteți selecta obiectul de interes și faceți clic pe „u”, după care K9s vă va spune cine îl folosește în mod specific (acest CM).
O altă caracteristică utilă pentru vizualizarea resurselor este lor „raze X” (vizualizare cu raze X). Acest mod este apelat de comandă :xray RESOURCE și ... este mai ușor să arăți cum funcționează decât să explici. Iată o ilustrare pentru StatefulSets:

(Fiecare dintre aceste resurse poate fi editată, modificată, realizată describe.)
Și iată Deployment with Ingress:

Lucrul cu resurse
Puteți obține informații despre fiecare resursă din YAML sau din aceasta describe prin apăsarea comenzilor rapide de la tastatură corespunzătoare („y” și, respectiv, „d”). Desigur, există și mai multe operațiuni de bază: lista și comenzile rapide de la tastatură sunt întotdeauna vizibile datorită unui „antet” convenabil din interfață (ascuns prin apăsarea Ctrl + e).

La editarea oricărei resurse („e” după selecția acesteia), se deschide editorul de text definit în variabilele de mediu (export EDITOR=vim).
Și iată cum arată descrierea detaliată a resursei (describe):

Această ieșire (sau rezultatul vizualizării manifestului de resurse YAML) poate fi salvată utilizând scurtătura familiară de la tastatură Ctrl + s. Unde va fi salvat va fi cunoscut din mesajul K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! De asemenea, puteți restaura resurse din fișierele de rezervă create, după ce eliminați etichetele și adnotările de sistem. Pentru a face acest lucru, trebuie să mergeți la directorul cu ei (:dir /tmp), apoi selectați fișierul dorit și aplicați apply.
Apropo, oricând puteți reveni la ReplicaSet-ul anterior dacă există probleme cu cel actual. Pentru a face acest lucru, selectați RS dorit (:rs pentru lista lor):

... și rollback cu Ctrl + l. Ar trebui să primim o notificare că totul a mers bine:
k9s/whoami-5cfbdbb469 successfully rolled backȘi pentru a scala replicile, faceți clic pe „s” (scală) și selectați numărul dorit de instanțe:

Puteți introduce oricare dintre containere folosind shell: pentru a face acest lucru, mergeți la podul dorit, faceți clic pe „s” (shell) și selectați containerul.
Alte caracteristici
Desigur, este acceptată și vizualizarea jurnalelor ("l" pentru resursa selectată). Și pentru a viziona jurnale noi, nu este nevoie să apăsați constant Enter: este suficient să marcați ("m") și apoi să urmăriți doar mesajele noi.

De asemenea, în aceeași fereastră, puteți selecta intervalul de timp pentru ieșirea jurnalelor:
- tasta „1” - timp de 1 minut;
- „2” - 5 minute;
- „3” - 15 minute;
- „4” - 30 minute;
- "5" - 1 oră;
- „0” - pentru întreaga durată de viață a podului.
Mod de operare special Puls (comandă :pulse) arată informații generale despre clusterul Kubernetes:

În el puteți vedea numărul de resurse și starea acestora (verdele arată pe cele care au starea Running).
O altă caracteristică cool a K9s este numită Popeye. Verifică toate resursele pentru anumite criterii de corectitudine și afișează „evaluarea” rezultată cu explicații. De exemplu, puteți vedea că nu există suficiente mostre sau limite, iar un container poate rula ca root...

Există suport de bază pentru Helm. De exemplu, iată cum puteți vedea versiunile implementate în cluster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Benchmark
Chiar și încorporat în K9-uri este un simplu generator de încărcare a serverului HTTP, o alternativă la cel mai cunoscut ab (ApacheBench).
Pentru a-l activa, trebuie să activați port-forward în pod. Pentru a face acest lucru, selectați podul și apăsați Shift + f, accesați submeniul port-forward folosind aliasul „pf”.

După selectarea portului și apăsarea Ctrl + b, va începe benchmark-ul în sine. Rezultatele muncii sale sunt stocate în /tmp și sunt disponibile pentru vizionare ulterioară în K9s.


Pentru a modifica configurația benchmark-ului, trebuie să creați un fișier $HOME/.k9s/bench-<my_context>.yml (determinat pentru fiecare cluster).
NB: Este important ca extensia tuturor fișierelor YAML dintr-un director .k9s a fost exact .yml (.yaml nu funcționează corect).
Exemplu de configurare:
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
interfață
Aspectul coloanelor pentru listele de resurse este modificat prin crearea unui fișier $HOME/.k9s/views.yml. Un exemplu de conținut:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Adevărat, nu există suficientă coloană pentru etichete, pentru care există .
Sortarea după coloane se realizează prin comenzi rapide de la tastatură:
- Shift + n - după nume;
- Shift + o - după noduri;
- Shift + i - prin IP;
- Shift + a - după durata de viață a containerului;
- Shift + t - după numărul de reporniri;
- Shift + r - după starea de pregătire;
- Shift + c - după consumul CPU;
- Shift + m - prin consumul de memorie.
Dacă cuiva nu îi place schema de culori implicită, K9s chiar o acceptă . Sunt disponibile exemple gata făcute (7 bucăți). . Iată un exemplu al uneia dintre aceste skinuri (in Marina):

Плагины
În cele din urmă, vă permit să extindeți capacitățile K9-urilor. Eu însumi am folosit doar unul dintre ele în munca mea - kubectl get all -n $namespace.
Arata cam asa. Creați un fișier $HOME/.k9s/plugin.yml cu conținut ca acesta:
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 puteți merge la spațiul de nume și apăsați „g” pentru a executa cu comanda corespunzătoare:

Printre pluginuri se numără, de exemplu, integrări cu kubectl-jq și un utilitar pentru vizualizarea jurnalelor .
Concluzie
Pentru gustul meu, K9s s-a dovedit a fi foarte convenabil să lucrezi cu: te poți obișnui rapid să cauți tot ce ai nevoie fără a-l folosi. kubectl. Am fost mulțumit de vizualizarea jurnalelor și salvarea lor, editarea rapidă a resurselor, viteza de lucru în general *, modul Popeye s-a dovedit a fi util. O mențiune specială este capacitatea de a crea plugin-uri și de a modifica aplicația pentru a se potrivi nevoilor dumneavoastră.
* Deși, cu un volum mare de bușteni, am observat și funcționarea lentă a K9-urilor. În astfel de momente, utilitarul a „mâncat” 2 nuclee de la Intel Xeon E312xx și ar putea chiar să înghețe.
Ce lipsește în acest moment? Rollback rapid la versiunea anterioară (nu vorbim despre RS) fără a merge la director. În plus, recuperarea are loc numai pentru numai resursă: dacă ștergeți o adnotare sau o etichetă, va trebui să ștergeți și să restaurați întreaga resursă (aici trebuie să mergeți la director). Un alt fleac - nu există suficientă dată pentru astfel de „backup-uri” salvate.
PS
Citește și pe blogul nostru:
- «»;
- «»;
- «".
Sursa: www.habr.com
