Pregled k9s - naprednog terminalskog interfejsa za Kubernetes
K9 pruža terminalski korisnički interfejs za interakciju sa Kubernetes klasterima. Cilj ovog projekta otvorenog koda je da olakša navigaciju, praćenje i upravljanje aplikacijama u K8s. K9s konstantno prati promjene u Kubernetesu i pruža brze komande za rad sa nadgledanim resursima.
Projekat je napisan na Go-u i postoji više od godinu i po dana: prvi angažman je napravljen 1. februara 2019. godine. U trenutku pisanja, ima više od 9000 zvjezdica GitHub i oko 80 saradnika. Hajde da vidimo šta k9s može?
Instalacija i pokretanje
Ovo je klijentska (u odnosu na Kubernetes klaster) aplikacija, koju je najlakše pokrenuti kao Docker sliku:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
Za neke Linux distribucije i druge operativne sisteme postoje i spremni za instalaciju paketi. Općenito, za Linux sisteme možete instalirati binarnu datoteku:
Ne postoje posebni zahtjevi za sam klaster K8s. Sudeći po recenzijama, aplikacija radi i sa starijim verzijama Kubernetesa kao što je 1.12.
Aplikacija počinje koristiti standardnu konfiguraciju .kube/config - slično kako to radi kubectl.
Навигация
Podrazumevano, otvara se prozor sa standardnim prostorom imena specificiranim za kontekst. Odnosno, ako ste napisali kubectl config set-context --current --namespace=test, tada će se otvoriti imenski prostor test. (Pogledajte ispod o promjeni konteksta/imenskih prostora.)
Idi komandni mod vrši se klikom na “:”. Zatim možete kontrolirati kako k9s radi pomoću naredbi - na primjer, da biste vidjeli listu StatefulSets (u trenutnom imenskom prostoru) možete unijeti :sts.
Za neke druge Kubernetes resurse:
:ns - Imenski prostori;
:deploy — Raspoređivanja;
:ing - Ingress;
:svc - Usluge.
Za prikaz kompletne liste tipova resursa dostupnih za pregled postoji komanda :aliases.
Takođe je zgodno pogledati listu komandi dostupnih preko kombinacija prečica u trenutnom prozoru: da biste to uradili, samo kliknite na „?”.
Takođe u k9s postoji način pretraživanja, da biste otišli na koji samo trebate unijeti “/”. Pretražuje sadržaj trenutnog „prozora“. Na primjer, ako ste prethodno unijeli :ns, imate otvorenu listu imenskih prostora. Ako ih ima previše, onda kako ne biste dugo pomicali prema dolje, samo unesite u prozor s imenskim prostorima /mynamespace.
Za pretraživanje prema oznakama, možete odabrati sve podove u željenom imenskom prostoru, a zatim unijeti npr. / -l app=whoami. Dobit ćemo listu mahuna sa ovom oznakom:
Pretraživanje radi u svim vrstama prozora, uključujući dnevnike, pregled YAML manifesta i describe za resurse - pogledajte ispod za više informacija o ovim mogućnostima.
Kako izgleda ukupni tok navigacije?
Pomoću naredbe :ctx možete odabrati kontekst:
Za odabir imenskog prostora postoji već spomenuta komanda :ns, a zatim možete koristiti pretragu za željenim prostorom: /test.
Ako sada odaberemo resurs koji nas zanima (na primjer, isti StatefulSet), za njega će se pojaviti odgovarajuća informacija: koliko podova radi s kratkim informacijama o njima.
Samo mahune mogu biti interesantne - tada samo uđite :pod. U slučaju ConfigMaps (:cm - za listu ovih resursa) možete odabrati objekat od interesa i kliknuti na “u”, nakon čega će vam K9s reći ko ga tačno (ovaj CM) koristi.
Još jedna pogodna karakteristika za pregled resursa je njihova "Rentgen" (rendgenski prikaz). Ovaj mod se poziva naredbom :xray RESOURCE i... lakše je pokazati kako radi nego objasniti. Evo ilustracije za StatefulSets:
(Svaki od ovih resursa se može uređivati, mijenjati, praviti describe.)
A evo i implementacije sa Ingressom:
Rad sa resursima
Informacije o svakom resursu mogu se dobiti u YAML-u ili njegovom describe pritiskom na odgovarajuće prečice na tastaturi (“y” i “d” respektivno). Postoje, naravno, još jednostavnije operacije: njihova lista i prečice na tastaturi su uvek vidljive zahvaljujući praktičnom „zaglavlju“ u interfejsu (skrivenim pritiskom na Ctrl + e).
Prilikom uređivanja bilo kojeg resursa (“e” nakon što ga odaberete), uređivač teksta je definiran u varijablama okruženja (export EDITOR=vim).
A evo kako izgleda detaljan opis resursa (describe):
Ovaj izlaz (ili rezultat pregleda YAML manifesta resursa) može se sačuvati upotrebom uobičajene prečice na tastaturi Ctrl + s. Gdje će biti sačuvan znat će se iz K9s poruke:
Također možete vratiti resurse iz kreiranih datoteka sigurnosne kopije tako što ćete prvo ukloniti sistemske oznake i bilješke. Da biste to učinili, morat ćete otići u direktorij s njima (:dir /tmp), zatim odaberite željeni fajl i primijenite apply.
Usput, u svakom trenutku možete se vratiti na prethodni ReplicaSet ako postoje problemi sa trenutnim. Da biste to učinili, morate odabrati željeni RS (:rs za njihovu listu):
... i vratite nazad koristeći Ctrl + l. Trebali bismo dobiti obavještenje da je sve bilo uspješno:
k9s/whoami-5cfbdbb469 successfully rolled back
A da biste skalirali replike, samo kliknite na “s” (razmjer) i odaberite potreban broj kopija:
Možete ući u bilo koji od kontejnera pomoću ljuske: da biste to učinili, idite na željeni pod, kliknite na “s” (ljuska) i odaberite kontejner.
Ostale karakteristike
Naravno, podržano je i pregledanje dnevnika (“l” za odabrani resurs). A da biste pregledali nove dnevnike, nema potrebe stalno pritiskati Enter: samo označite (“m”), a zatim pratite samo nove poruke.
Također u istom prozoru možete odabrati vremenski raspon za izlaz dnevnika:
taster “1” - za 1 minut;
“2” - 5 minuta;
“3” - 15 minuta;
“4” - 30 minuta;
"5" - 1 sat;
“0” — za cijeli životni vijek mahune.
Poseban režim rada Puls (komanda :pulse) prikazuje opšte informacije o Kubernetes klasteru:
U njemu možete vidjeti broj resursa i njihov status (oni koji imaju status su prikazani zelenom bojom Running).
Još jedna zanimljiva karakteristika K9s se zove Popeye. Provjerava sve resurse za određene kriterije ispravnosti i prikazuje rezultirajuću “ocenu” sa objašnjenjima. Na primjer, možete vidjeti da nema dovoljno uzoraka ili ograničenja, a neki kontejner se može pokrenuti kao root...
Postoji osnovna podrška za Helm. Na primjer, ovako možete vidjeti izdanja raspoređena u klaster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
reper
Čak su ga ugradili u K9 ej je jednostavan generator opterećenja za HTTP server, alternativa poznatijem ab (ApacheBench).
Da biste to omogućili, morat ćete omogućiti prosljeđivanje porta u pod. Da biste to uradili, odaberite pod i pritisnite Shift + f, idite na podmeni port-forward koristeći pseudonim “pf”.
Nakon što odaberete port i pritisnete Ctrl + b, sam benchmark će se pokrenuti. Rezultati njegovog rada su pohranjeni u /tmp i dostupni su za kasnije gledanje u K9s.
Da biste promijenili konfiguraciju benčmarka, potrebno je da kreirate datoteku $HOME/.k9s/bench-<my_context>.yml (definirano za svaki klaster).
NB: Važno je da ekstenzije svih YAML datoteka u direktoriju .k9s bilo je tačno .yml (.yaml ne radi ispravno).
Primjer konfiguracije:
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
sučelje
Izgled kolona za liste resursa se mijenja kreiranjem datoteke $HOME/.k9s/views.yml. Primjer njegovog sadržaja:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Istina, nema dovoljno kolone za etikete, za šta postoji pitanje u projektu.
Sortiranje po kolonama vrši se pomoću prečica na tastaturi:
Shift + n - po imenu;
Shift + o - po čvorovima;
Shift + i - po IP;
Shift + a - prema vijeku trajanja kontejnera;
Shift + t — po broju ponovnih pokretanja;
Shift + r - po statusu spremnosti;
Shift + c - prema potrošnji CPU-a;
Shift + m - prema potrošnji memorije.
Ako se nekome ne sviđa zadana shema boja, K9s čak podržava kože. Dostupni su gotovi primjerci (7 komada). ovdje. Evo primjera jednog od ovih skinova (u mornarici):
Dodaci
Na kraju, dodaci omogućavaju vam da proširite mogućnosti K9s. I sam sam koristio samo jedan od njih u svom radu - kubectl get all -n $namespace.
To izgleda ovako. Kreirajte fajl $HOME/.k9s/plugin.yml sa ovakvim sadržajem:
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"
Sada možete otići u imenski prostor i pritisnuti “g” da izvršite odgovarajuću naredbu:
Među dodacima postoje, na primjer, integracije sa kubectl-jq i uslužni program za pregled dnevnika kruto.
zaključak
Za moj ukus, K9s se pokazao vrlo praktičnim za korištenje: s njim se možete brzo naviknuti da pronađete sve što vam je potrebno bez korištenja kubectl. Bio sam zadovoljan pregledom dnevnika i njihovim spremanjem, brzim uređivanjem resursa, brzinom rada općenito*, način rada Popeye se pokazao korisnim. Posebno treba spomenuti mogućnost kreiranja dodataka i prilagođavanja aplikacije prema vašim potrebama.
* Iako sam, uz veliku količinu dnevnika, primijetio i spor rad K9. U takvim trenucima, uslužni program je "pojeo" 2 jezgra Intel Xeon E312xx i mogao bi se čak i zamrznuti.
Šta trenutno nedostaje? Brzi povratak na prethodnu verziju (ne govorimo o RS) bez odlaska u direktorij. Osim toga, restauracija se događa samo za ukupno resurs: ako ste izbrisali bilješku ili oznaku, morat ćete izbrisati i vratiti cijeli resurs (ovdje ćete morati otići u direktorij). Još jedna sitnica je što nedostaje datum tako sačuvanih „bekapa“.