Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

K9 poskytuje terminálové používateľské rozhranie na interakciu s klastrami Kubernetes. Cieľom tohto projektu s otvoreným zdrojom je uľahčiť navigáciu, monitorovanie a správu aplikácií v K8s. K9s neustále monitoruje zmeny v Kubernetes a ponúka rýchle príkazy na prácu s monitorovanými zdrojmi.

Projekt je napísaný v Go a existuje už viac ako rok a pol: prvý záväzok bol urobený 1. februára 2019. V čase písania tohto článku je zapnutých viac ako 9000 hviezd GitHub a asi 80 prispievateľov. Pozrime sa, čo dokážu k9?

Inštalácia a spustenie

Toto je klientska aplikácia (v súvislosti s klastrom Kubernetes), ktorú je najjednoduchšie spustiť ako obrázok Docker:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Pre niektoré distribúcie Linuxu a iné operačné systémy sú tiež pripravené na inštaláciu balíčky. Vo všeobecnosti pre systémy Linux môžete nainštalovať binárny súbor:

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

Na samotný klaster K8s neexistujú žiadne špecifické požiadavky. Súdiac podľa recenzií, aplikácia funguje aj so staršími verziami Kubernetes, ako napríklad 1.12.

Aplikácia sa spúšťa pomocou štandardnej konfigurácie .kube/config - podobne ako to robí kubectl.

Navigácia

Štandardne sa otvorí okno s predvoleným menným priestorom určeným pre kontext. Teda ak si napísal kubectl config set-context --current --namespace=test, potom sa otvorí menný priestor test. (Zmenu kontextov/priestorov názvov nájdete nižšie.)

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Ísť do príkazový režim sa vykoná stlačením „:“. Potom môžete ovládať činnosť k9 pomocou príkazov - napríklad na zobrazenie zoznamu StatefulSets (v aktuálnom mennom priestore) môžete zadať :sts.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Pre niektoré ďalšie zdroje Kubernetes:

  • :ns — menné priestory;
  • :deploy — Nasadenia;
  • :ing — Ingreses;
  • :svc — Služby.

Ak chcete zobraziť úplný zoznam typov zdrojov dostupných na prezeranie, existuje príkaz :aliases.

Je tiež vhodné zobraziť zoznam príkazov dostupných pomocou kombinácií klávesových skratiek v aktuálnom okne: na to stačí kliknúť na „?“.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Aj v k9s je režim vyhľadávania, na prechod na ktorý stačí zadať "/". Pomocou neho sa vykoná vyhľadávanie obsahu aktuálneho „okna“. Povedzme, že ste predtým zadali :ns, máte otvorený zoznam menných priestorov. Ak je ich príliš veľa, potom, aby ste sa dlho neposúvali nadol, stačí zadať do okna s mennými priestormi /mynamespace.

Ak chcete vyhľadávať podľa štítkov, môžete vybrať všetky pody v požadovanom mennom priestore a potom zadať napr. / -l app=whoami. Získame zoznam strukov s týmto označením:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Vyhľadávanie funguje vo všetkých druhoch okien vrátane protokolov, prezerania manifestov YAML a describe zdroje – ďalšie podrobnosti o týchto funkciách nájdete nižšie.

Ako vyzerá celkový tok navigácie?

S príkazom :ctx môžete si vybrať kontext:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Na výber menného priestoru je tu už spomínaný príkaz :nsa potom môžete použiť vyhľadávanie požadovaného priestoru: /test.

Ak teraz vyberieme zdroj, ktorý nás zaujíma (napríklad rovnaký StatefulSet), zobrazia sa preň príslušné informácie: koľko modulov beží so stručnými informáciami o nich.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Iba struky môžu byť zaujímavé - potom stačí zadať :pod. V prípade ConfigMaps (:cm - pre zoznam týchto zdrojov si môžete vybrať objekt záujmu a kliknúť na "u", po ktorom vám K9s povie, kto ho konkrétne používa (tento CM).

Ďalšou šikovnou funkciou na prezeranie zdrojov je ich "röntgen" (röntgenový pohľad). Tento režim sa volá príkazom :xray RESOURCE a ... je ľahšie ukázať, ako to funguje, ako vysvetliť. Tu je ilustrácia pre StatefulSets:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes
(Každý z týchto zdrojov je možné upravovať, meniť, vytvárať describe.)

A tu je Deployment with Ingress:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Práca so zdrojmi

Môžete získať informácie o každom zdroji v YAML alebo jeho describe stlačením príslušných klávesových skratiek („y“ a „d“). Samozrejme, existujú ešte základnejšie operácie: ich zoznam a klávesové skratky sú vždy viditeľné vďaka pohodlnej „hlavičke“ v rozhraní (skrytej stlačením Ctrl + e).

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Pri úprave akéhokoľvek zdroja ("e" po jeho výbere) sa otvorí textový editor definovaný v premenných prostredia (export EDITOR=vim).

A tu je, ako vyzerá podrobný popis zdroja (describe):

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Tento výstup (alebo výstup zobrazenia YAML manifestu zdroja) je možné uložiť pomocou známej klávesovej skratky Ctrl + s. Kde sa uloží, bude známe zo správy K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

Môžete tiež obnoviť zdroje z vytvorených záložných súborov po odstránení systémových štítkov a anotácií. Ak to chcete urobiť, musíte s nimi prejsť do adresára (:dir /tmp), potom vyberte požadovaný súbor a použite apply.

Mimochodom, kedykoľvek sa môžete vrátiť k predchádzajúcej ReplicaSet, ak sa vyskytnú problémy s aktuálnou. Ak to chcete urobiť, vyberte požadovaný RS (:rs pre ich zoznam):

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

... a vrátiť späť pomocou Ctrl + l. Mali by sme dostať upozornenie, že všetko prebehlo v poriadku:

k9s/whoami-5cfbdbb469 successfully rolled back

A na zmenšenie kópií stačí kliknúť na „s“ (mierka) a vybrať požadovaný počet inštancií:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Pomocou shellu môžete zadať ktorýkoľvek z kontajnerov: prejdite na požadovaný modul, kliknite na „s“ (shell) a vyberte kontajner.

Ďalšie funkcie

Podporované je samozrejme aj prezeranie denníkov („l“ pre vybraný zdroj). A aby ste mohli sledovať nové záznamy, nie je potrebné neustále stláčať Enter: stačí označiť („m“) a potom už len sledovať nové správy.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

V tom istom okne môžete tiež vybrať časový rozsah pre výstup protokolov:

  • kľúč "1" - na 1 minútu;
  • "2" - 5 minút;
  • "3" - 15 minút;
  • "4" - 30 minút;
  • "5" - 1 hodina;
  • "0" - po celú dobu životnosti modulu.

Špeciálny prevádzkový režim Pulz (príkaz :pulse) zobrazuje všeobecné informácie o klastri Kubernetes:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

V ňom môžete vidieť počet zdrojov a ich stav (zelená farba zobrazuje tie, ktoré majú daný stav Running).

Ďalšou skvelou vlastnosťou K9s je tzv Popeye. Skontroluje všetky zdroje na určité kritériá správnosti a zobrazí výsledné "hodnotenie" s vysvetleniami. Môžete napríklad vidieť, že nie je dostatok vzoriek alebo limitov a nejaký kontajner môže bežať ako root ...

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Existuje základná podpora Helm. Takto môžete napríklad vidieť vydania nasadené v klastri:

:helm all # все
:helm $namespace # в конкретном пространстве имен

mierka

Dokonca zabudované do K9 hej je jednoduchý generátor zaťaženia HTTP servera, alternatíva k známejšiemu ab (ApacheBench).

Ak to chcete povoliť, musíte v podu povoliť presmerovanie portu. Ak to chcete urobiť, vyberte modul a stlačte Shift + f, prejdite do podponuky pre dopredný port pomocou aliasu „pf“.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Po výbere portu a stlačení Ctrl + b sa spustí samotný benchmark. Výsledky jeho práce sú uložené v /tmp a sú k dispozícii na neskoršie prezeranie v K9s.

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes
Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Ak chcete zmeniť konfiguráciu benchmarku, musíte vytvoriť súbor $HOME/.k9s/bench-<my_context>.yml (určené pre každý klaster).

Poznámka: Je dôležité, aby boli všetky súbory YAML v adresári rozšírené .k9s bolo to presne tak .yml (.yaml nefunguje správne).

Príklad konfigurácie:

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

rozhranie

Vzhľad stĺpcov pre zoznamy zdrojov je upravený vytvorením súboru $HOME/.k9s/views.yml. Príklad jeho obsahu:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

Je pravda, že nie je dostatok stĺpcov pre štítky, pre ktoré existuje problém v projekte.

Triedenie podľa stĺpcov sa vykonáva pomocou klávesových skratiek:

  • Shift + n - podľa mena;
  • Shift + o - podľa uzlov;
  • Shift + i - podľa IP;
  • Shift + a - podľa životnosti nádoby;
  • Shift + t - podľa počtu reštartov;
  • Shift + r - podľa stavu pripravenosti;
  • Shift + c - podľa spotreby CPU;
  • Shift + m - podľa spotreby pamäte.

Ak sa niekomu nepáči predvolená farebná schéma, K9s dokonca podporuje skins. K dispozícii sú hotové príklady (7 kusov). tu. Tu je príklad jedného z týchto skinov (v námorníctve):

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Pluginy

Konečne, pluginy vám umožní rozšíriť možnosti K9. Ja sám som vo svojej práci použil iba jeden z nich - kubectl get all -n $namespace.

Vyzerá to takto. Vytvorte súbor $HOME/.k9s/plugin.yml s obsahom ako je tento:

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"

Teraz môžete prejsť do menného priestoru a stlačením „g“ vykonať príslušný príkaz:

Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes

Medzi pluginmi sú napríklad integrácie s kubectl-jq a utilita na prezeranie protokolov prísny.

Záver

Na môj vkus sa práca s K9 ukázala ako veľmi pohodlná: rýchlo si zvyknete hľadať všetko, čo potrebujete, bez toho, aby ste to používali. kubectl. Potešil ma pohľad na logy a ich ukladanie, rýchla editácia zdrojov, rýchlosť práce celkovo *, režim Popeye sa ukázal ako užitočný. Osobitnou zmienkou je možnosť vytvárať pluginy a upravovať aplikáciu tak, aby vyhovovala vašim potrebám.

* Aj keď pri veľkom objeme protokolov som si všimol aj pomalý chod K9. V takýchto momentoch utilita „zožrala“ 2 jadrá z Intel Xeon E312xx a mohla aj zamrznúť.

Čo momentálne chýba? Rýchly návrat na predchádzajúcu verziu (nie o RS) bez prechodu do adresára. Okrem toho dochádza k obnove iba pre iba zdroj: ak vymažete anotáciu alebo štítok, budete musieť vymazať a obnoviť celý zdroj (tu musíte prejsť do adresára). Ďalšia drobnosť – na takéto uložené „zálohy“ je málo dátumu.

PS

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár