
nudi uporabniški vmesnik terminala za interakcijo s Kubernetes klasterji. Namen tega projekta z odprto kodo je poenostaviti udobno navigacijo po aplikacijah v K8s, spremljanje in upravljanje z njimi. K9s nenehno spremlja spremembe v Kubernetesu in ponuja hitre ukaze za delo z opazovanimi viri.
Projekt je napisan v programskem jeziku Go in obstaja že več kot eno leto in pol: prvi commit je bil opravljen 1. februarja 2019. Ob času pisanja tega članka ima več kot 9000 zvezd na in okoli 80 sodelavcev. Poglejmo, kaj zmore k9s?
Namestitev in zagon
To je odjemalska (glede na Kubernetes klaster) aplikacija, ki jo je najlažje zagnati kot Docker sliko:
docker run --rm -it -v $KUBECONFIG: /root/.kube/config quay.io/derailed/k9sZa nekatere distribucije Linuxa in druge operacijske sisteme so prav tako na voljo paketi za namestitev. Na splošno lahko za Linux sisteme namestite binarno datoteko:
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/binSpecifičnih zahtev za sam klaster K8s ni. Sodeč po mnenjih, aplikacija deluje tudi s starimi različicami Kubernetes, kot je 1.12.
Aplikacija se zažene z uporabo standardne konfiguracije .kube/config — podobno kot to počne kubectl.
Navigacija
Privzeto se odpre okno z privzeto imenskim prostorom, ki je določen za kontekst. To pomeni, da če ste zapisali kubectl config set-context --current --namespace=test, se bo odprl imenski prostor test. (O menjavi kontekstov/imenskih prostorov več spodaj.)

Prehod v ukazni način se izvede s pritiskom na ':'. Po tem lahko upravljate z delovanjem k9s s pomočjo ukazov — na primer, za ogled seznama StatefulSets (v trenutnem imenskem prostoru) lahko vnesete :sts.
![]()
Za nekatere druge vire Kubernetes:
-
:ns— Imenski prostori; -
:deploy— Implementacije; -
:ing— Dostopi; -
:svc— Storitve.
Za prikaz popolnega seznama tipov virov, ki so na voljo za ogled, obstaja ukaz :aliases.
Priročno je pregledati tudi seznam ukazov, ki so na voljo prek bližnjic na tipkovnici v trenutnem oknu: za to dovolj pritisnite na '?'.

V k9s je tudi način iskanja, za prehod v katerega preprosto vnesite '/'. Omogoča iskanje po vsebini trenutnega 'okna'. Recimo, da ste prej vnesli :ns, imate odprt seznam imenskih prostorov. Če jih je preveč, da bi dolgotrajno pomikali navzdol, je dovolj, da v oknu z imenskimi prostori vnesete /mynamespace.
Za iskanje po oznakah lahko izberete vse pod'a v pravem imenskem prostoru, nato vnesete, na primer, / -l app=whoami. Tako bomo dobili seznam pod'ov z to oznako:
![]()
Iskanje deluje v vseh vrstah oken, vključno z dnevniki, ogledom YAML manifestov in describe za vire – več o teh možnostih glejte spodaj.
Kako v splošnem izgleda potek dejanj za navigacijo?
Z ukazom :ctx lahko izberete kontekst:

Za izbiro namespace'a obstaja že omenjeno ukaz :ns, nato pa lahko uporabite iskanje za ustrezen prostor: /test.
Če zdaj izberete vir, ki nas zanima (na primer, isti StatefulSet), se bo prikazala ustrezna informacija: koliko pod'ov je zagnanih in kratki podatki o njih.
![]()
Morda so zanimivi samo pod'i – takrat zadostuje, da vnesete :pod. V primeru ConfigMap'ov (:cm — za seznam teh virov) lahko izberete zanimiv objekt in pritisnete "u", po čemer vam K9s pove, kdo točno uporablja (ta CM).
Še ena priročna funkcija za ogled virov je njihov "rentgen" (XRay view). Ta način se pokliče z ukazom :xray RESOURCE in… lažje je pokazati, kako deluje, kot razlagati. Tukaj je ilustracija za StatefulSets:

(Vsak od teh virov se lahko ureja, spreminja, dela describe.)
Tukaj je Deployment z Ingress:

Delo z viri
O vsakem viru lahko dobite informacije v YAML formatu ali describe s pritiskom na ustrezne tipkovne kombinacije ("y" in "d" ustrezno). Osnovnih operacij je seveda še več: njihov seznam in tipkovne kombinacije so vedno na očeh zaradi priročne "glave" v vmesniku (skrije se s pritiskom na Ctrl + e).

Pri urejanju katerega koli vira ("e" po njegovi izbiri) se odpre besedilni urejevalnik, določen v okolijskih spremenljivkah (export EDITOR=vim).
Tako izgleda podroben opis vira (describe):

Tak izhod (ali izhod iz pregleda YAML manifesta vira) lahko shranite s pomočjo običajne kombinacije tipk Ctrl + s. Kje se bo shranil, boste izvedeli iz sporočila K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Iz ustvarjenih varnostnih kopij lahko tudi obnovite vire, preden odstranite sistemske oznake in opombe. Za to bo treba preiti v imenik z njimi (:dir /tmp), nato pa izberite želeni datoteke in uporabite apply.
Upoštevajte, da se lahko kadar koli vrnete na prejšnji ReplicaSet, če imate težave s trenutnim. To storite tako, da izberete želeni RS (:rs za njihov seznam):

… in izvedete rollback s pomočjo Ctrl + l. Prejeti moramo obvestilo, da je vse potekalo uspešno:
k9s/whoami-5cfbdbb469 je bil uspešno vrnjen nazajČe želite povečati število replik, preprosto pritisnite 's' (scale) in izberite želeno število primerkov:

V katero koli od posod lahko vstopite preko shell: preprosto pojdite na želeni pod, pritisnite 's' (shell) in izberite vsebnik.
Druge možnosti
Seveda je podprt tudi ogled logov ('l' za izbrani vir). Da bi lahko gledali nove loge, ni potrebno nenehno pritiskati Enter: preprosto označite ('m'), nato pa spremljajte le nove informacije.

Prav tako lahko v tem oknu izberete časovno obdobje za izhod logov:
- tipka '1' — za 1 minuto;
- '2' — 5 minut;
- '3' — 15 minut;
- '4' — 30 minut;
- '5' — 1 ura;
- '0' — za celotno življenjsko dobo poda.
Poseben način dela Pulse (ukaz :pulse) prikazuje splošne informacije o Kubernetes klasteru:

V njem lahko vidite število virov in njihov status (zelena barva pomeni, da so v statusu Running).
Še ena zanimiva funkcija K9s se imenuje Popeye. Preverja vse vire po določenih kriterijih pravilnosti in prikaže pridobljeni 'oceno' s pojasnili. Na primer, lahko vidite, da manjkajo proste ali omejitve, nekateri vsebnik pa se lahko izvaja pod root…

Osnovna podpora za Helm je na voljo. Na primer, tako lahko pogledate izdaje, nameščene v klaster:
:helm all # vse
:helm $namespace # v določenem imenskem prostoru
Benchmark
V K9s so vgradili celo — to je preprost generator obremenitve za HTTP strežnik, alternativa bolj znanemu ab (ApacheBench).
Za aktivacijo bo potrebno omogočiti port-forward v podu. To storite tako, da izberete pod in pritisnete Shift + f, nato preide v podmeniju port-forward z uporabo aliasa 'pf'.

Po izbiri vrat in pritisku na Ctrl + b se bo benchmark začel. Rezultati njegovega dela se shranijo v /tmp in so dostopni za nadaljnji pregled v K9s.


Za spremembo konfiguracije benchmarka morate ustvariti datoteko $HOME/.k9s/bench-.yml (določa se za vsak klaster).
NB: Pomembno je, da je končnica vseh YAML datotek v imeniku .k9s natančno .yml (.yaml ne deluje pravilno).
Primer konfiguracije:
размеры:
значения по умолчанию:
# Количество потоков
concurrency: 2
# Количество запросов
requests: 1000
контейнеры:
# Настройки для контейнера с бенчмарком
# Контейнер определяется как 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
Vmesnik
Вид столбцов для списков ресурсов модифицируется созданием файла $HOME/.k9s/views.yml. Пример его содержимого:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Правда, не хватает колонки по лейблам, на что есть .
Сортировка по столбцам осуществляется клавиатурными сочетаниями:
- Shift + n — по имени;
- Shift + o — по узлам;
- Shift + i — по IP;
- Shift + a — по времени жизни контейнера;
- Shift + t — по количеству рестартов;
- Shift + r — по статусу готовности;
- Shift + c — по потреблению CPU;
- Shift + m — по потреблению памяти.
Если же кому-то не нравится цветовое оформление по умолчанию, в K9s даже поддерживаются . Готовые примеры (7 штук) доступны . Вот пример одного из таких скинов (in the navy):

Vtičniki
Finally, позволяют расширять возможности K9s. Сам я в работе использовал только один из них — kubectl get all -n $namespace.
Выглядит это следующим образом. Создаем файл $HOME/.k9s/plugin.yml с таким содержимым:
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"Теперь можно перейти в пространство имён и нажать на «g» для выполнения с соответствующей команды:

Среди плагинов есть, например, интеграции с kubectl-jq и утилитой для просмотра логов .
Zaključek
На мой вкус, K9s оказалась очень удобна в работе: с ней довольно быстро привыкнуть искать всё нужное без использования kubectl. Порадовал просмотр логов и их сохранение, быстрое редактирование ресурсов, скорость работы в целом*, оказался полезным режим Popeye. Отдельного упоминания стоят возможности создавать плагины и дорабатывать приложение под свои нужды.
* Čeprav sem pri velikem volumnu logov opazil tudi počasno delovanje K9s. V takih trenutkih je orodje "požrlo" 2 jedri pri Intel Xeon E312xx in je lahko celo zamrznilo.
Kaj trenutno primanjkuje? Hitro vračanje na prejšnjo različico (ne govorimo o RS) brez prehoda v imenik. Poleg tega se obnova zgodi le za vse vir: če ste odstranili anotacijo ali oznako, boste morali odstraniti in obnoviti celoten vir (tukaj bo potrebno preiti v imenik). Še ena malenkost — manjkajo datumi takšnih shranjenih "varnostnih kopij".
P.S.
Preberite tudi na našem blogu:
- «»;
- «»;
- «».
Izvor: habr.com
