Prehľad k9s - pokročilé terminálové rozhranie pre Kubernetes
K9 poskytuje terminálové používateľské rozhranie na interakciu s klastrami Kubernetes. Cieľom tohto projektu s otvoreným zdrojom je uľahčiť navigáciu, monitorovanie a správu aplikácií v K8s. K9s neustále monitoruje zmeny v Kubernetes a ponúka rýchle príkazy na prácu s monitorovanými zdrojmi.
Projekt je napísaný v Go a existuje už viac ako rok a pol: prvý záväzok bol urobený 1. februára 2019. V čase písania tohto článku je zapnutých viac ako 9000 hviezd GitHub a asi 80 prispievateľov. Pozrime sa, čo dokážu k9?
Inštalácia a spustenie
Toto je klientska aplikácia (v súvislosti s klastrom Kubernetes), ktorú je najjednoduchšie spustiť ako obrázok Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
Pre niektoré distribúcie Linuxu a iné operačné systémy sú tiež pripravené na inštaláciu balíčky. Vo všeobecnosti pre systémy Linux môžete nainštalovať binárny súbor:
Na samotný klaster K8s neexistujú žiadne špecifické požiadavky. Súdiac podľa recenzií, aplikácia funguje aj so staršími verziami Kubernetes, ako napríklad 1.12.
Aplikácia sa spúšťa pomocou štandardnej konfigurácie .kube/config - podobne ako to robí kubectl.
Navigácia
Štandardne sa otvorí okno s predvoleným menným priestorom určeným pre kontext. Teda ak si napísal kubectl config set-context --current --namespace=test, potom sa otvorí menný priestor test. (Zmenu kontextov/priestorov názvov nájdete nižšie.)
Ísť do príkazový režim sa vykoná stlačením „:“. Potom môžete ovládať činnosť k9 pomocou príkazov - napríklad na zobrazenie zoznamu StatefulSets (v aktuálnom mennom priestore) môžete zadať :sts.
Pre niektoré ďalšie zdroje Kubernetes:
:ns — menné priestory;
:deploy — Nasadenia;
:ing — Ingreses;
:svc — Služby.
Ak chcete zobraziť úplný zoznam typov zdrojov dostupných na prezeranie, existuje príkaz :aliases.
Je tiež vhodné zobraziť zoznam príkazov dostupných pomocou kombinácií klávesových skratiek v aktuálnom okne: na to stačí kliknúť na „?“.
Aj v k9s je režim vyhľadávania, na prechod na ktorý stačí zadať "/". Pomocou neho sa vykoná vyhľadávanie obsahu aktuálneho „okna“. Povedzme, že ste predtým zadali :ns, máte otvorený zoznam menných priestorov. Ak je ich príliš veľa, potom, aby ste sa dlho neposúvali nadol, stačí zadať do okna s mennými priestormi /mynamespace.
Ak chcete vyhľadávať podľa štítkov, môžete vybrať všetky pody v požadovanom mennom priestore a potom zadať napr. / -l app=whoami. Získame zoznam strukov s týmto označením:
Vyhľadávanie funguje vo všetkých druhoch okien vrátane protokolov, prezerania manifestov YAML a describe zdroje – ďalšie podrobnosti o týchto funkciách nájdete nižšie.
Ako vyzerá celkový tok navigácie?
S príkazom :ctx môžete si vybrať kontext:
Na výber menného priestoru je tu už spomínaný príkaz :nsa potom môžete použiť vyhľadávanie požadovaného priestoru: /test.
Ak teraz vyberieme zdroj, ktorý nás zaujíma (napríklad rovnaký StatefulSet), zobrazia sa preň príslušné informácie: koľko modulov beží so stručnými informáciami o nich.
Iba struky môžu byť zaujímavé - potom stačí zadať :pod. V prípade ConfigMaps (:cm - pre zoznam týchto zdrojov si môžete vybrať objekt záujmu a kliknúť na "u", po ktorom vám K9s povie, kto ho konkrétne používa (tento CM).
Ďalšou šikovnou funkciou na prezeranie zdrojov je ich "röntgen" (röntgenový pohľad). Tento režim sa volá príkazom :xray RESOURCE a ... je ľahšie ukázať, ako to funguje, ako vysvetliť. Tu je ilustrácia pre StatefulSets:
(Každý z týchto zdrojov je možné upravovať, meniť, vytvárať describe.)
A tu je Deployment with Ingress:
Práca so zdrojmi
Môžete získať informácie o každom zdroji v YAML alebo jeho describe stlačením príslušných klávesových skratiek („y“ a „d“). Samozrejme, existujú ešte základnejšie operácie: ich zoznam a klávesové skratky sú vždy viditeľné vďaka pohodlnej „hlavičke“ v rozhraní (skrytej stlačením Ctrl + e).
Pri úprave akéhokoľvek zdroja ("e" po jeho výbere) sa otvorí textový editor definovaný v premenných prostredia (export EDITOR=vim).
A tu je, ako vyzerá podrobný popis zdroja (describe):
Tento výstup (alebo výstup zobrazenia YAML manifestu zdroja) je možné uložiť pomocou známej klávesovej skratky Ctrl + s. Kde sa uloží, bude známe zo správy K9s:
Môžete tiež obnoviť zdroje z vytvorených záložných súborov po odstránení systémových štítkov a anotácií. Ak to chcete urobiť, musíte s nimi prejsť do adresára (:dir /tmp), potom vyberte požadovaný súbor a použite apply.
Mimochodom, kedykoľvek sa môžete vrátiť k predchádzajúcej ReplicaSet, ak sa vyskytnú problémy s aktuálnou. Ak to chcete urobiť, vyberte požadovaný RS (:rs pre ich zoznam):
... a vrátiť späť pomocou Ctrl + l. Mali by sme dostať upozornenie, že všetko prebehlo v poriadku:
k9s/whoami-5cfbdbb469 successfully rolled back
A na zmenšenie kópií stačí kliknúť na „s“ (mierka) a vybrať požadovaný počet inštancií:
Pomocou shellu môžete zadať ktorýkoľvek z kontajnerov: prejdite na požadovaný modul, kliknite na „s“ (shell) a vyberte kontajner.
Ďalšie funkcie
Podporované je samozrejme aj prezeranie denníkov („l“ pre vybraný zdroj). A aby ste mohli sledovať nové záznamy, nie je potrebné neustále stláčať Enter: stačí označiť („m“) a potom už len sledovať nové správy.
V tom istom okne môžete tiež vybrať časový rozsah pre výstup protokolov:
kľúč "1" - na 1 minútu;
"2" - 5 minút;
"3" - 15 minút;
"4" - 30 minút;
"5" - 1 hodina;
"0" - po celú dobu životnosti modulu.
Špeciálny prevádzkový režim Pulz (príkaz :pulse) zobrazuje všeobecné informácie o klastri Kubernetes:
V ňom môžete vidieť počet zdrojov a ich stav (zelená farba zobrazuje tie, ktoré majú daný stav Running).
Ďalšou skvelou vlastnosťou K9s je tzv Popeye. Skontroluje všetky zdroje na určité kritériá správnosti a zobrazí výsledné "hodnotenie" s vysvetleniami. Môžete napríklad vidieť, že nie je dostatok vzoriek alebo limitov a nejaký kontajner môže bežať ako root ...
Existuje základná podpora Helm. Takto môžete napríklad vidieť vydania nasadené v klastri:
:helm all # все
:helm $namespace # в конкретном пространстве имен
mierka
Dokonca zabudované do K9 hej je jednoduchý generátor zaťaženia HTTP servera, alternatíva k známejšiemu ab (ApacheBench).
Ak to chcete povoliť, musíte v podu povoliť presmerovanie portu. Ak to chcete urobiť, vyberte modul a stlačte Shift + f, prejdite do podponuky pre dopredný port pomocou aliasu „pf“.
Po výbere portu a stlačení Ctrl + b sa spustí samotný benchmark. Výsledky jeho práce sú uložené v /tmp a sú k dispozícii na neskoršie prezeranie v K9s.
Ak chcete zmeniť konfiguráciu benchmarku, musíte vytvoriť súbor $HOME/.k9s/bench-<my_context>.yml (určené pre každý klaster).
Poznámka: Je dôležité, aby boli všetky súbory YAML v adresári rozšírené .k9s bolo to presne tak .yml (.yaml nefunguje správne).
Príklad konfigurácie:
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
rozhranie
Vzhľad stĺpcov pre zoznamy zdrojov je upravený 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
Je pravda, že nie je dostatok stĺpcov pre štítky, pre ktoré existuje problém v projekte.
Triedenie podľa stĺpcov sa vykonáva pomocou klávesových skratiek:
Shift + n - podľa mena;
Shift + o - podľa uzlov;
Shift + i - podľa IP;
Shift + a - podľa životnosti nádoby;
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 sa niekomu nepáči predvolená farebná schéma, K9s dokonca podporuje skins. K dispozícii sú hotové príklady (7 kusov). tu. Tu je príklad jedného z týchto skinov (v námorníctve):
Pluginy
Konečne, pluginy vám umožní rozšíriť možnosti K9. Ja sám som vo svojej práci použil iba jeden z nich - kubectl get all -n $namespace.
Vyzerá to takto. Vytvorte súbor $HOME/.k9s/plugin.yml s obsahom ako 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"
Teraz môžete prejsť do menného priestoru a stlačením „g“ vykonať príslušný príkaz:
Medzi pluginmi sú napríklad integrácie s kubectl-jq a utilita na prezeranie protokolov prísny.
Záver
Na môj vkus sa práca s K9 ukázala ako veľmi pohodlná: rýchlo si zvyknete hľadať všetko, čo potrebujete, bez toho, aby ste to používali. kubectl. Potešil ma pohľad na logy a ich ukladanie, rýchla editácia zdrojov, rýchlosť práce celkovo *, režim Popeye sa ukázal ako užitočný. Osobitnou zmienkou je možnosť vytvárať pluginy a upravovať aplikáciu tak, aby vyhovovala vašim potrebám.
* Aj keď pri veľkom objeme protokolov som si všimol aj pomalý chod K9. V takýchto momentoch utilita „zožrala“ 2 jadrá z Intel Xeon E312xx a mohla aj zamrznúť.
Čo momentálne chýba? Rýchly návrat na predchádzajúcu verziu (nie o RS) bez prechodu do adresára. Okrem toho dochádza k obnove iba pre iba zdroj: ak vymažete anotáciu alebo štítok, budete musieť vymazať a obnoviť celý zdroj (tu musíte prejsť do adresára). Ďalšia drobnosť – na takéto uložené „zálohy“ je málo dátumu.