
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 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/k9sPro některé linuxové distribuce a další operační systémy jsou také k dispozici hotové instalační balíčky. Obecně 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/binNeexistují žá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.)

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.
![]()
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.

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:
![]()
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:

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.
![]()
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:

(Každý z týchto zdrojov je možné upravovať, meniť, robiť describe.)
A tu je Deployment s Ingressom:

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).

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):

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):

… 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í:

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.

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:

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...

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ý — 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“.

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.


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 .
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é . Hotové príklady (7 kusov) sú k dispozícii . Tu je príklad jednej z takých tém (in the navy):

Doplnky
Nakoniec, 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:

Medzi pluginmi sú napríklad integrácie s kubectl-jq a utilitami na prezeranie logov .
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
