
ponuja terminalski uporabniški vmesnik za interakcijo z gručami Kubernetes. Cilj tega odprtokodnega projekta je olajšati krmarjenje, spremljanje in upravljanje aplikacij v K8s. K9s nenehno spremlja spremembe v Kubernetesu in ponuja hitre ukaze za delo z nadzorovanimi viri.
Projekt je napisan v Go in obstaja že več kot leto in pol: prva potrditev je bila narejena 1. februarja 2019. V času pisanja je na strani 9000+ zvezdic in približno 80 sodelavcev. Poglejmo, kaj zmore k9s?
Namestitev in zagon
To je odjemalska (v povezavi z gručo Kubernetes) aplikacija, ki jo je najlažje zagnati kot sliko Dockerja:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9sZa nekatere distribucije Linuxa in druge operacijske sisteme obstajajo tudi pripravljeni za namestitev . Na splošno lahko za sisteme Linux 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/binZa sam grozd K8s ni posebnih zahtev. Sodeč po ocenah, aplikacija deluje tudi s starejšimi različicami Kubernetesa, kot je 1.12.
Aplikacija se zažene s standardno konfiguracijo .kube/config - podobno kot to počne kubectl.
Navigacija
Privzeto se odpre okno s privzetim imenskim prostorom, določenim za kontekst. To je, če ste napisali kubectl config set-context --current --namespace=test, potem se bo odprl imenski prostor test. (Glejte spodaj za spreminjanje kontekstov/imenskih prostorov.)

Pojdi do ukazni način se izvede s pritiskom na ":". Po tem lahko nadzirate delovanje k9s z ukazi - na primer, da si ogledate seznam StatefulSets (v trenutnem imenskem prostoru), lahko vnesete :sts.
![]()
Za nekatere druge vire Kubernetes:
-
:ns— imenski prostori; -
:deploy— namestitve; -
:ing— vdori; -
:svc— storitve.
Za prikaz celotnega seznama vrst virov, ki so na voljo za ogled, obstaja ukaz :aliases.
Prav tako je priročno videti seznam ukazov, ki so na voljo s kombinacijami vročih tipk v trenutnem oknu: to storite tako, da kliknete »?«.

Tudi v k9s obstaja način iskanja, za prehod na katerega je dovolj vnesti "/". Z njim se izvaja iskanje po vsebini trenutnega "okna". Recimo, če ste že vnesli :ns, imate odprt seznam imenskih prostorov. Če jih je preveč, je dovolj, da vnesete okno z imenskimi prostori, da se ne pomikate dolgo navzdol /mynamespace.
Če želite iskati po oznakah, lahko izberete vse pode v želenem imenskem prostoru in nato vnesete npr. / -l app=whoami. Dobili bomo seznam strokov s to oznako:
![]()
Iskanje deluje v vseh vrstah oken, vključno z dnevniki, ogledom manifestov YAML in describe za vire - glejte spodaj za več podrobnosti o teh funkcijah.
Kako izgleda celoten potek navigacije?
Z ukazom :ctx lahko izberete kontekst:

Za izbiro imenskega prostora je na voljo že omenjeni ukaz :ns, nato pa lahko uporabite iskanje po želenem prostoru: /test.
Če zdaj izberemo vir, ki nas zanima (na primer isti StatefulSet), se zanj prikažejo ustrezne informacije: koliko podov se izvaja s kratkimi informacijami o njih.
![]()
Zanimivi so lahko le stroki - takrat je dovolj za vstop :pod. V primeru ConfigMaps (:cm - za seznam teh virov), lahko izberete predmet zanimanja in kliknete na "u", po katerem vam K9s pove, kdo ga posebej uporablja (ta CM).
Druga priročna funkcija za ogled virov je njihova "rentgen" (rentgenski pogled). Ta način se pokliče z ukazom :xray RESOURCE in ... lažje je pokazati, kako deluje, kot razložiti. Tukaj je ilustracija za StatefulSets:

(Vsak od teh virov je mogoče urejati, spreminjati, narediti describe.)
In tukaj je uvedba z Ingressom:

Delo z viri
Informacije o vsakem viru lahko dobite v YAML ali njegovem describe s pritiskom na ustrezne bližnjice na tipkovnici (»y« oziroma »d«). Seveda je na voljo še več osnovnih operacij: njihov seznam in bližnjice na tipkovnici so vedno vidni zaradi priročne »glave« v vmesniku (skrite s pritiskom na Ctrl + e).

Pri urejanju katerega koli vira ("e" po njegovem izboru) se odpre urejevalnik besedila, definiran v spremenljivkah okolja (export EDITOR=vim).
In tukaj je videti podroben opis vira (describe):

Ta izhod (ali izhod ogleda manifesta vira YAML) lahko shranite z znano bližnjico na tipkovnici Ctrl + s. Kam bo shranjen bo znano iz sporočila K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully! Vire lahko obnovite tudi iz ustvarjenih datotek varnostne kopije, potem ko ste odstranili sistemske oznake in opombe. Če želite to narediti, morate z njimi iti v imenik (:dir /tmp), nato izberite želeno datoteko in jo uporabite apply.
Mimogrede, kadar koli se lahko vrnete na prejšnji ReplicaSet, če imate težave s trenutnim. Če želite to narediti, izberite želeni RS (:rs za njihov seznam):

... in se vrnite nazaj s Ctrl + l. Morali bi prejeti obvestilo, da je šlo vse v redu:
k9s/whoami-5cfbdbb469 successfully rolled backČe želite prilagoditi replike, preprosto kliknite na "s" (merilo) in izberite želeno število primerkov:

Z ukazno lupino lahko vstopite v kateri koli od vsebnikov: za to pojdite na želeni pod, kliknite na "s" (lupina) in izberite vsebnik.
Druge lastnosti
Seveda je podprt tudi ogled dnevnikov ("l" za izbrani vir). In če želite gledati nove dnevnike, ni treba nenehno pritiskati Enter: dovolj je, da označite ("m") in nato samo sledite novim sporočilom.

V istem oknu lahko izberete tudi časovni razpon za izpis dnevnikov:
- tipka "1" - za 1 minuto;
- "2" - 5 minut;
- "3" - 15 minut;
- "4" - 30 minut;
- "5" - 1 ura;
- "0" - za celotno življenjsko dobo stroka.
Poseben način delovanja Pulse (ukaz :pulse) prikazuje splošne informacije o gruči Kubernetes:

V njem lahko vidite število virov in njihov status (zeleno prikazuje tiste, ki imajo status Running).
Druga kul funkcija K9s se imenuje Popeye. Vse vire preveri glede na določena merila pravilnosti in prikaže dobljeno "oceno" z razlagami. Na primer, lahko vidite, da ni dovolj vzorcev ali omejitev in da se lahko nekateri vsebniki izvajajo kot root ...

Obstaja osnovna podpora za Helm. Tako si lahko na primer ogledate izdaje, uvedene v gruči:
:helm all # все
:helm $namespace # в конкретном пространстве имен
merilo
Celo vgrajen v K9 je preprost generator obremenitve strežnika HTTP, alternativa bolj znanemu ab (ApacheBench).
Če ga želite omogočiti, morate v modulu omogočiti posredovanje vrat. Če želite to narediti, izberite pod in pritisnite Shift + f, pojdite v podmeni za posredovanje vrat z vzdevkom "pf".

Ko izberete vrata in pritisnete Ctrl + b, se bo zagnalo samo merilo. Rezultati njegovega dela so shranjeni v /tmp in so na voljo za poznejši ogled v K9s.


Če želite spremeniti konfiguracijo merila uspešnosti, morate ustvariti datoteko $HOME/.k9s/bench-<my_context>.yml (določeno za vsak grozd).
Opomba: Pomembno je, da je razširitev vseh datotek YAML v imeniku .k9s točno je bilo .yml (.yaml ne deluje pravilno).
Primer 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
vmesnik
Videz stolpcev za sezname virov se spremeni z ustvarjanjem datoteke $HOME/.k9s/views.yml. Primer njegove vsebine:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
Res je, da ni dovolj stolpca za oznake, za katere obstaja .
Razvrščanje po stolpcih poteka z bližnjicami na tipkovnici:
- Shift + n - po imenu;
- Shift + o - po vozliščih;
- Shift + i - po IP;
- Shift + a - glede na življenjsko dobo vsebnika;
- Shift + t - glede na število ponovnih zagonov;
- Shift + r - glede na stanje pripravljenosti;
- Shift + c - glede na porabo procesorja;
- Shift + m - glede na porabo pomnilnika.
Če komu privzeta barvna shema ni všeč, K9s celo podpira . Na voljo so že pripravljeni primerki (7 kosov). . Tukaj je primer ene od teh preoblek (v mornarici):

Plugins
Končno, vam omogočajo, da razširite zmogljivosti K9s. Sam sem pri svojem delu uporabljal samo enega od njih - kubectl get all -n $namespace.
Izgleda takole. Ustvarite datoteko $HOME/.k9s/plugin.yml s takšno vsebino:
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"Zdaj lahko greste v imenski prostor in pritisnete "g" za izvedbo z ustreznim ukazom:

Med vtičniki so na primer integracije s kubectl-jq in pripomoček za pregledovanje dnevnikov .
Zaključek
Za moj okus se je izkazalo, da je K9 zelo priročen za delo: hitro se lahko navadiš iskati vse, kar potrebuješ, ne da bi ga uporabil. kubectl. Zadovoljen sem bil s pogledom na dnevnike in njihovim shranjevanjem, hitrim urejanjem virov, hitrostjo dela na splošno *, način Popeye se je izkazal za uporabnega. Posebna omemba je možnost ustvarjanja vtičnikov in spreminjanja aplikacije, da ustreza vašim potrebam.
* Čeprav sem pri velikem obsegu dnevnikov opazil tudi počasno delovanje K9s. V takih trenutkih je pripomoček "pojedel" 2 jedri iz Intel Xeon E312xx in bi lahko celo zamrznil.
Kaj trenutno manjka? Hiter povratek na prejšnjo različico (ne govorimo o RS), ne da bi šli v imenik. Poleg tega pride do okrevanja samo za samo vir: če izbrišete opombo ali oznako, boste morali izbrisati in obnoviti celoten vir (tu morate iti v imenik). Še ena malenkost - za tako shranjene "varnostne kopije" ni dovolj datuma.
PS
Preberite tudi na našem blogu:
- «»;
- «»;
- «".
Vir: www.habr.com
