Prezentare k9s - interfața avansată de terminal pentru Kubernetes

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

K9s 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 GitHub ș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/k9s

Pentru unele distribuții Linux și alte sisteme de operare, sunt disponibile și pachete gata de instalat. sunt pregătite pentru diferite versiuni de CentOS și Ubuntu.Î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/bin

Nu 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.)

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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 „?”.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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ă:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes
(Fiecare dintre aceste resurse poate fi editată, modificată, făcută describe.)

Iată Deployment-ul cu Ingress:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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).

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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):

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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):

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

… ș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 succes

Iar pentru a scala replicile, este suficient să apeși pe „s” (scale) și să alegi numărul dorit de instanțe:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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:

Prezentare k9s - interfața avansată de terminal pentru 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…

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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 hey — 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”.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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.

Prezentare k9s - interfața avansată de terminal pentru Kubernetes
Prezentare k9s - interfața avansată de terminal pentru Kubernetes

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 o problemă în proiect.

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 teme. Exemplele gata făcute (7 la număr) sunt disponibile aici. Iată un exemplu al uneia dintre aceste teme (in the navy):

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

Plugin-uri

În cele din urmă, pluginuri 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:

Prezentare k9s - interfața avansată de terminal pentru Kubernetes

Printre pluginuri există, de exemplu, integrarea cu kubectl-jq și utilitarul pentru vizualizarea logurilor stern.

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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster