Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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

Za nekatere distribucije Linuxa in druge operacijske sisteme so prav tako na voljo paketi za namestitev. paketeNa 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 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.)

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

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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 '?'.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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:

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 glejte spodaj.

Kako v splošnem izgleda potek dejanj za navigacijo?

Z ukazom :ctx lahko izberete kontekst:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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:

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

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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…

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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 hey — 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'.

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

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.

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

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

Правда, не хватает колонки по лейблам, на что есть issue в проекте.

Сортировка по столбцам осуществляется клавиатурными сочетаниями:

  • Shift + n — по имени;
  • Shift + o — по узлам;
  • Shift + i — по IP;
  • Shift + a — по времени жизни контейнера;
  • Shift + t — по количеству рестартов;
  • Shift + r — по статусу готовности;
  • Shift + c — по потреблению CPU;
  • Shift + m — по потреблению памяти.

Если же кому-то не нравится цветовое оформление по умолчанию, в K9s даже поддерживаются скины. Готовые примеры (7 штук) доступны ovde. Вот пример одного из таких скинов (in the navy):

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Vtičniki

Finally, vtičnike позволяют расширять возможности 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» для выполнения с соответствующей команды:

Pregled k9s — naprednog terminalnog interfejsa za Kubernetes

Среди плагинов есть, например, интеграции с kubectl-jq и утилитой для просмотра логов stern.

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

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