Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

K9s giver et terminalinterface til interaktion med Kubernetes-klynger. Målet med dette Open Source-projekt er at lette navigationen i applikationer i K8s, overvågning af dem og håndtering af dem. K9s følger konstant med i ændringer i Kubernetes og tilbyder hurtige kommandoer til arbejde med de overvågede ressourcer.

Projektet er skrevet i Go og har eksisteret i mere end halvandet år: den første commit blev lavet den 1. februar 2019. På tidspunktet for artiklens skrivning er der mere end 9000 stjerner på GitHub og omkring 80 bidragydere. Lad os se, hvad k9s kan?

Installation og opstart

Det er en klientapplikation (i forhold til Kubernetes-klyngen), som nemmest kan startes som et Docker-billede:

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

Der er også færdige installationspakker til nogle Linux-distributioner og andre operativsystemer. pakkerGenerelt kan man installere den binære fil til 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

Der er ingen specifikke krav til selve K8s-klyngen. Ifølge anmeldelser fungerer applikationen også med ældre versioner af Kubernetes, som 1.12.

Applikationen startes ved hjælp af standardkonfigurationen .kube/config — svarende til det, som kubectl.

Navigation

Som standard åbnes et vindue med det standard namespace, der er angivet for konteksten. Det vil sige, hvis du har skrevet kubectl config set-context --current --namespace=test, så vil namespace test. (Om ændring af kontekster/namespaces se nedenfor.)

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Overgangen til kommandotilstand finder sted ved at trykke på ":". Derefter kan man styre k9s med kommandoer - for eksempel for at se listen over StatefulSets (i det aktuelle namespace) kan man indtaste :sts.

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

For nogle andre Kubernetes-reserver:

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

For at vise den fulde liste af ressource typer, der er tilgængelige for visning, er der kommandoen :aliases.

Det er praktisk at se listen over kommandoer, der er tilgængelige via genvejstaster i det nuværende vindue: for dette er det tilstrækkeligt at trykke på "?".

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

K9s har også en søgemode, for at skifte til den skal man blot indtaste "/". Med den kan man søge i indholdet af det nuværende "vindue". Antag, at du tidligere har indtastet :ns, du har åbnet listen over navnerum. Hvis der er for mange, så for at undgå langscrolling nedad, er det nok at indtaste /mynamespace.

For at søge efter labels kan du vælge alle pods i det ønskede navnerum, hvorefter du kan indtaste for eksempel / -l app=whoami. Vi får en liste over pods med denne label:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Søgningen virker i alle typer vinduer, inklusiv logs, visning af YAML-manifester og describe for ressourcer — mere om disse funktioner nedenfor.

Hvordan ser sekvensen af handlinger ud for navigation?

Med kommandoen :ctx kan man vælge konteksten:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

For at vælge navnerummet er der allerede nævnt kommandoen :ns, og derefter kan man bruge søgningen til det ønskede rum: /test.

Hvis vi nu vælger den ressource, der interesserer os (for eksempel den samme StatefulSet), vil der komme information frem om den: hvor mange pods der kører med korte oplysninger om dem.

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Måske er kun pods interessante — i så fald er det nok at indtaste :pod. I tilfælde af ConfigMaps (:cm — for listen over disse ressourcer) kan man vælge den interessante genstand og trykke på «u», hvorefter K9s vil informere om, hvem der specifikt bruger den (denne CM).

Endnu en praktisk funktion til visning af ressourcer — deres «røntgen» (XRay view). Denne tilstand aktiveres med kommandoen :xray RESOURCE og… det er lettere at vise, hvordan det fungerer, end at forklare. Her er en illustration for StatefulSets:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes
(Hver af disse ressourcer kan redigeres, ændres, gøres describe.)

Og her er Deployment med Ingress:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Arbejdet med ressourcer

Om hver ressource kan man få information i YAML eller dens describe ved at trykke på de tilsvarende tastaturkombinationer («y» og «d» henholdsvis). Der er selvfølgelig flere grundlæggende operationer: deres liste og tastaturkombinationer er altid synlige takket være den praktiske «header» i grænsefladen (den skjules ved at trykke på Ctrl + e).

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Ved redigering af enhver ressource («e» efter valg) åbnes den teksteditor, der er defineret i miljøvariablerne (export EDITOR=vim).

Og sådan ser den detaljerede beskrivelse af ressourcen ud (describe):

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Sådan en output (eller output af visning af YAML-manifestet for ressourcen) kan gemmes med den velkendte tastaturkombination Ctrl + s. Hvor det gemmes, vil være kendt fra meddelelsen fra K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml gemt med succes!

Fra de oprettede backup-filer kan ressourcer gendannes ved først at fjerne systemmærker og annotationer. For dette kræves det at navigere til mappen med dem (:dir /tmp), hvorefter den ønskede fil vælges og anvendes. apply.

For at sige det på en anden måde, kan man til enhver tid rulle tilbage til en tidligere ReplicaSet, hvis der er problemer med den nuværende. For dette skal den ønskede RS vælges (:rs til listen):

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

… og udføre rollback ved hjælp af Ctrl + l. Vi skal modtage en meddelelse om, at alt er gået godt:

k9s/whoami-5cfbdbb469 er rullet tilbage med succes

Og for at skalere replikaterne, skal du blot trykke på «s» (scale) og vælge det ønskede antal instanser:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

I enhver af containerne kan du få adgang via shell: gå til den ønskede pod, tryk på «s» (shell) og vælg containeren.

Andre funktioner

Selvfølgelig understøttes visning af logs også («l» for den valgte ressource). For at se nye logs skal du ikke konstant trykke på Enter: det er nok at markere («m»), hvorefter kun nye meddelelser følges.

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

I samme vindue kan du også vælge en tidsramme for output af logs:

  • tast «1» — for 1 minut;
  • «2» — 5 minutter;
  • «3» — 15 minutter;
  • «4» — 30 minutter;
  • «5» — 1 time;
  • «0» — for hele livscyklussen af pod’en.

Den specielle arbejdsmetode Pulse (kommando :pulse) viser generelle oplysninger om Kubernetes-klusteret:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Her kan du se antallet af ressourcer og deres tilstand (de, der har status, vises i grønt. Kørende).

En anden interessant funktion i K9s kaldes Popeye. Den kontrollerer alle ressourcer baseret på bestemte korrekthedskriterier og giver den resulterende «vurdering» med forklaringer. For eksempel kan du se, at der mangler begrænsninger eller grænser, og at en container kan køre som root…

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Der er grundlæggende support for Helm. For eksempel kan du se udgivelserne, der er deployet til klusteret:

:helm all # alt
:helm $namespace # i et bestemt navnerum

Benchmark

I K9s er der endda indbygget hey — en simpel belastningsgenerator til HTTP-serveren, et alternativ til det mere kendte ab (ApacheBench).

For at aktivere det kræves port-forward aktivering i pod'en. Vælg pod og tryk på Shift + f, gå til undermenuen port-forward med aliaset «pf».

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Efter at have valgt porten og trykket på Ctrl + b starter benchmarken. Resultaterne gemmes i /tmp og er tilgængelige for senere visning i K9s.

Oversigt over k9s - et avanceret terminalinterface til Kubernetes
Oversigt over k9s - et avanceret terminalinterface til Kubernetes

For at ændre konfigurationen af benchmark’en skal du oprette en fil $HOME/.k9s/bench-.yml (defineres for hver klynge).

NB: Det er vigtigt, at alle YAML-filer i mappen .k9s har endelsen .yml (.yaml fungerer ikke korrekt).

Eksempel på konfiguration:

benchmarks:
  defaults:
    # Antal tråde
    concurrency: 2
    # Antal forespørgsler
    requests: 1000
  containers:
    # Indstillinger for benchmark-container
    # Containeren defineres som 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:
    # Det er muligt at køre benchmark på tjenester som NodePort og LoadBalancer
    # Syntax: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Interface

Visningen af kolonner for ressource lister ændres ved at oprette en fil $HOME/.k9s/views.yml. Eksempel på indholdet:

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

Dog er der manglende kolonne til labels, hvilket der er et issue i projektet.

Sortering efter kolonner udføres med tastaturkombinationer:

  • Shift + n — efter navn;
  • Shift + o — efter noder;
  • Shift + i — efter IP;
  • Shift + a — efter containerens levetid;
  • Shift + t — efter antal genstart;
  • Shift + r — efter status for beredskab;
  • Shift + c — efter CPU-forbrug;
  • Shift + m — efter hukommelsesforbrug.

Hvis nogen ikke kan lide det standard farveskema, understøtter K9s endda skins. Klar til eksempler (7 stykker) tilgængelige her. Her er et eksempel på et af disse skins (in the navy):

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Plugins

Endelig, plugins muliggør udvidelse af K9s' kapaciteter. Personligt har jeg kun brugt en af dem — kubectl get all -n $namespace.

Det ser således ud. Vi opretter en fil $HOME/.k9s/plugin.yml med følgende indhold:

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"

Nu kan du gå til navnerummet og trykke på "g" for at udføre den pågældende kommando:

Oversigt over k9s - et avanceret terminalinterface til Kubernetes

Blandt plugins findes der for eksempel integrationer med kubectl-jq og en logvisningsværktøj stern.

Konklusion

Efter min mening har K9s vist sig at være meget praktisk at arbejde med: man vænner sig hurtigt til at finde alt det nødvendige uden brug kubectl. Jeg blev positivt overrasket over logvisningen og dennes gemmefunktion, hurtig redigering af ressourcer, og den generelle ydeevne. Way Popeye viste sig at være nyttig. Det er også værd at nævne muligheden for at oprette plugins og tilpasse applikationen til ens behov.

* Selvom jeg ved store mængder logs også har bemærket langsom ydeevne fra K9s. I sådanne øjeblikke brugte værktøjet 2 kerner fra Intel Xeon E312xx og kunne endda fryse.

Hvad mangler i øjeblikket? En hurtig tilbagekobling til den tidligere version (ikke RS) uden at skifte mappe. Desuden sker genoprettelsen kun for alle ressourcen: hvis du har slettet en annotation eller et label, er du nødt til at slette og genskabe hele ressourcen (her er det nødvendigt at skifte mappe). En anden lille ting — der mangler datoer for sådanne gemte 'backups'.

P.S.

Læs også på vores blog:

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster