ProHoster > Blog > podávání > 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:
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.)
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.
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 "?".
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:
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:
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.
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:
(Každý z těchto zdrojů lze upravit, změnit, vytvořit describe.)
A zde je Deployment with Ingress:
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ř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):
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:
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):
... 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í:
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.
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:
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 ...
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".
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.
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):
Плагины
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:
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.