Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

K9s tilbyr et terminalgrensesnitt for samhandling med Kubernetes-klynger. Målet med dette åpen kildekode-prosjektet er å gjøre det enkelt å navigere, overvåke og administrere applikasjoner i K8s. K9s overvåker kontinuerlig endringer i Kubernetes og tilbyr hurtigkommandoer for å jobbe med overvåkede ressurser.

Prosjektet er skrevet i Go og har eksistert i over halvannet år: den første commiten ble gjort 1. februar 2019. I skrivende stund er det over 9000 stjerner på [navn på plattform]. GitHub og rundt 80 bidragsytere. La oss se hva hunder fra K9 kan gjøre?

Installasjon og lansering

Dette er en klientapplikasjon (i forhold til Kubernetes-klyngen), som enklest kjøres som et Docker-image:

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

For noen Linux-distribusjoner og andre operativsystemer finnes det også ferdige versjoner. pakkerGenerelt sett kan du installere en binærfil for Linux-systemer:

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

Det er ingen spesifikke krav til selve K8s-klyngen. Ut fra anmeldelsene fungerer applikasjonen med eldre versjoner av Kubernetes, som for eksempel 1.12.

Applikasjonen startes med standardkonfigurasjonen. .kube/config - likt hvordan det gjør kubectl.

Navigasjon

Som standard åpnes et vindu med standardnavnerommet spesifisert for konteksten. Det vil si, hvis du har spesifisert kubectl config set-context --current --namespace=test, så åpnes navnerommet test. (Se nedenfor for endring av kontekster/navnerom.)

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Overgang til kommandomodus gjøres ved å trykke på ":". Etter det kan du kontrollere driften av k9s ved hjelp av kommandoer - for eksempel, for å se listen over StatefulSets (i gjeldende navnerom), kan du skrive inn :sts.

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

For noen andre Kubernetes-ressurser:

  • :ns — Navnerom;
  • :deploy — Utplasseringer;
  • :ing - Inntrengninger;
  • :svc — Tjenester.

For å vise en fullstendig liste over ressurstyper som er tilgjengelige for visning, finnes det en kommando :aliases.

Det er også praktisk å se listen over kommandoer som er tilgjengelige via hurtigtastkombinasjoner i det gjeldende vinduet: for å gjøre dette, klikk bare på «?».

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Også i k9s er det søkemodus, for å gå til, er det nok å skrive inn "/". Med den søkes det etter innholdet i det gjeldende "vinduet". Hvis du for eksempel tidligere har skrevet inn :ns, har du en liste over navnerom åpne. Hvis det er for mange av dem, er det nok å gå inn i vinduet med navnerom for å ikke bla ned lenge. /mynamespace.

For å søke etter etiketter kan du velge alle pods i ønsket navneområde og deretter skrive inn, for eksempel, / -l app=whoamiVi får en liste over pods med denne etiketten:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Søk fungerer i alle typer vinduer, inkludert logger, visning av YAML-manifest og describe for ressurser – se nedenfor for mer informasjon om disse alternativene.

Hvordan ser den overordnede navigasjonssekvensen ut?

Med kommandoen :ctx du kan velge kontekst:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

For å velge et navnerom finnes kommandoen som allerede er nevnt. :ns, og deretter kan du bruke søket etter ønsket plass: /test.

Hvis vi nå velger ressursen vi er interessert i (for eksempel det samme StatefulSet), vil den tilsvarende informasjonen vises for den: hvor mange pods som kjører med kort informasjon om dem.

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Bare pods kan være av interesse – da er det nok å gå inn :podNår det gjelder ConfigMaps (:cm — for en liste over disse ressursene) kan du velge objektet du er interessert i og trykke på "u", hvoretter K9s vil fortelle deg nøyaktig hvem (denne CM-en) som bruker den.

En annen praktisk funksjon for å se ressurser er deres "Røntgen" (røntgenvisning)Denne modusen kalles av kommandoen :xray RESOURCE og ... det er enklere å vise hvordan det fungerer enn å forklare det. Her er en illustrasjon for StatefulSets:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes
(Hver av disse ressursene kan redigeres, endres, lages describe.)

Og her er distribusjon med Ingress:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Arbeid med ressurser

For hver ressurs kan du få informasjon i YAML eller dens describe ved å trykke på de tilsvarende hurtigtastene (henholdsvis «y» og «d»). Selvfølgelig finnes det enda mer grunnleggende operasjoner: listen og hurtigtastene er alltid synlige takket være en praktisk «overskrift» i grensesnittet (skjult ved å trykke Ctrl + e).

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Når du redigerer en ressurs ('e' etter at du har valgt den), brukes teksteditoren som er definert i miljøvariablene (export EDITOR=vim).

Og slik ser en detaljert beskrivelse av ressursen ut (describe):

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Denne utdataen (eller utdataene fra visning av YAML-manifestet til ressursen) kan lagres ved hjelp av den kjente hurtigtasten Ctrl + s. Hvor den skal lagres, vil fremgå av K9s-meldingen:

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

Du kan også gjenopprette ressurser fra de opprettede sikkerhetskopifilene etter å ha fjernet systemetiketter og merknader. For å gjøre dette må du gå til katalogen med dem (:dir /tmp), velg deretter ønsket fil og bruk apply.

Forresten, du kan når som helst gå tilbake til det forrige ReplicaSet hvis det er problemer med det nåværende. For å gjøre dette, velg ønsket RS (:rs for listen deres):

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

... og utfør en tilbakestilling med Ctrl + l. Vi skal få et varsel om at alt var vellykket:

k9s/whoami-5cfbdbb469 successfully rolled back

Og for å skalere replikaene, klikk bare på «s» (skala) og velg ønsket antall kopier:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Du kan legge inn hvilken som helst av containerne ved hjelp av skallet: for å gjøre dette, gå til ønsket pod, trykk på "s" (skall) og velg containeren.

Andre funksjoner

Selvfølgelig støttes også visning av logger ("l" for den valgte ressursen). Og for å se nye logger trenger du ikke å trykke på Enter hele tiden: bare merk ("m"), og spor deretter bare nye meldinger.

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

I samme vindu kan du også velge tidsperiode for utdata av logger:

  • tast “1” - om 1 minutt;
  • "2" - 5 minutter;
  • "3" - 15 minutter;
  • "4" - 30 minutter;
  • "5" - 1 time;
  • "0" - for hele podens levetid.

Spesiell driftsmodus Puls (kommando :pulse) viser generell informasjon om Kubernetes-klyngen:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

I den kan du se antall ressurser og statusen deres (de med statusen vises i grønt) Running).

En annen interessant funksjon ved K9s kalles PopeyeDen sjekker alle ressurser for visse kriterier for korrekthet og sender ut den resulterende "vurderingen" med forklaringer. For eksempel kan du se at det ikke er nok sonder eller grenser, og noen containere kan startes under root ...

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Det finnes grunnleggende Helm-støtte. For eksempel kan du se versjoner som er distribuert til klyngen på denne måten:

:helm all # все
:helm $namespace # в конкретном пространстве имен

benchmark

K9s har til og med innebygd hey — er en enkel HTTP-serverbelastningsgenerator, et alternativ til den bedre kjente ab (ApacheBench).

For å aktivere det, må du aktivere portvideresending i poden. For å gjøre dette, velg poden og trykk Shift + f, gå til undermenyen for portvideresending ved å bruke aliaset "pf".

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Etter at du har valgt porten og trykket Ctrl + b, starter selve referansetesten. Resultatene av arbeidet lagres i /tmp og er tilgjengelige for senere visning i K9s.

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes
Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

For å endre referansekonfigurasjonen må du opprette en fil $HOME/.k9s/bench-<my_context>.yml (definert for hver klynge).

NB: Det er viktig at endelsen til alle YAML-filer i katalogen .k9s det var akkurat .yml (.yaml fungerer ikke riktig).

Konfigurasjonseksempel:

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

grensesnitt

Utseendet til kolonner for ressurslister endres ved å opprette en fil $HOME/.k9s/views.ymlEt eksempel på innholdet:

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

Det er sant at det ikke er noen kolonne på etiketter, og det er det vi har. problemet i prosjektet.

Sortering etter kolonner gjøres ved hjelp av hurtigtaster:

  • Shift + n — etter navn;
  • Shift + o - ved noder;
  • Shift + i — etter IP;
  • Shift + a — etter containerens levetid;
  • Shift + t — etter antall omstarter;
  • Shift + r — etter beredskapsstatus;
  • Shift + c — etter CPU-forbruk;
  • Shift + m — etter minneforbruk.

Hvis noen ikke liker standardfargeskjemaet, støtter K9s til og med skinsFerdige eksempler (7 stk.) er tilgjengelige herHer er et eksempel på et av disse skinnene. (i marinen):

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Плагины

Til slutt, den plugins lar deg utvide mulighetene til K9-er. Jeg brukte personlig bare én av dem i arbeidet mitt - kubectl get all -n $namespace.

Det ser slik ut. Opprett en fil $HOME/.k9s/plugin.yml med innhold som dette:

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"

Nå kan du gå til navnerommet og trykke "g" for å utføre den tilsvarende kommandoen:

Oversikt over k9s - et avansert terminalgrensesnitt for Kubernetes

Blant programtilleggene finnes for eksempel integrasjoner med kubectl-jq og et verktøy for visning av logger. Stern.

Konklusjon

Etter min mening viste det seg at K9-er var veldig praktiske å bruke: det er ganske enkelt å venne seg til å finne alt man trenger uten å bruke dem. kubectlJeg var fornøyd med hvordan jeg kunne se logger og lagre dem, den raske redigeringen av ressurser, den generelle arbeidshastigheten*, og Popeye-modusen viste seg å være nyttig. Muligheten til å lage plugins og endre applikasjonen slik at den passer dine behov fortjener en spesiell omtale.

* Selv om jeg også la merke til treg drift av K9-ene med et stort volum av logger. I slike øyeblikk "spiste" verktøyet 2 kjerner av Intel Xeon E312xx og kunne til og med henge seg.

Hva mangler for øyeblikket? En rask tilbakerulling til forrige versjon (ikke RS) uten å gå til katalogen. I tillegg skjer gjenopprettingen bare for bare ressurs: Hvis du slettet en merknad eller etikett, må du slette og gjenopprette hele ressursen (det er her du må gå til katalogen). En annen liten ting er at datoen for slike lagrede "sikkerhetskopier" mangler.

PS

Les også på bloggen vår:

Kilde: www.habr.com