Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

K9s giver en terminalbrugergrænseflade til interaktion med Kubernetes-klynger. Målet med dette Open Source-projekt er at gøre det nemmere at navigere, overvåge og administrere applikationer i K8s. K9s overvåger konstant ændringer i Kubernetes og giver hurtige kommandoer til at arbejde med overvågede ressourcer.

Projektet er skrevet i Go og har eksisteret i mere end halvandet år: den første commit blev foretaget den 1. februar 2019. I skrivende stund er der 9000+ stjerner på GitHub og omkring 80 bidragydere. Lad os se, hvad k9s kan?

Installation og lancering

Dette er en klient (i forhold til Kubernetes-klyngen) applikation, som er nemmest at køre som et Docker-billede:

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

For nogle Linux-distributioner og andre operativsystemer er der også klar til at installere пакеты. Generelt for Linux-systemer kan du installere den binære fil:

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. At dømme efter anmeldelserne fungerer applikationen også med ældre versioner af Kubernetes som 1.12.

Applikationen begynder at bruge standardkonfigurationen .kube/config - ligner hvordan det gør kubectl.

Navigation

Som standard åbnes et vindue med det standardnavneområde, der er angivet for konteksten. Altså hvis du skrev kubectl config set-context --current --namespace=test, så åbnes navneområdet test. (Se nedenfor om ændring af kontekster/navneområder.)

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Gå til kommandotilstand udføres ved at klikke på “:”. Du kan derefter styre, hvordan k9s fungerer ved hjælp af kommandoer - for for eksempel at se en liste over StatefulSets (i det aktuelle navneområde), kan du indtaste :sts.

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

For nogle andre Kubernetes-ressourcer:

  • :ns - Navneområder;
  • :deploy — Indsættelser;
  • :ing - Indtrængen;
  • :svc - Tjenester.

For at få vist en komplet liste over ressourcetyper, der er tilgængelige for visning, er der en kommando :aliases.

Det er også praktisk at se listen over kommandoer, der er tilgængelige via genvejstastkombinationer i det aktuelle vindue: for at gøre dette skal du blot klikke på "?".

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Også i k9s er der søgetilstand, for at gå til, hvor du blot skal indtaste "/". Den søger gennem indholdet af det aktuelle "vindue". For eksempel, hvis du tidligere har indtastet :ns, har du en liste over navneområder åben. Hvis der er for mange af dem, så for ikke at rulle ned i lang tid, skal du bare gå ind i vinduet med navneområder /mynamespace.

For at søge efter etiketter kan du vælge alle pods i det ønskede navneområde og derefter indtaste f.eks. / -l app=whoami. Vi får en liste over bælg med denne etiket:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Søgningen fungerer i alle typer vinduer, inklusive logfiler, visning af YAML-manifester og describe for ressourcer - se nedenfor for mere information om disse muligheder.

Hvordan ser det overordnede navigationsflow ud?

Med kommandoen :ctx du kan vælge konteksten:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

For at vælge et navneområde er der den allerede nævnte kommando :ns, og så kan du bruge søgningen efter den ønskede plads: /test.

Hvis vi nu vælger den ressource, vi er interesseret i (f.eks. det samme StatefulSet), vises den tilsvarende information for den: hvor mange pods kører med kort information om dem.

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Kun pods kan have interesse - så er det bare at gå ind :pod. I tilfælde af ConfigMaps (:cm - for en liste over disse ressourcer) kan du vælge objektet af interesse og klikke på "u", hvorefter K9s vil fortælle dig, hvem nøjagtigt (denne CM) bruger det.

En anden praktisk funktion til at se ressourcer er deres "Røntgen" (røntgenvisning). Denne tilstand kaldes af kommandoen :xray RESOURCE og... det er nemmere at vise hvordan det virker end at forklare. Her er en illustration til StatefulSets:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes
(Hver af disse ressourcer kan redigeres, ændres, laves describe.)

Og her er Deployment with Ingress:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Arbejde med ressourcer

Oplysninger om hver ressource kan fås i YAML eller dens describe ved at trykke på de relevante tastaturgenveje (henholdsvis "y" og "d"). Der er selvfølgelig endnu mere grundlæggende handlinger: deres liste og tastaturgenveje er altid synlige takket være en praktisk "header" i grænsefladen (skjult ved at trykke på Ctrl + e).

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Når du redigerer en ressource ("e" efter at have valgt den), er teksteditoren defineret i miljøvariablerne (export EDITOR=vim).

Og her er, hvordan en detaljeret beskrivelse af ressourcen ser ud (describe):

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Dette output (eller output fra visning af YAML-manifestet for en ressource) kan gemmes ved at bruge den sædvanlige tastaturgenvej Ctrl + s. Hvor det vil blive gemt, vil være kendt fra K9s besked:

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

Du kan også gendanne ressourcer fra de oprettede backupfiler ved først at fjerne systemetiketter og anmærkninger. For at gøre dette skal du gå til mappen med dem (:dir /tmp), vælg derefter den ønskede fil og anvend apply.

Forresten kan du til enhver tid rulle tilbage til det forrige ReplicaSet, hvis der er problemer med det nuværende. For at gøre dette skal du vælge den ønskede RS (:rs for deres liste):

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

... og rulle tilbage med Ctrl + l. Vi skulle modtage en meddelelse om, at alt var lykkedes:

k9s/whoami-5cfbdbb469 successfully rolled back

Og for at skalere replikaer skal du blot klikke på "s" (skala) og vælge det nødvendige antal kopier:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Du kan indtaste en hvilken som helst af beholderne ved hjælp af skallen: For at gøre dette skal du gå til den ønskede pod, klikke på "s" (skal) og vælge beholderen.

Andre funktioner

Selvfølgelig understøttes visning af logfiler (“l” for den valgte ressource). Og for at se nye logfiler er der ingen grund til konstant at trykke på Enter: bare sæt et mærke ("m") og overvåg derefter kun nye beskeder.

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

I samme vindue kan du også vælge tidsinterval for udlæsning af logfiler:

  • tast "1" - om 1 minut;
  • "2" - 5 minutter;
  • "3" - 15 minutter;
  • "4" - 30 minutter;
  • "5" - 1 time;
  • "0" - i hele bælgens levetid.

Speciel driftstilstand Puls (kommando :pulse) viser generel information om Kubernetes-klyngen:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

I den kan du se antallet af ressourcer og deres status (dem, der har en status, vises med grønt Running).

En anden interessant funktion ved K9s kaldes Popeye. Den kontrollerer alle ressourcer for bestemte korrekthedskriterier og viser den resulterende "vurdering" med forklaringer. For eksempel kan du se, at der ikke er nok prøver eller grænser, og nogle containere kan køres som root...

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Der er grundlæggende Helm-støtte. Sådan kan du f.eks. se udgivelser, der er implementeret til klyngen:

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

benchmark

De byggede det endda ind i K9'er hey er en simpel belastningsgenerator til en HTTP-server, et alternativ til den mere velkendte ab (ApacheBench).

For at aktivere det, skal du aktivere port-forward i poden. For at gøre dette skal du vælge pod og trykke på Shift + f, gå til port-forward undermenuen ved at bruge aliaset "pf".

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Efter at have valgt porten og trykket på Ctrl + b, starter selve benchmarken. Resultaterne af hans arbejde er gemt i /tmp og er tilgængelige til senere visning i K9s.

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes
Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

For at ændre benchmark-konfigurationen skal du oprette en fil $HOME/.k9s/bench-<my_context>.yml (defineret for hver klynge).

NB: Det er vigtigt, at udvidelsen af ​​alle YAML-filer i mappen .k9s det var præcis .yml (.yaml fungerer ikke korrekt).

Konfigurationseksempel:

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

grænseflade

Udseendet af kolonnerne for ressourcelister ændres ved at oprette en fil $HOME/.k9s/views.yml. Et eksempel på dets indhold:

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

Sandt nok er der ikke nok kolonne til etiketter, hvilket der er problemstilling i projektet.

Sortering efter kolonner udføres ved hjælp af tastaturgenveje:

  • Shift + n - efter navn;
  • Shift + o - efter noder;
  • Shift + i - efter IP;
  • Skift + a - efter containerlevetid;
  • Shift + t — med antallet af genstarter;
  • Shift + r - efter beredskabsstatus;
  • Shift + c - efter CPU-forbrug;
  • Shift + m - ved hukommelsesforbrug.

Hvis nogen ikke kan lide standardfarveskemaet, understøtter K9s endda skind. Færdige eksempler (7 stk) er tilgængelige her. Her er et eksempel på et af disse skind (i flåden):

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

plugins

Endelig plugins giver dig mulighed for at udvide mulighederne for K9s. Jeg brugte selv kun én af dem i mit arbejde - kubectl get all -n $namespace.

Det ser sådan ud. Opret en fil $HOME/.k9s/plugin.yml med indhold 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"

Nu kan du gå til navneområdet og trykke på "g" for at udføre den tilsvarende kommando:

Oversigt over k9s - en avanceret terminalgrænseflade til Kubernetes

Blandt plugins er der for eksempel integrationer med kubectl-jq og et værktøj til at se logs agterstavnen.

Konklusion

For min smag viste K9s sig at være meget praktisk at bruge: med den kan du hurtigt vænne dig til at finde alt, hvad du har brug for uden at bruge kubectl. Jeg var tilfreds med at se logfiler og gemme dem, hurtig redigering af ressourcer, arbejdshastighed generelt*, Popeye-tilstand viste sig at være nyttig. Særligt nævnes muligheden for at oprette plugins og tilpasse applikationen, så den passer til dine behov.

* Selvom jeg, med en stor mængde logfiler, også bemærkede langsom drift af K9s. I sådanne øjeblikke "spiste" værktøjet 2 kerner af Intel Xeon E312xx og kunne endda fryse.

Hvad mangler der i øjeblikket? Hurtig rollback til den tidligere version (vi taler ikke om RS) uden at gå til biblioteket. Derudover sker restaurering kun for kun ressource: hvis du har slettet en anmærkning eller etiket, bliver du nødt til at slette og gendanne hele ressourcen (det er her du skal gå til biblioteket). En anden lille ting er, at datoen for sådanne gemte "sikkerhedskopier" mangler.

PS

Læs også på vores blog:

Kilde: www.habr.com