
poskytuje terminálové rozhraní pro interakci s Kubernetes klastry. Cílem tohoto open-source projektu je usnadnit uživatelskou navigaci aplikacemi v K8s, jejich sledování a správu. K9s neustále monitoruje změny v Kubernetes a nabízí rychlé příkazy pro práci se sledovanými zdroji.
Projekt je napsán v Go a existuje již více než půl druhého roku: první commit byl proveden 1. února 2019. K datu psaní článku má více než 9000 hvězdiček na 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 klastru), kterou je nejjednodušší spustit jako Docker obraz:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sPro některé distribuce Linuxu a další operační systémy jsou také k dispozici připravené instalační . Obecně lze pro linuxové systémy 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/binPro samotný klastr K8s nejsou žádné specifické požadavky. Podle recenzí aplikace funguje i se staršími verzemi Kubernetes, jako je 1.12.
Aplikace se spouští pomocí standardního konfiguračního .kube/config — analogického tomu, jak to dělá kubectl.
Navigace
Ve výchozím nastavení se otevře okno se standardním namespace, který je uveden pro kontext. To znamená, že pokud jste zapsali kubectl config set-context --current --namespace=test, pak se otevře namespace test. (O přepínání kontextů/jmenných prostorů viz níže.)

Přepnutí do režimu příkazů se provádí stisknutím „:“. Poté lze spravovat práci s k9s pomocí příkazů — například pro zobrazení seznamu StatefulSets (ve vybraném jmenném prostoru) můžete zadat :sts.
![]()
Pro některé další zdroje Kubernetes:
-
:ns— Namespaces; -
:deploy— Deployments; -
:ing— Ingresses; -
:svc— Services.
Pro zobrazení úplného seznamu typů zdrojů, které jsou k dispozici k zobrazení, existuje příkaz :aliases.
Je také užitečné prohlédnout si seznam příkazů dostupných pomocí klávesových zkratek v rámci aktuálního okna: stačí stisknout „?“.

V k9s je také režim vyhledávání, pro přechod do kterého stačí zadat „/“. S jeho pomocí se provádí vyhledávání v aktuálním „okně“. Předpokládejme, že jste dříve zadali :ns, máte otevřený seznam jmenných prostorů. Pokud jich je moc, abyste nemuseli dlouze scrollovat dolů, stačí v okně s namespaces zadat /mynamespace.
Pro hledání podle štítků můžete vybrat všechny poděly ve správném jmenném prostoru, poté můžete zadat například / -l app=whoami. Dostaneme seznam podělů s tímto štítkem:
![]()
Hledání funguje ve všech typech oken, včetně protokolů, zobrazení YAML manifestů a popis pro zdroje — více o těchto funkcích viz níže.
Jak celkově vypadá postup navigace?
Pomocí příkazu :ctx můžete vybrat kontext:

Pro výběr jmenného prostoru je zde již zmiňovaný příkaz :ns, a poté můžete použít hledání pro požadovaný prostor: /test.
Pokud nyní vyberete nás zajímající zdroj (například stejný StatefulSet), zobrazí se odpovídající informace: kolik je spuštěno podělů s krátkými informacemi o nich.
![]()
Mohou být zajímavé pouze poděly — pak stačí zadat :pod. V případě ConfigMapů (:cm — pro seznam těchto zdrojů) můžete vybrat zajímavý objekt a stisknout „u“, po čemž K9s naznačí, kdo konkrétně jej (tento CM) používá.
Další užitečná funkce pro prohlížení zdrojů — jejich „rentgen“ (XRay view). Tento režim se spouští příkazem :xray RESOURCE a… je jednodušší ukázat, jak funguje, než to vysvětlovat. Zde je ilustrace pro StatefulSets:

(Každý z těchto zdrojů lze upravovat, měnit, provádět popis.)
A tady je Deployment s Ingress:

Práce se zdroji
O každém zdroji lze získat informace v YAML nebo jeho popis stiskem příslušných klávesových zkratek („y“ a „d“ resp.). Základních operací je samozřejmě ještě víc: jejich seznam a klávesové zkratky jsou vždy na očích díky praktické „hlavičce“ v rozhraní (skryje se stiskem Ctrl + e).

Při úpravách jakéhokoliv zdroje („e“ po jeho vybrání) se otevře textový editor definovaný v proměnných prostředí (export EDITOR=vim).
A takto vypadá podrobný popis zdroje (popis):

Takový výstup (nebo výstup z prohlížení YAML manifestu zdroje) lze uložit pomocí obvyklé klávesové zkratky Ctrl + s. Kde bude uložen, bude známo z zprávy K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml was saved successfully! Z vytvořených zálohovacích souborů lze také obnovovat zdroje, přičemž předtím je třeba odstranit systémové štítky a anotace. K tomu je nutné přejít do adresáře s nimi (:dir /tmp), poté vybrat požadovaný soubor a použít apply.
Mimochodem, kdykoli se můžete vrátit k předchozímu ReplicaSetu, pokud máte s aktuálním problém. K tomu je potřeba vybrat požadovaný RS (:rs pro jejich seznam):

… a provést rollback pomocí Ctrl + l. Měli bychom dostat oznámení, že všechno proběhlo úspěšně:
k9s/whoami-5cfbdbb469 úspěšně vrácen zpětA pro škálování replik stačí stisknout „s“ (scale) a vybrat požadovaný počet instancí:

Do jakéhokoli z kontejnerů se můžete dostat pomocí shellu: k tomu přejděte k požadovanému podu, stiskněte „s“ (shell) a vyberte kontejner.
Další možnosti
Samozřejmě, že je podporováno i prohlížení logů („l“ pro vybraný zdroj). A abyste viděli nové logy, není potřeba neustále mačkat Enter: stačí udělat značkování („m“), po kterém se budou sledovat pouze nové zprávy.

Také v tomto okně můžete vybrat časové období pro výstup logů:
- klávesa „1“ — za 1 minutu;
- „2“ — 5 minut;
- „3“ — 15 minut;
- „4“ — 30 minut;
- „5“ — 1 hodina;
- „0“ — za celou dobu života podu.
Speciální pracovní režim Pulse (příkaz :pulse) zobrazuje obecné informace o Kubernetes klastru:

V něm můžete vidět množství zdrojů a jejich stav (zeleně jsou zobrazeny ty, které mají status Dokončeno).
Další zajímavou funkcí K9s se nazývá Popeye. Kontroluje všechny zdroje podle určitých kritérií správnosti a vyhodnocuje výsledný „rating“ s vysvětlením. Například lze vidět, že chybí limity nebo že nějaký kontejner může běžet pod rootem…

Existuje základní podpora pro Helm. Například takto můžete zobrazit vydání nasazená v klastru:
:helm all # všechna
:helm $namespace # ve konkrétním jmenném prostoru
Benchmark
V K9s je dokonce zabudovaný — to je jednoduchý generátor zátěže pro HTTP server, alternativa známějšímu ab (ApacheBench).
Pro jeho aktivaci je potřeba povolit port-forward v podu. K tomu vyberte pod a stiskněte Shift + f, přejděte do podmenu port-forward pomocí aliasu „pf“.

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


Pro změnu konfigurace benchmarku je potřeba vytvořit soubor $HOME/.k9s/bench-.yml (definovaný pro každý klastr).
NB: Důležité je, aby přípona všech YAML souborů v adresáři .k9s byla přesně .yml (.yaml nefunguje správně).
Příklad konfigurace:
benchmarks:
defaults:
# Počet vláken
concurrency: 2
# Počet požadavků
requests: 1000
containers:
# Nastavení pro kontejner s benchmarkem
# Kontejner je definován jako 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:
# Je možné provádět benchmark na službách typu NodePort a LoadBalancer
# Syntaxe: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
Rozhraní
Zobrazení sloupců pro seznamy zdrojů se mění vytvořením souboru $HOME/.k9s/views.yml. Příklad jeho obsahu:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Opravdu, chybí sloupec pro labely, na což je .
Řazení podle sloupců se provádí klávesovými zkratkami:
- Shift + n — podle jména;
- Shift + o — podle uzlů;
- Shift + i — podle IP;
- Shift + a — podle doby ž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, v K9s je dokonce podporováno . Hotové příklady (7 kusů) jsou k dispozici . Zde je příklad jednoho z těchto skinů (in the navy):

Pluginy
Nakonec umožňují rozšířit funkčnost K9s. Sám jsem v práci používal pouze jeden z nich — kubectl get all -n $namespace.
Vypadá to takto. Vytvořte soubor $HOME/.k9s/plugin.yml s tímto obsahem:
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í se můžete přepnout do prostoru jmen a stisknout „g“ pro provedení příslušného příkazu:

Mezi pluginy jsou například integrace s kubectl-jq a nástrojem pro prohlížení logů .
Závěr
Podle mého názoru je K9s velmi pohodlné pro práci: rychle si zvyknete na hledání všech potřebných informací bez použití kubectl. Potěšilo mě prohlížení logů a jejich ukládání, rychlé upravování zdrojů, celková rychlost práce, režim Popeye se ukázal jako užitečný. Stojí za zmínku možnosti vytváření pluginů a přizpůsobení aplikace vlastním potřebám.
* I když jsem si při velkém objemu logů také všiml pomalého fungování K9s. V takových chvílích nástroj „zabíral“ 2 jádra na Intel Xeon E312xx a někdy dokonce zamrzal.
Co v tuto chvíli chybí? Rychlé vrácení se na předchozí verzi (nejde o RS) bez přechodu do adresáře. Kromě toho se obnova provádí pouze pro celé zdroje: pokud odstraníte anotaci nebo štítek, budete muset odstranit a obnovit celý zdroj (zde bude nutné přejít do adresáře). Další drobnost — chybí datum takových uložených „záloh“.
P.S.
Přečtěte si také náš blog:
- «»;
- «»;
- «».
Zdroj: habr.com
