Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

K9s poskytuje uživatelské rozhraní terminálu pro interakci s Kubernetes clustery. Cílem tohoto Open Source projektu je usnadnit pohodlnou navigaci v aplikacích v K8s, jejich sledování a správu. K9s neustále sleduje změny v Kubernetes a nabízí rychlé příkazy pro práci se sledovanými zdroji.

Projekt je napsán v Go, existuje již více než rok a půl: první commit byl proveden 1. února 2019. K datu napsání článku se počet hvězdiček vyšplhal na více než 9000 na GitHub a přibližně 80 přispěvatelů. Podívejme se, co k9s umí?

Instalace a spuštění

Jedná se o klientskou aplikaci (ve vztahu k Kubernetes clustru), kterou je nejjednodušší spustit jako Docker obraz:

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

Pro některé linuxové distribuce a další operační systémy jsou také k dispozici hotové instalační balíčky. balíčkomObecně platí, že pro Linuxové systémy lze nainstalovat binární soubor:

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

Neexistují žádné specifické požadavky na samotný K8s cluster. Podle recenzí aplikace funguje i se staršími verzemi Kubernetes, jako je 1.12.

Aplikace se spouští pomocí standardního configu .kube/config — obdobně, jak to dělá kubectl.

Navigácia

Ve výchozím nastavení se otevře okno se standardním názvovým prostorem, který je uveden pro kontext. To znamená, že pokud jste zadali kubectl config set-context --current --namespace=test, tak se otevře název prostoru test. (O změně kontextů/názvových prostorů viz níže.)

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Přechod do příkazového modu se provádí stisknutím na ':'. Poté můžete spravovat fungování k9s pomocí příkazů — například pro zobrazení seznamu StatefulSets (v aktuálním názvovém prostoru) můžete zadat :sts.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Pro některé další zdroje Kubernetes:

  • :ns — Názvové prostory;
  • :deploy — Nasazení;
  • :ing — Ingressy;
  • :svc — Služby.

Chcete-li zobrazit úplný seznam typů zdrojů dostupných pro zobrazení, existuje příkaz :aliases.

Je pohodlné prohlížet také seznam příkazů dostupných pomocí klávesových zkratek v aktuálním okně: stačí stisknout '?' mnohdy.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Také v k9s je režim vyhledávání, do kterého se dostanete jednoduše zadáním '/'. S ním se provádí vyhledávání v obsahu aktuálního 'okna'. Představte si, že jste předtím zadali :ns, máte otevřený seznam názvových prostorů. Pokud jich je příliš mnoho, není třeba dlouze rolovat dolů, stačí v okně s názvovými prostory zadat /mynamespace.

Na vyhľadávanie podľa štítkov môžete vybrať všetky pod’y v potrebnom namespaces, potom zadať napríklad, / -l app=whoami. Získame zoznam pod’ov s týmto štítkom:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Vyhľadávanie funguje vo všetkých typoch okien, vrátane logov, prehliadania YAML manifestov a describe pre zdroje — podrobnejšie informácie o týchto možnostiach nájdete nižšie.

Aký je celkový postup na navigáciu?

Pomocou príkazu :ctx môžete vybrať kontext:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Na výber namespace sa už spomínala príkaz :ns, a potom môžete využiť vyhľadávanie v potrebnom priestore: /test.

Ak si teraz vyberieme zaujímavý zdroj (napríklad ten istý StatefulSet), zobrazí sa nám príslušná informácia: koľko pod’ov beží s krátkymi informáciami o nich.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Môžu nás zaujímať len pod’y — stačí zadať :pod. V prípade ConfigMap’ov (:cm — pre zoznam týchto zdrojov) môžete vybrať zaujímavý objekt a stlačiť "u", po čom K9s naznačí, kto konkrétne ho (tento CM) používa.

Ešte jedna užitočná funkcia pre prehliadanie zdrojov — ich "rentgen" (XRay view). Tento režim sa aktivuje príkazom :xray RESOURCE a... jednoduchšie je ukázať, ako to funguje, než to vysvetľovať. Tu je ilustrácia pre StatefulSets:

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

A tu je Deployment s Ingressom:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Práca so zdrojmi

O každom zdroji môžete získať informácie v YAML alebo jeho describe stlačením príslušných klávesových kombinácií ("y" a "d" príslušne). Základných operácií, samozrejme, existuje ešte viac: ich zoznam a klávesové kombinácie sú vždy na dosah vďaka pohodlnému "headeru" v rozhraní (skryje sa stlačením Ctrl + e).

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Pri úprave ktoréhokoľvek zdroja ("e" po jeho výbere) sa otvorí textový editor, ktorý je určený v premenných prostredia (export EDITOR=vim).

A takto vyzerá podrobný popis zdroja (describe):

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Takýto výstup (alebo výstup prehliadania YAML manifestu zdroja) môžete uložiť pomocou známej klávesovej kombinácie Ctrl + s. Kde sa uloží, bude jasné z správy K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml bol úspešne uložený!

Z vytvorených záložných súborov je možné aj obnoviť zdroje, predtým je potrebné odstrániť systémové štítky a anotácie. Na to bude potrebné prejsť do adresára s nimi (:dir /tmp), po čom si vyberiete požadovaný súbor a aplikujete ho apply.

Mimochodom, vždy je možné vrátiť sa k predchádzajúcemu ReplicaSetu, ak sú s aktuálnym nejaké problémy. Na to je potrebné vybrať požadovaný RS (:rs pre ich zoznam):

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

… a vykonať rollback pomocou Ctrl + l. Mali by sme dostať oznámenie, že všetko prebehlo úspešne:

k9s/whoami-5cfbdbb469 bol úspešne vrátený

Aby sme mohli škálovať repliky, stačí stlačiť „s“ (scale) a vybrať požadovaný počet inštancií:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Do ktoréhokoľvek z kontajnerov sa dá vstúpiť pomocou shell: na to prejdite k požadovanému podu, stlačte „s“ (shell) a vyberte kontajner.

Ďalšie možnosti

Samozrejme, podporuje sa aj prehľad logov („l“ pre vybraný zdroj). A ak chcete sledovať nové logy, nie je potrebné neustále stláčať Enter: stačí označiť („m“), po čom sa sledujú len nové správy.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Taktiež v tomto okne môžete vybrať časový rozsah pre výstup logov:

  • klávesa „1“ — za 1 minútu;
  • „2“ — 5 minút;
  • „3“ — 15 minút;
  • „4“ — 30 minút;
  • „5“ — 1 hodina;
  • „0“ — za celú dobu života podu.

Špeciálny režim práce Pulse (príkaz :pulse) zobrazuje celkové informácie o Kubernetes klastri:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

V ňom je možné vidieť množstvo zdrojov a ich stav (zelenou farbou sú označené tie, ktoré majú stav Running).

Ďalšia zaujímavá funkcia K9s sa nazýva Popeye. Kontroluje všetky zdroje podľa určitých kritérií správnosti a zobrazuje získaný „rating“ s vysvetleniami. Napríklad, môžete vidieť, že chýbajú podmienky alebo limity, a nejaký kontajner môže bežať pod rootom...

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Podporuje sa základná podpora Helm. Napríklad, takto môžete vidieť vydania, nasadené do kl astru:

:helm all # všetko
:helm $namespace # v konkrétnom meniacej sa

Benchmark

V K9s bol dokonca zabudovaný hey — to je jednoduchý generátor zaťaženia na HTTP server, alternatíva k známejšiemu ab (ApacheBench).

Na jeho zapnutie je potrebné aktivovať port-forward v pode. Na to vyberieme pod a stlačíme Shift + f, prejdeme do podmenu port-forward pomocou aliasu „pf“.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Po vybratí portu a stlačení Ctrl + b sa spustí sám benchmark. Výsledky jeho práce sa ukladajú do /tmp a sú dostupné pre následné prezeranie v K9s.

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes
Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Na zmenu konfigurácie benchmarku je potrebné vytvoriť súbor $HOME/.k9s/bench-.yml (určuje sa pre každý klaster).

NB: Dôležité je, aby prípona všetkých YAML súborov v adresári .k9s bola práve .yml (.yaml nefunguje správne).

Príklad konfigurácie:

benchmarky:
  predvolené:
    # Počet vlákien
    concurrency: 2
    # Počet požiadaviek
    requests: 1000
  kontejnery:
    # Nastavenia pre kontejner s benchmarkom
    # Kontejner je definovaný ako 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
 služby:
    # Je možné vykonávať benchmark na službách typu NodePort a LoadBalancer
    # Syntax: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Rozhranie

Zobrazenie stĺpcov pre zoznamy zdrojov sa dá upraviť 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

Pravda, chýba tu stĺpec pre štítky, na čo je tu problém v projekte.

Zoradenie podľa stĺpcov sa vykonáva klávesovými skratkami:

  • Shift + n — podľa mena;
  • Shift + o — podľa uzlov;
  • Shift + i — podľa IP;
  • Shift + a — podľa času života kontajnera;
  • 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 niekto nemá rád predvolené farebné nastavenia, v K9s sú dokonca podporované témy. Hotové príklady (7 kusov) sú k dispozícii tu. Tu je príklad jednej z takých tém (in the navy):

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Doplnky

Nakoniec, pluginy umožňujú rozšíriť možnosti K9s. Osobne som v práci použil iba jednu z nich — kubectl get all -n $namespace.

Vyzerá to nasledovne. Vytvoríme súbor $HOME/.k9s/plugin.yml s takým obsahom:

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 namespace a stlačiť „g“ na vykonanie s príslušným príkazom:

Prehľad k9s — pokročilého terminálového rozhrania pre Kubernetes

Medzi pluginmi sú napríklad integrácie s kubectl-jq a utilitami na prezeranie logov stern.

Záver

Podľa môjho názoru je K9s veľmi pohodlná na používanie: celkom rýchlo si zvyknete hľadať všetko potrebné bez použitia kubectl. Tešili ma prezeranie logov a ich ukladanie, rýchle upravovanie zdrojov, rýchlosť práce celkovo*, bol užitočný režim Popeye. Zvlášť treba spomenúť možnosti vytvárať pluginy a prispôsobiť aplikáciu svojim potrebám.

* Aj pri veľkých objemoch logov som si všimol aj pomalú prácu K9s. V takýchto okamihoch nástroj „zožral“ 2 jadrá z Intel Xeon E312xx a dokonca mohol zablokovať.

Čo v súčasnosti chýba? Rýchly návrat na predchádzajúcu verziu (nepovedzme o RS) bez prechodu do adresára. Okrem toho, obnovenie prebieha len pre všetko zdroja: ak ste vymazali anotáciu alebo štítok, bude potrebné vymazať a obnoviť celý zdroj (tu bude potrebné prejsť do adresára). Ďalšia drobnosť - chýba dátum takýchto uložených „záloh“.

P.S.

Prečítajte si tiež na našom blogu:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster