Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

K9s 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 GitHub 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/k9s

Za nekatere distribucije Linuxa in druge operacijske sisteme obstajajo tudi pripravljeni za namestitev pakete. 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/bin

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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.

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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 »?«.

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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:

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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:

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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.

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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:

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes
(Vsak od teh virov je mogoče urejati, spreminjati, narediti describe.)

In tukaj je uvedba z Ingressom:

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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.

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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:

Pregled k9s - naprednega terminalskega vmesnika za 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 ...

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

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.

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes
Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

Č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 vprašanje v projektu.

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 kože. Na voljo so že pripravljeni primerki (7 kosov). tukaj. Tukaj je primer ene od teh preoblek (v mornarici):

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

Plugins

Končno, vtičniki 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:

Pregled k9s - naprednega terminalskega vmesnika za Kubernetes

Med vtičniki so na primer integracije s kubectl-jq in pripomoček za pregledovanje dnevnikov krme.

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