Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

K9s ponuja uporabniški vmesnik terminala za interakcijo s Kubernetes klasterji. Namen tega projekta z odprtokodno kodo je olajšati preprosto navigacijo po aplikacijah v K8s, njihovo spremljanje in upravljanje. K9s nenehno spremlja spremembe v Kubernetesu in ponuja hitre ukaze za delo s spremljanimi viri.

Projekt je napisan v Go in obstaja že več kot leto in pol: prvi commit je bil opravljen 1. februarja 2019. Ob času pisanja tega članka ima več kot 9000 zvezdic na GitHub in okoli 80 prispevnikov. Oglejmo si, kaj vse zmore k9s?

Namestitev in zagon

To je odjemalska (v zvezi s Kubernetes klasterjem) aplikacija, ki jo je najlažje zagnati kot Docker sliko:

docker run --rm -it -v $KUBECONFIG:⁄root⁄.kube⁄config quay.io⁄derailed⁄k9s

Za nekatere distribucije Linux in druge OS so na voljo tudi pripravljene za namestitev pakete. 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/bin

Specifičnih zahtev za sam Kubernetes klaster ni. Sodeč po povratnih informacijah, aplikacija deluje tudi s takšnimi starejšimi 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 s privzetim namespace, ki je nastavljen za kontekst. To pomeni, da če ste nastavili kubectl config set-context --current --namespace=test, se bo odprl namespace test. (O spremembi kontekstov/namespacov več spodaj.)

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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 namespace) lahko vnesete :sts.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Za nekatere druge Kubernetes vire:

  • :ns — Namespaces;
  • :deploy — Deployments;
  • :ing — Ingresses;
  • :svc — Services.

Za prikaz celotnega seznama vrst virov, ki so na voljo za ogled, obstaja ukaz :aliases.

Udobno je pregledovati tudi seznam ukazov, dostopnih preko hitrih kombinacij tipk v trenutnem oknu: dovolj je, da pritisnete '?' .

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Prav tako ima k9s način iskanja, za prehod v katerega zadostuje, da vnesete '/'. S tem se izvaja iskanje po vsebini trenutnega 'okna'. Recimo, da ste prej vnesli :ns, odprt imate seznam namespacov. Če je teh preveč, da bi dolgo pomikali navzdol, dovolj, da v oknu z namespacem vnesete /mynamespace.

Za iskanje po oznakah lahko izberete vse pod'e v želenem imenskem prostoru, nato pa vnesete, na primer, / -l app=whoami. Prejeli bomo seznam pod'ov s to oznako:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Iskanje deluje v vseh vrstah oken, vključno z dnevniki, ogledom YAML manifestov in describe za vire — več o teh možnostih si oglejte spodaj.

Kako v splošnem izgleda zaporedje dejanj za navigacijo?

S pomočjo ukaza :ctx lahko izberete kontekst:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Za izbiro namespace'a obstaja že omenjeni ukaz :ns, nato pa lahko uporabite iskanje za želeni prostor: /test.

Če zdaj izberete vir, ki vas zanima (na primer, isti StatefulSet), bo prikazana ustrezna informacija: koliko pod'ov je zagnanih s kratkimi informacijami o njih.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Morda so zanimivi samo pod'i — v tem primeru zadostuje, da vnesete :pod. V primeru ConfigMap'ov (:cm — za seznam teh virov) lahko izberete zanimiv objekt in pritisnete 'u', nato pa vam K9s pove, kdo ga (ta CM) uporablja.

Še ena priročna funkcija za ogled virov — njihov «rentgen» (XRay view). Ta način se aktivira z ukazom :xray RESOURCE in... lažje je pokazati, kako deluje, kot razlagati. Tukaj je ilustracija za StatefulSets:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes
(Vsak od teh virov se lahko ureja, spreminja, dela describe.)

Tukaj je Deployment z Ingress:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Delo z viri

O vsakem viru lahko pridobite informacije v YAML ali njegov describe s pritiskom na ustrezne kombinacije tipk ('y' in 'd' ustrezno). Osnovnih operacij je seveda še več: seznam in tipke so vedno na voljo zahvaljujoč priročni 'glavi' v vmesniku (skrije se s pritiskom na Ctrl + e).

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Pri urejanju katerega koli vira ('e' po izbiri) se odpre urejevalnik besedil, določen v okolijskih spremenljivkah (export EDITOR=vim).

Tako pa izgleda podrobni opis vira (describe):

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Tak izhod (ali izhod pregleda YAML manifesta vira) lahko shranite s pomočjo običajne kombinacije tipk Ctrl + s. Kam bo shranjen, bo znano iz sporočila K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml shranjen uspešno!

Iz ustvarjenih datotek-varnostnih kopij lahko tudi obnavljate vire, prej pa odstranite sistemske oznake in anotacije. Za to se boste morali premakniti v mapo z njimi (:dir /tmp), nato pa izberite potrebno datoteko in uporabite apply.

Na primjer, uvijek možete vratiti prethodni ReplicaSet ako s trenutnim dođe do problema. Za to treba odabrati odgovarajući RS (:rs s popisa):

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

… i izvršiti rollback pomoću Ctrl + l. Trebalo bi se prikazati obavijest da je sve prošlo uspješno:

k9s/whoami-5cfbdbb469 uspješno vraćen

A da biste skalirali replikate, dovoljno je pritisnuti «s» (scale) i odabrati potrebni broj instanci:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

U bilo koji kontejner možete ući putem shell: za to se prebacite na željeni pod, pritisnite «s» (shell) i odaberite kontejner.

Druge mogućnosti

Naravno, podržano je i pregledavanje logova («l» za odabrani resurs). A da biste gledali nove logove, nije potrebno stalno pritiskati Enter: dovoljno je označiti («m»), nakon čega pratite samo nove poruke.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Također, u ovom prozoru možete odabrati vremenski raspon za prikaz logova:

  • tipka «1» — za 1 minutu;
  • «2» — 5 minuta;
  • «3» — 15 minuta;
  • «4» — 30 minuta;
  • «5» — 1 sat;
  • «0» — za cijelo trajanje pod-a.

Poseban način rada Pulse (komanda :pulse) prikazuje opće informacije o Kubernetes klasteru:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

U njemu možete vidjeti broj resursa i njihovo stanje (zelenom se prikazuju oni koji imaju status Running).

Još jedna zanimljiva funkcija K9s zove se Popeye. Provjerava sve resurse prema određenim kriterijima ispravnosti i prikazuje dobiveni «rating» s objašnjenjima. Na primjer, možete vidjeti da nedostaju prozori ili limiti, a neki kontejner može raditi pod root…

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Postoji osnovna podrška za Helm. Na primjer, ovako možete pogledati release instalirane u klasteru:

:helm all # sve
:helm $namespace # u određenom prostoru imena

Benchmark

U K9s su čak unaprijed integrirali hey — to je jednostavan generator opterećenja za HTTP server, alternativa poznatom ab (ApacheBench).

Da biste ga uključili, potrebno je aktivirati port-forward u pod-u. Za to odabiramo pod i pritiskamo Shift + f, prelazimo u podizbornik port-forward koristeći alias «pf».

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Nakon odabira porta i pritiska na Ctrl + b pokrenut će se sam benchmark. Rezultati njegovog rada pohranjuju se u /tmp i dostupni su za naknadno pregledavanje u K9s.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes
Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Za promjenu konfiguracije benchmark-a potrebno je stvoriti datoteku $HOME/.k9s/bench-.yml (određuje se za svaki klaster).

NB: Važno je da ekstenzija svih YAML datoteka u direktoriju .k9s bude upravo .yml (.yaml (ne radi ispravno).

Primer konfiguracije:

benchmarks:
  defaults:
    # Število niti
    concurrency: 2
    # Število poizvedb
    requests: 1000
  containers:
    # Nastavitve za kontejner z benchmarkom
    # Kontejner je opredeljen kot 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:
    # Benchmarking se lahko izvaja na storitvah, kot sta NodePort in LoadBalancer
    # Sintaksa: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Vmesnik

Vrsta stolpcev za sezname virov se spremeni z ustvarjanjem datoteke $HOME/.k9s/views.yml. Primer njene 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 manjka stolpec za oznake, kar je issue v projektu.

Razvrščanje po stolpcih se izvaja s kombinacijami tipkovnic:

  • Shift + n — po imenu;
  • Shift + o — po vozlih;
  • Shift + i — po IP;
  • Shift + a — po času življenja kontejnerja;
  • Shift + t — po številu ponovnih zagonov;
  • Shift + r — po statusu pripravljenosti;
  • Shift + c — po porabi CPU;
  • Shift + m — po porabi pomnilnika.

Če pa nekomu ni všeč barvna shema privzeto, K9s celo podpira teme. Gotovi primeri (7 kosov) so na voljo ovde. Tukaj je primer ene takšne teme (in the navy):

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Vtičniki

Finally, vtičnike omogočajo razširitev funkcionalnosti K9s. Sam sem v praksi uporabil samo eno izmed njih — kubectl get all -n $namespace.

Izgleda to takole. Ustvarimo datoteko $HOME/.k9s/plugin.yml s to 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 se lahko preselite v prostor imen in pritisnete "g" za izvedbo s pripadajočo ukazom:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Med vtičniki so, na primer, integracije s kubectl-jq in orodjem za ogled logov stern.

Zaključek

Po mojem mnenju je bil K9s zelo priročen za uporabo: hitro sem se navadil iskati vse potrebno brez uporabe kubectl. Navdušil me je ogled logov in njihovo shranjevanje, hitro urejanje virov, hitrost dela na splošno*, uporaben je bil način Popeye. Posebne omembe vredne so možnosti ustvarjanja vtičnikov in prilagajanja aplikacije svojim potrebam.

* Čeprav sem pri večjem volumnu logov opazil tudi počasno delovanje K9s. V takšnih trenutkih je orodje 'pojedlo' 2 jedra Intel Xeon E312xx in se lahko celo zamrznilo.

Kaj trenutno manjka? Hitro vračanje na prejšnjo različico (govorim o RS) brez prehoda v mapo. Poleg tega se obnova izgodi samo za celotno reso: če ste izbrisali anotacijo ali oznako, boste morali izbrisati in obnoviti celoten resurs (tukaj boste potrebovali prehod v mapo). Še ena malenkost — manjka datum takšnih shranjenih 'varnostnih kopij'.

P.S.

Preberite tudi na našem blogu:

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster