Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

K9 poskytuje terminálové uživatelské rozhraní pro interakci s clustery Kubernetes. Cílem tohoto projektu Open Source je usnadnit navigaci, sledování a správu aplikací v K8s. K9s neustále monitoruje změny v Kubernetes a nabízí rychlé příkazy pro práci s monitorovanými prostředky.

Projekt je napsán v Go a existuje již více než rok a půl: první commit byl proveden 1. února 2019. V době psaní tohoto článku je na 9000+ hvězd GitHub a asi 80 přispěvatelů. Podívejme se, co k9 umí?

Instalace a spuštění

Toto je klientská aplikace (ve vztahu ke clusteru Kubernetes), kterou je nejjednodušší spustit jako obrázek Docker:

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

Pro některé distribuce Linuxu a další operační systémy jsou připraveny k instalaci пакеты. Obecně platí, že pro systémy Linux můžete 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

Na samotný cluster K8s nejsou žádné specifické požadavky. Soudě podle recenzí aplikace funguje i se staršími verzemi Kubernetes, jako je 1.12.

Aplikace se spouští pomocí standardní konfigurace .kube/config - podobně jako to dělá kubectl.

Navigace

Ve výchozím nastavení se otevře okno s výchozím jmenným prostorem určeným pro kontext. Tedy pokud jsi napsal kubectl config set-context --current --namespace=test, pak se otevře jmenný prostor test. (Změnu kontextů/jmenných prostorů naleznete níže.)

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Jít do příkazový režim se provádí stisknutím ":". Poté můžete ovládat činnost k9 pomocí příkazů - například pro zobrazení seznamu StatefulSets (v aktuálním jmenném prostoru) můžete zadat :sts.

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Pro některé další zdroje Kubernetes:

  • :ns — jmenné prostory;
  • :deploy — nasazení;
  • :ing — Ingreses;
  • :svc — Služby.

Chcete-li zobrazit úplný seznam typů zdrojů dostupných k prohlížení, existuje příkaz :aliases.

Je také vhodné zobrazit seznam příkazů dostupných kombinací horkých kláves v aktuálním okně: k tomu stačí kliknout na "?".

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Také v k9s existuje režim vyhledávání, ke kterému stačí zadat "/". S ním se provádí vyhledávání v obsahu aktuálního "okna". Řekněme, že jste vstoupili dříve :ns, máte otevřený seznam jmenných prostorů. Pokud je jich příliš mnoho, pak aby se dlouho nerolovalo dolů, stačí zadat do okna s jmennými prostory /mynamespace.

Chcete-li vyhledávat podle štítků, můžete vybrat všechny pody v požadovaném jmenném prostoru a poté zadat např. / -l app=whoami. Získáme seznam lusků s tímto štítkem:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Vyhledávání funguje ve všech typech oken, včetně protokolů, prohlížení YAML manifestů a describe zdroje – další podrobnosti o těchto funkcích naleznete níže.

Jak vypadá celkový tok navigace?

Pomocí příkazu :ctx můžete si vybrat kontext:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Pro výběr jmenného prostoru je zde již zmíněný příkaz :nsa poté můžete použít hledání požadovaného prostoru: /test.

Pokud nyní vybereme zdroj, který nás zajímá (například stejný StatefulSet), objeví se pro něj odpovídající informace: kolik podů běží se stručnými informacemi o nich.

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Zajímavé mohou být pouze lusky - pak stačí zadat :pod. V případě ConfigMaps (:cm - pro seznam těchto zdrojů si můžete vybrat objekt zájmu a kliknout na "u", načež vám K9s řekne, kdo jej konkrétně používá (tento CM).

Další užitečnou funkcí pro prohlížení zdrojů je jejich "rentgen" (rentgenový pohled). Tento režim je volán příkazem :xray RESOURCE a ... je jednodušší ukázat, jak to funguje, než vysvětlovat. Zde je ilustrace pro StatefulSets:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes
(Každý z těchto zdrojů lze upravit, změnit, vytvořit describe.)

A zde je Deployment with Ingress:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Práce se zdroji

Můžete získat informace o každém zdroji v YAML nebo jeho describe stisknutím odpovídajících klávesových zkratek („y“ a „d“, v tomto pořadí). Samozřejmě existuje ještě více základních operací: jejich seznam a klávesové zkratky jsou vždy viditelné díky pohodlné „hlavičce“ v rozhraní (skryté stisknutím Ctrl + e).

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Při editaci libovolného zdroje ("e" po jeho výběru) se otevře textový editor definovaný v proměnných prostředí (export EDITOR=vim).

A zde je, jak vypadá podrobný popis zdroje (describe):

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Tento výstup (nebo výstup zobrazení manifestu prostředku YAML) lze uložit pomocí známé klávesové zkratky Ctrl + s. Kde bude uložen, bude známo ze zprávy K9s:

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

Po odstranění systémových štítků a anotací můžete také obnovit prostředky z vytvořených záložních souborů. Chcete-li to provést, musíte s nimi přejít do adresáře (:dir /tmp), poté vyberte požadovaný soubor a použijte apply.

Mimochodem, kdykoli se můžete vrátit k předchozí ReplicaSet, pokud se vyskytnou problémy s tou aktuální. Chcete-li to provést, vyberte požadovaný RS (:rs pro jejich seznam):

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

... a vrátit zpět pomocí Ctrl + l. Měli bychom dostat oznámení, že vše proběhlo v pořádku:

k9s/whoami-5cfbdbb469 successfully rolled back

A pro zmenšení replik stačí kliknout na "s" (měřítko) a vybrat požadovaný počet instancí:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Pomocí shellu můžete zadat libovolný kontejner: přejděte na požadovaný modul, klikněte na "s" (shell) a vyberte kontejner.

Další funkce

Samozřejmě je podporováno i prohlížení logů ("l" pro vybraný zdroj). A abyste mohli sledovat nové protokoly, není třeba neustále mačkat Enter: stačí označit („m“) a pak teprve sledovat nové zprávy.

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Ve stejném okně můžete také vybrat časový rozsah pro výstup protokolů:

  • klíč "1" - po dobu 1 minuty;
  • "2" - 5 minut;
  • "3" - 15 minut;
  • "4" - 30 minut;
  • "5" - 1 hodina;
  • "0" - po celou dobu životnosti modulu.

Speciální provozní režim Pulse (příkaz :pulse) zobrazuje obecné informace o clusteru Kubernetes:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

V něm vidíte počet zdrojů a jejich stav (zelená barva ukazuje ty, které mají stav Running).

Další skvělá funkce K9s je tzv Popeye. Zkontroluje všechny zdroje na určitá kritéria správnosti a zobrazí výsledné "hodnocení" s vysvětlením. Můžete například vidět, že není dostatek vzorků nebo limitů a nějaký kontejner může běžet jako root ...

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

K dispozici je základní podpora Helm. Takto můžete například vidět vydání nasazená v clusteru:

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

měřítko

Dokonce i zabudované do K9 hej je jednoduchý generátor zatížení HTTP serveru, alternativa ke známějšímu ab (ApacheBench).

Chcete-li to povolit, musíte v modulu povolit předávání portu. Chcete-li to provést, vyberte modul a stiskněte Shift + f, přejděte do podnabídky přesměrování portu pomocí aliasu "pf".

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Po výběru portu a stisknutí Ctrl + b se spustí samotný benchmark. Výsledky jeho práce jsou uloženy v /tmp a jsou k dispozici pro pozdější prohlížení v K9s.

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes
Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Chcete-li změnit konfiguraci benchmarku, musíte vytvořit soubor $HOME/.k9s/bench-<my_context>.yml (určeno pro každý shluk).

Poznámka: Je důležité, aby přípona všech souborů YAML v adresáři .k9s bylo to přesně .yml (.yaml nefunguje správně).

Příklad konfigurace:

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

rozhraní

Vzhled sloupců pro seznamy zdrojů je upraven vytvořením souboru $HOME/.k9s/views.yml. Ukázka 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 není dostatek sloupců pro štítky, pro které existuje problém v projektu.

Řazení podle sloupců se provádí pomocí klávesových zkratek:

  • Shift + n - podle jména;
  • Shift + o - podle uzlů;
  • Shift + i - podle IP;
  • Shift + a - podle životnosti kontejneru;
  • Shift + t - podle počtu restartů;
  • Shift + r - podle stavu připravenosti;
  • Shift + c - podle spotřeby CPU;
  • Shift + m - podle spotřeby paměti.

Pokud se někomu nelíbí výchozí barevné schéma, K9s dokonce podporuje kůže. K dispozici jsou hotové příklady (7 kusů). zde. Zde je příklad jednoho z těchto skinů (v námořnictvu):

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Плагины

Konečně, pluginy vám umožní rozšířit možnosti K9. Sám jsem ve své práci použil pouze jeden z nich - kubectl get all -n $namespace.

Vypadá to takhle. Vytvořte soubor $HOME/.k9s/plugin.yml s obsahem jako 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"

Nyní můžete přejít do jmenného prostoru a stisknutím „g“ provést odpovídající příkaz:

Přehled k9s - pokročilé terminálové rozhraní pro Kubernetes

Mezi pluginy jsou například integrace s kubectl-jq a utilita pro prohlížení logů přísný.

Závěr

Na můj vkus se K9 ukázaly jako velmi pohodlné na práci: rychle si zvyknete hledat vše, co potřebujete, aniž byste to používali. kubectl. Potěšil mě pohled na logy a jejich ukládání, rychlá editace zdrojů, rychlost práce obecně *, režim Popeye se ukázal jako užitečný. Zvláštní zmínkou je možnost vytvářet pluginy a upravovat aplikaci tak, aby vyhovovala vašim potřebám.

* I když při velkém objemu logů jsem zaznamenal i pomalý chod K9s. V takových chvílích utilita „sežrala“ 2 jádra z Intel Xeon E312xx a mohla i zamrznout.

Co v tuto chvíli chybí? Rychlý návrat k předchozí verzi (nemluvíme o RS) bez přechodu do adresáře. Navíc k obnově dochází pouze pro pouze prostředek: pokud smažete anotaci nebo štítek, budete muset smazat a obnovit celý prostředek (zde musíte přejít do adresáře). Další drobnost - na takto uložené "zálohy" je málo data.

PS

Přečtěte si také na našem blogu:

Zdroj: www.habr.com

Přidat komentář