Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

K9s tillhandahåller ett terminalanvändargränssnitt för interaktion med Kubernetes-kluster. Målet med detta Open Source-projekt är att göra det enkelt att navigera, övervaka och hantera applikationer i K8s. K9s övervakar ständigt förändringar i Kubernetes och erbjuder snabba kommandon för att arbeta med övervakade resurser.

Projektet är skrivet i Go och har funnits i över ett och ett halvt år: det första åtagandet gjordes den 1 februari 2019. I skrivande stund finns det 9000+ stjärnor på GitHub och cirka 80 bidragsgivare. Låt oss se vad k9s kan göra?

Installation och start

Detta är en klientapplikation (i relation till Kubernetes-klustret) som är enklast att köra som en Docker-bild:

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

För vissa Linux-distributioner och andra operativsystem finns det även färdiga att installera paket. I allmänhet, för Linux-system, kan du installera en binär 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

Det finns inga specifika krav för själva K8s-klustret. Av recensionerna att döma fungerar applikationen även med äldre versioner av Kubernetes som 1.12.

Applikationen startas med standardkonfigurationen .kube/config - liknande hur det gör kubectl.

Навигация

Som standard öppnas ett fönster med standardnamnutrymmet som anges för sammanhanget. Dvs om du skrev kubectl config set-context --current --namespace=test, då öppnas namnutrymmet test. (Se nedan för att ändra sammanhang/namnrymder.)

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Gå till kommandoläge görs genom att trycka på ":". Efter det kan du styra driften av k9s med hjälp av kommandon - för att till exempel se listan över StatefulSets (i det aktuella namnutrymmet), kan du ange :sts.

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

För några andra Kubernetes-resurser:

  • :ns — namnutrymmen;
  • :deploy — Utplaceringar;
  • :ing — Ingresser;
  • :svc — tjänster.

För att visa en komplett lista över resurstyper som är tillgängliga för visning finns ett kommando :aliases.

Det är också bekvämt att se listan över kommandon som är tillgängliga med snabbtangentskombinationer i det aktuella fönstret: för att göra detta klickar du bara på "?".

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Även i k9s finns det sökläge, för att gå dit det räcker att ange "/". Med den görs en sökning på innehållet i det aktuella "fönstret". Låt oss säga om du tidigare angett :ns, har du en lista med namnutrymmen öppen. Om det finns för många av dem, räcker det för att inte scrolla ner på länge, att gå in i fönstret med namnrymder /mynamespace.

För att söka efter etiketter kan du markera alla poddar i önskat namnområde och sedan ange t.ex. / -l app=whoami. Vi kommer att få en lista över poddar med denna etikett:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Sökningen fungerar i alla typer av fönster, inklusive loggar, visning av YAML-manifest och describe för resurser - se nedan för mer information om dessa funktioner.

Hur ser det övergripande navigeringsflödet ut?

Med kommandot :ctx du kan välja ett sammanhang:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

För att välja ett namnområde finns det redan nämnda kommandot :ns, och sedan kan du använda sökningen efter önskat utrymme: /test.

Om vi ​​nu väljer resursen vi är intresserade av (till exempel samma StatefulSet), kommer motsvarande information att visas för den: hur många pods som körs med kort information om dem.

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Endast poddar kan vara av intresse – då räcker det med att gå in :pod. I fallet med ConfigMaps (:cm - för listan över dessa resurser), kan du välja objektet av intresse och klicka på "u", varefter K9s kommer att berätta vem som specifikt använder det (denna CM).

En annan praktisk funktion för att visa resurser är deras "röntgen" (röntgenvy). Detta läge anropas av kommandot :xray RESOURCE och ... det är lättare att visa hur det fungerar än att förklara. Här är en illustration för StatefulSets:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes
(Var och en av dessa resurser kan redigeras, ändras, göras describe.)

Och här är Deployment with Ingress:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Arbeta med resurser

Du kan få information om varje resurs i YAML eller dess describe genom att trycka på motsvarande kortkommandon ("y" respektive "d"). Naturligtvis finns det ännu mer grundläggande operationer: deras lista och kortkommandon är alltid synliga tack vare en bekväm "rubrik" i gränssnittet (dold genom att trycka på Ctrl + e).

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

När du redigerar en resurs ("e" efter dess val) öppnas textredigeraren som definieras i miljövariablerna (export EDITOR=vim).

Och så här ser den detaljerade beskrivningen av resursen ut (describe):

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Denna utdata (eller utdata från visning av resursens YAML-manifest) kan sparas med den välbekanta Ctrl + s kortkommandon. Var det kommer att sparas kommer att vara känt från K9s meddelande:

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

Du kan också återställa resurser från de skapade säkerhetskopieringsfilerna efter att du tagit bort systemetiketter och anteckningar. För att göra detta måste du gå till katalogen med dem (:dir /tmp), välj sedan önskad fil och använd apply.

Förresten, när som helst kan du rulla tillbaka till föregående ReplicaSet om det finns problem med den nuvarande. För att göra detta, välj önskad RS (:rs för deras lista):

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

... och rulla tillbaka med Ctrl + l. Vi borde få ett meddelande om att allt gick bra:

k9s/whoami-5cfbdbb469 successfully rolled back

Och för att skala replikerna, klicka bara på "s" (skala) och välj önskat antal instanser:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Du kan gå in i någon av behållarna med hjälp av skalet: för att göra detta, gå till önskad pod, klicka på "s" (skal) och välj behållaren.

Andra funktioner

Naturligtvis stöds även visning av loggar ("l" för den valda resursen). Och för att se nya loggar behöver du inte ständigt trycka på Enter: det räcker med att markera ("m") och sedan bara spåra nya meddelanden.

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

I samma fönster kan du också välja tidsintervall för utmatning av loggar:

  • nyckel "1" - i 1 minut;
  • "2" - 5 minuter;
  • "3" - 15 minuter;
  • "4" - 30 minuter;
  • "5" - 1 timme;
  • "0" - under hela poddens livstid.

Speciellt driftläge Puls (kommando :pulse) visar allmän information om Kubernetes-klustret:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

I den kan du se antalet resurser och deras status (grönt visar de som har statusen Running).

En annan cool funktion hos K9s kallas Popeye. Den kontrollerar alla resurser för vissa kriterier för korrekthet och visar det resulterande "betyget" med förklaringar. Till exempel kan du se att det inte finns tillräckligt med försök eller gränser, och någon behållare kan köras som root ...

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Det finns grundläggande stöd för Helm. Så här kan du till exempel se utgåvorna som distribueras i klustret:

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

riktmärke

Även inbyggd i K9:or hallå är en enkel HTTP-serverbelastningsgenerator, ett alternativ till den mer kända ab (ApacheBench).

För att aktivera det måste du aktivera port-forward i podden. För att göra detta, välj podden och tryck Skift + f, gå till undermenyn port-forward med "pf"-aliaset.

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Efter att ha valt porten och tryckt på Ctrl + b, startar själva riktmärket. Resultaten av hans arbete lagras i /tmp och är tillgängliga för senare visning i K9s.

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes
Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

För att ändra konfigurationen av riktmärket måste du skapa en fil $HOME/.k9s/bench-<my_context>.yml (bestäms för varje kluster).

OBS: Det är viktigt att förlängningen av alla YAML-filer i en katalog .k9s det var precis .yml (.yaml fungerar inte korrekt).

Konfigurationsexempel:

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änssnitt

Utseendet på kolumner för listor med resurser ändras genom att skapa en fil $HOME/.k9s/views.yml. Ett exempel på dess innehåll:

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

Det är sant att det inte finns tillräckligt med kolumn för etiketter, vilket det finns fråga i projektet.

Sortering efter kolumner utförs med kortkommandon:

  • Skift + n - efter namn;
  • Skift + o - efter noder;
  • Skift + i - med IP;
  • Skift + a - av behållarens livstid;
  • Shift + t - med antalet omstarter;
  • Skift + r - efter beredskapsstatus;
  • Skift + c - efter CPU-förbrukning;
  • Shift + m - efter minnesförbrukning.

Om någon inte gillar standardfärgschemat stöder K9s till och med skinn. Färdiga exempel (7 stycken) finns här. Här är ett exempel på ett av dessa skinn (i flottan):

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

plugin-program

Slutligen plugins låter dig utöka kapaciteten hos K9s. Jag har själv bara använt en av dem i mitt arbete - kubectl get all -n $namespace.

Det ser ut så här. Skapa en fil $HOME/.k9s/plugin.yml med innehåll som detta:

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å till namnutrymmet och trycka på "g" för att utföra med motsvarande kommando:

Översikt över k9s - ett avancerat terminalgränssnitt för Kubernetes

Bland plugins finns till exempel integrationer med kubectl-jq och ett verktyg för att visa loggar aktern.

Slutsats

För min smak visade sig K9s vara väldigt bekväma att arbeta med: du kan snabbt vänja dig vid att leta efter allt du behöver utan att använda det. kubectl. Jag var nöjd med synen på loggarna och deras besparing, snabb redigering av resurser, arbetshastigheten i allmänhet *, Popeye-läget visade sig vara användbart. Ett speciellt omnämnande är möjligheten att skapa plugins och modifiera applikationen för att passa dina behov.

* Även om jag, med en stor volym stockar, också märkte den långsamma driften av K9s. I sådana ögonblick "ät" verktyget 2 kärnor från Intel Xeon E312xx och kunde till och med frysa.

Vad saknas för tillfället? Snabb återställning till den tidigare versionen (vi pratar inte om RS) utan att gå till katalogen. Dessutom sker återhämtning endast för bara resurs: om du tar bort en anteckning eller etikett måste du ta bort och återställa hela resursen (det är här du måste gå till katalogen). En annan bagatell - det finns inte tillräckligt med datum för sådana sparade "säkerhetskopieringar".

PS

Läs även på vår blogg:

Källa: will.com

Lägg en kommentar