Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

K9s biedt een terminal gebruikersinterface voor interactie met Kubernetes-clusters. Het doel van dit Open Source-project is om een gemakkelijke navigatie door toepassingen in K8s, observatie en beheer ervan te faciliteren. K9s houdt constant veranderingen in Kubernetes in de gaten en biedt snelle commando's voor het werken met de geobserveerde middelen.

Het project is geschreven in Go en bestaat al meer dan anderhalf jaar: de eerste commit werd gemaakt op 1 februari 2019. Bij het schrijven van dit artikel zijn er meer dan 9000 sterren op GitHub en ongeveer 80 bijdragers. Laten we eens kijken wat k9s kan.

Installatie en opstarten

Dit is een clienttoepassing (ten opzichte van het Kubernetes-cluster) die het eenvoudigst kan worden gestart als een Docker-image:

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

Voor sommige Linux-distributies en andere besturingssystemen zijn er ook kant-en-klare installaties beschikbaar. pakkettenIn het algemeen kan voor Linux-systemen het binaire bestand worden geïnstalleerd:

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

Er zijn geen specifieke vereisten voor het K8s-cluster zelf. Uit recensies blijkt dat de applicatie ook werkt met oudere versies van Kubernetes, zoals 1.12.

De applicatie wordt opgestart met de standaardconfiguratie .kube/config — soortgelijk aan hoe dat gebeurt met kubectl.

Navigatie

Standaard wordt een venster geopend met de standaard namespace die is opgegeven voor de context. Dus, als je hebt ingevoerd kubectl config set-context --current --namespace=test, dan wordt ook de namespace geopend test. (Voor informatie over het wisselen van contexten/namespaces, zie hieronder.)

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Overgangen naar commandomode wordt gemaakt door op “:” te drukken. Daarna kan het gebruik van k9s beheerd worden met commando's — bijvoorbeeld, om een lijst van StatefulSets (in de huidige namespace) te bekijken, kan je invoeren :sts.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Voor enkele andere Kubernetes-resources:

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

Om een volledige lijst van beschikbare resource types te tonen, is er het commando :aliases.

Het is handig om ook een lijst van beschikbare commando's te bekijken die via sneltoetscombinaties in het huidige venster beschikbaar zijn: daarvoor is het voldoende om op “?” te drukken.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Daarnaast heeft k9s een zoekmodus, waarvoor je eenvoudig “/” kunt invoeren. Hiermee wordt gezocht naar de inhoud van het huidige “venster”. Stel je voor, als je eerder invoerde :ns, heb je de lijst van namespaces geopend. Als er te veel zijn, hoef je om niet eindeloos naar beneden te scrollen, alleen maar in het venster met namespaces in te voeren /mynamespace.

Om te zoeken op labels kan je alle pods in de gewenste namespace selecteren, waarna je bijvoorbeeld kunt invoeren, / -l app=whoami. We krijgen een lijst van pods met dit label:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

De zoektocht werkt in alle venstertypes, inclusief logs, bekijken van YAML-manifesten en beschrijven voor resources — meer over deze mogelijkheden staat hieronder.

Hoe ziet de algemene volgorde van acties voor navigatie eruit?

Met de opdracht :ctx je kunt de context selecteren:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Voor het kiezen van de namespace is er de eerder genoemde command :ns, en daarna kun je de zoekfunctie gebruiken voor de gewenste ruimte: /test.

Als we nu de resource kiezen die ons interesseert (bijvoorbeeld dezelfde StatefulSet), verschijnt de bijbehorende informatie: hoeveel pods zijn er actief met beknopte gegevens over hen.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Het kunnen alleen de pods zijn — dan is het voldoende om in te voeren :pod. In het geval van ConfigMaps (:cm — voor de lijst van deze resources) kun je het interessante object selecteren en op 'u' drukken, waarna K9s zal aangeven wie deze specifieke (CM) gebruikt.

Een andere handige functie voor het bekijken van resources is hun ‘röntgen’ (XRay view). Deze modus wordt opgeroepen met het commando :xray RESOURCE en... het is eenvoudiger om te laten zien hoe het werkt dan om het uit te leggen. Hier is een illustratie voor StatefulSets:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes
(Elk van deze resources kan worden bewerkt, gewijzigd, gemaakt beschrijven.)

En hier is een Deployment met Ingress:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Werken met resources

Over elke resource kan informatie worden verkregen in YAML of zijn beschrijven door op de bijbehorende sneltoetsen te drukken ('y' en 'd' respectievelijk). Uiteraard zijn er nog meer basisbewerkingen: hun lijst en sneltoetsen staan altijd zichtbaar door de handige 'kop' in de interface (deze wordt verborgen met Ctrl + e).

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Bij het bewerken van een resource ('e' na selectie) opent een teksteditor, ingesteld in de omgevingsvariabelen (export EDITOR=vim).

Hier is hoe de gedetailleerde beschrijving van de resource eruit ziet (beschrijven):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Deze output (of de uitvoer van het bekijken van het YAML-manifest van de resource) kan worden opgeslagen met de gebruikelijke sneltoets Ctrl + s. Waar het zal worden opgeslagen, zal blijken uit het bericht van K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml met succes opgeslagen!

Van de gemaakte back-upbestanden kunnen ook resources worden hersteld, nadat de systeemlabels en annotaties zijn verwijderd. Hiervoor moet je naar de directory gaan met deze bestanden (:dir /tmp), daarna het gewenste bestand selecteren en toepassen. apply.

Overigens, op elk moment kan je terugkeren naar een vorige ReplicaSet als er problemen zijn met de huidige. Hiervoor moet je de gewenste RS kiezen (:rs voor hun lijst):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

... en een rollback uitvoeren met behulp van Ctrl + l. We zouden een melding moeten krijgen dat alles succesvol is verlopen:

k9s/whoami-5cfbdbb469 succesvol teruggezet

En om de replicas te schalen, is het voldoende om op 's' (scale) te drukken en het gewenste aantal instanties te kiezen:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

In elk van de containers kun je met shell binnenkomen: ga hiervoor naar de gewenste pod, druk op 's' (shell) en kies de container.

Andere mogelijkheden

Natuurlijk is het ook mogelijk om logs te bekijken ('l' voor de geselecteerde resource). En om nieuwe logs te zien, is het niet nodig om voortdurend op Enter te drukken: je kunt simpelweg markeren ('m'), waarna je alleen nieuwe berichten volgt.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Ook in dit venster kun je een tijdsinterval voor de logs kiezen:

  • toets '1' — voor 1 minuut;
  • '2' — 5 minuten;
  • '3' — 15 minuten;
  • '4' — 30 minuten;
  • '5' — 1 uur;
  • '0' — voor de gehele levensduur van de pod.

Een speciale modus van Pulse (commando :pulse) toont algemene informatie over de Kubernetes-cluster:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Hierin kun je het aantal resources en hun status zien (groen toont diegenen die status hebben) Running).

Een andere interessante functie van K9s heet Popeye. Het controleert alle resources op bepaalde correctheidcriteria en geeft een 'rating' met uitleg. Bijvoorbeeld, je kunt zien dat er geen probes of limieten ontbreken, en dat een container als root kan draaien...

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Er is basis ondersteuning voor Helm. Bijvoorbeeld, zo kun je de releases bekijken die in de cluster zijn gedeployed:

:helm all # alles
:helm $namespace # in een specifieke namespace

Benchmark

In K9s is zelfs een hey — een eenvoudige belastinggenerator voor de HTTP-server, als alternatief voor de meer bekende ab (ApacheBench).

Om het in te schakelen, is activatie van port-forward in de pod vereist. Hiervoor kiezen we een pod en drukken we op Shift + f, gaan naar het sub-menu port-forward via het alias 'pf'.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Na het kiezen van de poort en het drukken op Ctrl + b, start de benchmark zelf. De resultaten worden opgeslagen in /tmp en zijn beschikbaar voor latere weergave in K9s.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes
Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Voor het wijzigen van de benchmarkconfiguratie moet je een bestand aanmaken $HOME/.k9s/bench-.yml (gedefinieerd voor elke cluster).

NB: Het is belangrijk dat de extensie van alle YAML-bestanden in de directory .k9s precies .yml (.yaml niet correct werkt).

Voorbeeldconfiguratie:

benchmarks:
  defaults:
    # Aantal threads
    concurrency: 2
    # Aantal aanvragen
    requests: 1000
  containers:
    # Instellingen voor de benchmarkcontainer
    # Een container wordt gedefinieerd als namespace/pod-naam:container-naam
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Er kan gebenchmarkt worden op diensten zoals NodePort en LoadBalancer
    # Syntax: namespace/service-naam
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Interface

De kolomweergave voor resource lijst wordt aangepast door het aanmaken van een bestand $HOME/.k9s/views.yml. Voorbeeld van de inhoud:

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

Echter, de kolom voor labels ontbreekt, waarvoor er is een issue in het project.

Sorteren op kolommen gebeurt met de sneltoetsen:

  • Shift + n — op naam;
  • Shift + o — op knooppunten;
  • Shift + i — op IP;
  • Shift + a — op levensduur van de container;
  • Shift + t — op aantal herstarts;
  • Shift + r — op gereedstatus;
  • Shift + c — op CPU-gebruik;
  • Shift + m — op geheugengebruik.

Als iemand de standaard kleurstelling niet bevalt, ondersteunt K9s zelfs thema's. Er zijn kant-en-klare voorbeelden (7 stuks) beschikbaar hier. Hier is een voorbeeld van zo'n thema (in de marine):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Plug-ins

Ten slotte, plug-ins die de mogelijkheden van K9s uitbreiden. Persoonlijk heb ik er maar één gebruikt — kubectl get all -n $namespace.

Dit ziet er als volgt uit. Maak een bestand aan $HOME/.k9s/plugin.yml met de volgende inhoud:

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 kun je naar de namespace gaan en op 'g' drukken om de overeenkomstige opdracht uit te voeren:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Onder de plugins zijn er bijvoorbeeld integraties met kubectl-jq en het logweergavehulpmiddel stern.

Conclusie

Naar mijn mening is K9s erg handig in gebruik: je raakt vrij snel gewend aan het zoeken naar alles wat je nodig hebt zonder gebruik te maken van kubectl. Ik was blij met de logweergave en het opslaan ervan, snelle bewerking van resources, de algemene snelheid*, en de Popeye-modus bleek nuttig te zijn. De mogelijkheden om plugins te maken en de applicatie aan te passen aan je behoeften verdienen aparte vermelding.

* Ondanks dat ik bij een grote hoeveelheid logs ook langzame prestaties van K9s heb opgemerkt. In zulke momenten 'verslond' de tool 2 kernen van de Intel Xeon E312xx en kon zelfs vastlopen.

Wat ontbreekt momenteel? Een snelle terugdraaiing naar de vorige versie (niet over RS) zonder naar de map te hoeven gaan. Bovendien vindt herstel alleen plaats voor de reden zijn waarom de resource: als je een annotatie of label hebt verwijderd, moet je de hele resource verwijderen en herstellen (hier moet je wel naar de map gaan). Een ander punt is dat de datum van dergelijke opgeslagen 'back-ups' ontbreekt.

P.S.

Lees ook op onze blog:

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster