Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

K9s nagbibigay ng terminal user interface para sa pakikipag-ugnayan sa mga kumpol ng Kubernetes. Ang layunin ng proyektong Open Source na ito ay gawing madali ang pag-navigate, pagsubaybay, at pamamahala ng mga application sa K8s. Patuloy na sinusubaybayan ng K9s ang mga pagbabago sa Kubernetes at nag-aalok ng mabilis na mga utos upang gumana sa mga sinusubaybayang mapagkukunan.

Ang proyekto ay nakasulat sa Go at umabot nang mahigit isang taon at kalahati: ang unang commit ay ginawa noong Pebrero 1, 2019. Sa oras ng pagsulat, mayroong 9000+ na bituin GitHub at humigit-kumulang 80 nag-aambag. Tingnan natin kung ano ang magagawa ng k9s?

Pag-install at paglunsad

Ito ay isang client (kaugnay ng Kubernetes cluster) na application na pinakamadaling tumakbo bilang isang imahe ng Docker:

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

Para sa ilang mga distribusyon ng Linux at iba pang mga operating system, mayroon ding handa na i-install mga pakete. Sa pangkalahatan, para sa mga Linux system, maaari kang mag-install ng binary file:

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

Walang mga partikular na kinakailangan para sa K8s cluster mismo. Sa paghusga sa pamamagitan ng mga review, gumagana din ang application sa mga mas lumang bersyon ng Kubernetes tulad ng 1.12.

Ang application ay inilunsad gamit ang karaniwang config .kube/config - katulad ng kung paano ito ginagawa kubectl.

Nabigasyon

Bilang default, bubukas ang isang window na may default na namespace na tinukoy para sa konteksto. Ibig sabihin, kung sumulat ka kubectl config set-context --current --namespace=test, pagkatapos ay magbubukas ang namespace test. (Tingnan sa ibaba para sa pagbabago ng mga konteksto/namespace.)

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Pumunta sa command mode ay ginagawa sa pamamagitan ng pagpindot sa ":". Pagkatapos nito, maaari mong kontrolin ang pagpapatakbo ng k9s gamit ang mga command - halimbawa, upang tingnan ang listahan ng StatefulSets (sa kasalukuyang namespace), maaari kang magpasok :sts.

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Para sa ilang iba pang mapagkukunan ng Kubernetes:

  • :ns β€” mga namespace;
  • :deploy β€” Mga Deployment;
  • :ing β€” Pagpasok;
  • :svc β€” mga serbisyo.

Upang magpakita ng kumpletong listahan ng mga uri ng mapagkukunan na magagamit para sa pagtingin, mayroong isang command :aliases.

Maginhawa din na tingnan ang listahan ng mga utos na magagamit ng mga kumbinasyon ng mainit na key sa loob ng kasalukuyang window: upang gawin ito, mag-click lamang sa "?".

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Pati sa k9s meron mode ng paghahanap, upang pumunta sa kung saan ito ay sapat na upang ilagay ang "/". Sa pamamagitan nito, isinasagawa ang paghahanap sa mga nilalaman ng kasalukuyang "window". Let's say kung nakapasok ka dati :ns, mayroon kang nakabukas na listahan ng mga namespace. Kung napakarami sa kanila, kung gayon upang hindi mag-scroll pababa nang mahabang panahon, sapat na upang pumasok sa window na may mga namespace. /mynamespace.

Upang maghanap ayon sa mga label, maaari mong piliin ang lahat ng mga pod sa nais na namespace, pagkatapos ay ilagay, halimbawa, / -l app=whoami. Makakakuha kami ng listahan ng mga pod na may ganitong label:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Gumagana ang paghahanap sa lahat ng uri ng mga bintana, kabilang ang mga log, pagtingin sa mga manifest ng YAML, at describe para sa mga mapagkukunan - tingnan sa ibaba para sa higit pang mga detalye sa mga tampok na ito.

Ano ang hitsura ng pangkalahatang daloy ng nabigasyon?

Gamit ang command :ctx maaari kang pumili ng konteksto:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Upang pumili ng isang namespace, mayroong nabanggit na utos :ns, at pagkatapos ay maaari mong gamitin ang paghahanap para sa nais na espasyo: /test.

Kung pipiliin namin ngayon ang mapagkukunan na interesado kami (halimbawa, ang parehong StatefulSet), lilitaw ang kaukulang impormasyon para dito: kung gaano karaming mga pod ang tumatakbo na may maikling impormasyon tungkol sa mga ito.

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Ang mga pod lamang ang maaaring interesado - kung gayon ito ay sapat na upang makapasok :pod. Sa kaso ng ConfigMaps (:cm - para sa listahan ng mga mapagkukunang ito), maaari mong piliin ang bagay ng interes at mag-click sa "u", pagkatapos ay sasabihin sa iyo ng K9s kung sino ang partikular na gumagamit nito (ito CM).

Ang isa pang madaling gamiting tampok para sa pagtingin ng mga mapagkukunan ay ang kanilang "x-ray" (Xray view). Ang mode na ito ay tinatawag ng command :xray RESOURCE at ... mas madaling ipakita kung paano ito gumagana kaysa ipaliwanag. Narito ang isang paglalarawan para sa StatefulSets:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes
(Ang bawat isa sa mga mapagkukunang ito ay maaaring i-edit, baguhin, gawin describe.)

At narito ang Deployment na may Ingress:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Paggawa gamit ang mga mapagkukunan

Maaari kang makakuha ng impormasyon tungkol sa bawat mapagkukunan sa YAML o nito describe sa pamamagitan ng pagpindot sa kaukulang mga keyboard shortcut (β€œy” at β€œd”, ayon sa pagkakabanggit). Siyempre, mayroong higit pang mga pangunahing operasyon: ang kanilang listahan at mga shortcut sa keyboard ay palaging nakikita salamat sa isang maginhawang "header" sa interface (nakatago sa pamamagitan ng pagpindot sa Ctrl + e).

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Kapag nag-e-edit ng anumang mapagkukunan ("e" pagkatapos ng pagpili nito), ang text editor na tinukoy sa mga variable ng kapaligiran ay bubuksan (export EDITOR=vim).

At narito ang hitsura ng detalyadong paglalarawan ng mapagkukunan (describe):

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Ang output na ito (o ang output ng pagtingin sa YAML resource manifest) ay maaaring i-save gamit ang pamilyar na keyboard shortcut na Ctrl + s. Kung saan ito ise-save ay malalaman mula sa mensahe ng K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

Maaari mo ring ibalik ang mga mapagkukunan mula sa mga nilikhang backup na file, pagkatapos alisin ang mga label at anotasyon ng system. Upang gawin ito, kailangan mong pumunta sa direktoryo kasama nila (:dir /tmp), pagkatapos ay piliin ang nais na file at ilapat apply.

Sa pamamagitan ng paraan, sa anumang oras maaari kang bumalik sa nakaraang ReplicaSet kung may mga problema sa kasalukuyan. Upang gawin ito, piliin ang nais na RS (:rs para sa kanilang listahan):

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

... at rollback gamit ang Ctrl + l. Dapat tayong makatanggap ng abiso na naging maayos ang lahat:

k9s/whoami-5cfbdbb469 successfully rolled back

At upang sukatin ang mga replika, i-click lamang ang "s" (scale) at piliin ang nais na bilang ng mga pagkakataon:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Maaari mong ipasok ang alinman sa mga lalagyan gamit ang shell: upang gawin ito, pumunta sa nais na pod, mag-click sa "s" (shell) at piliin ang lalagyan.

Iba pang mga tampok

Siyempre, sinusuportahan din ang pagtingin sa mga log ("l" para sa napiling mapagkukunan). At upang manood ng mga bagong log, hindi na kailangang patuloy na pindutin ang Enter: sapat na upang markahan ang (β€œm”), at pagkatapos ay subaybayan lamang ang mga bagong mensahe.

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Gayundin sa parehong window, maaari mong piliin ang hanay ng oras para sa output ng mga log:

  • key "1" - para sa 1 minuto;
  • "2" - 5 minuto;
  • "3" - 15 minuto;
  • "4" - 30 minuto;
  • "5" - 1 oras;
  • "0" - para sa buong buhay ng pod.

Espesyal na operating mode Pulse (command :pulse) ay nagpapakita ng pangkalahatang impormasyon tungkol sa Kubernetes cluster:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Dito makikita mo ang bilang ng mga mapagkukunan at ang kanilang katayuan (ang berde ay nagpapakita ng mga may katayuan Running).

Ang isa pang cool na tampok ng K9s ay tinatawag Popeye. Sinusuri nito ang lahat ng mga mapagkukunan para sa ilang partikular na pamantayan ng kawastuhan at ipinapakita ang resultang "rating" na may mga paliwanag. Halimbawa, makikita mo na walang sapat na sample o limitasyon, at maaaring tumakbo ang ilang container bilang root ...

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Mayroong pangunahing suporta sa Helm. Halimbawa, ito ay kung paano mo makikita ang mga release na naka-deploy sa cluster:

:helm all # всС
:helm $namespace # Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½

Benchmark

Kahit na binuo sa K9s hey ay isang simpleng HTTP server load generator, isang alternatibo sa mas kilalang ab (ApacheBench).

Upang paganahin ito, kailangan mong paganahin ang port-forward sa pod. Upang gawin ito, piliin ang pod at pindutin ang Shift + f, pumunta sa port-forward submenu gamit ang "pf" alias.

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Matapos piliin ang port at pindutin ang Ctrl + b, magsisimula ang benchmark mismo. Ang mga resulta ng kanyang trabaho ay naka-imbak sa /tmp at available para mapanood sa ibang pagkakataon sa K9s.

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes
Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Upang baguhin ang configuration ng benchmark, kailangan mong gumawa ng file $HOME/.k9s/bench-<my_context>.yml (natukoy para sa bawat kumpol).

NB: Mahalaga na ang extension ng lahat ng YAML file sa isang direktoryo .k9s ito ay eksakto .yml (.yaml hindi gumagana ng tama).

Halimbawa ng configuration:

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

interface

Ang hitsura ng mga column para sa mga listahan ng mga mapagkukunan ay binago sa pamamagitan ng paglikha ng isang file $HOME/.k9s/views.yml. Isang halimbawa ng nilalaman nito:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

Totoo, walang sapat na column para sa mga label, kung saan mayroon isyu sa proyekto.

Ang pag-uuri ayon sa mga hanay ay isinasagawa sa pamamagitan ng mga keyboard shortcut:

  • Shift + n - ayon sa pangalan;
  • Shift + o - ayon sa mga node;
  • Shift + i - sa pamamagitan ng IP;
  • Shift + a - sa tagal ng buhay ng lalagyan;
  • Shift + t - ayon sa bilang ng mga pag-restart;
  • Shift + r - ayon sa katayuan ng pagiging handa;
  • Shift + c - sa pamamagitan ng pagkonsumo ng CPU;
  • Shift + m - sa pamamagitan ng pagkonsumo ng memorya.

Kung hindi gusto ng isang tao ang default na scheme ng kulay, sinusuportahan pa nga ng K9s mga balat. Available ang mga ready-made na halimbawa (7 piraso). dito. Narito ang isang halimbawa ng isa sa mga balat na ito (sa navy):

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Mga Plugin

Sa wakas mga plugin pinapayagan kang palawakin ang mga kakayahan ng K9s. Ako mismo ay gumamit lamang ng isa sa mga ito sa aking trabaho - kubectl get all -n $namespace.

Parang ganito. Gumawa ng file $HOME/.k9s/plugin.yml na may nilalaman tulad nito:

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"

Ngayon ay maaari kang pumunta sa namespace at pindutin ang "g" upang maisagawa gamit ang kaukulang utos:

Pangkalahatang-ideya ng k9s - isang advanced na terminal interface para sa Kubernetes

Kabilang sa mga plugin mayroong, halimbawa, mga pagsasama sa kubectl-jq at isang utility para sa pagtingin sa mga log bituin.

Konklusyon

Para sa aking panlasa, ang mga K9 ay naging napaka-maginhawang gamitin: mabilis kang masanay sa paghahanap ng lahat ng kailangan mo nang hindi ito ginagamit. kubectl. Nasiyahan ako sa view ng mga log at ang kanilang pag-save, mabilis na pag-edit ng mga mapagkukunan, ang bilis ng trabaho sa pangkalahatan *, ang Popeye mode ay naging kapaki-pakinabang. Ang isang espesyal na pagbanggit ay ang kakayahang lumikha ng mga plugin at baguhin ang application upang umangkop sa iyong mga pangangailangan.

* Bagaman, sa malaking dami ng mga log, napansin ko rin ang mabagal na operasyon ng mga K9. Sa ganitong mga sandali, ang utility ay "kumain" ng 2 core mula sa Intel Xeon E312xx at maaaring mag-freeze.

Ano ang kulang sa ngayon? Mabilis na rollback sa nakaraang bersyon (hindi namin pinag-uusapan ang tungkol sa RS) nang hindi pumunta sa direktoryo. Bilang karagdagan, ang pagbawi ay nangyayari lamang para sa lamang mapagkukunan: kung tatanggalin mo ang isang anotasyon o label, kakailanganin mong tanggalin at ibalik ang buong mapagkukunan (ito ay kung saan kailangan mong pumunta sa direktoryo). Isa pang maliit na bagay - walang sapat na petsa para sa naturang naka-save na "mga backup".

PS

Basahin din sa aming blog:

Pinagmulan: www.habr.com

Magdagdag ng komento