Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

K9s Biedt een terminalgebruikersinterface voor interactie met Kubernetes-clusters. Het doel van dit open source-project is om het navigeren, bewaken en beheren van applicaties in K8s eenvoudiger te maken. K9s bewaakt voortdurend wijzigingen in Kubernetes en biedt snelle opdrachten voor het werken met bewaakte resources.

Het project is geschreven in Go en bestaat al meer dan anderhalf jaar: de eerste commit werd gedaan op 1 februari 2019. Op het moment van schrijven staan ​​er meer dan 9000 sterren op GitHub en ongeveer 80 bijdragers. Laten we eens kijken wat k9s kunnen doen?

Installatie en lancering

Dit is een clienttoepassing (met betrekking tot het Kubernetes-cluster), die het eenvoudigst kan worden uitgevoerd 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 versies пакеты. Over het algemeen kunt u voor Linux-systemen het volgende binaire bestand installeren:

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. Volgens beoordelingen werkt de applicatie met oudere versies van Kubernetes, zoals 1.12.

De applicatie wordt gestart met de standaardconfiguratie. .kube/config - vergelijkbaar met hoe het doet kubectl.

Navigatie

Standaard wordt een venster geopend met de standaardnaamruimte die voor de context is opgegeven. Dat wil zeggen, als u zich heeft geregistreerd kubectl config set-context --current --namespace=test, dan wordt de naamruimte geopend test. (Zie hieronder voor het wijzigen van contexten/naamruimten.)

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Overgang naar opdrachtmodus wordt gedaan door op ":" te drukken. Daarna kunt u k9s besturen met behulp van opdrachten. Om bijvoorbeeld een lijst met StatefulSets (in de huidige naamruimte) te bekijken, kunt u typen :sts.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Voor enkele andere Kubernetes-bronnen:

  • :ns — Naamruimten;
  • :deploy — Implementaties;
  • :ing - Ingangen;
  • :svc — Diensten.

Om een ​​volledige lijst met beschikbare brontypen weer te geven, is er een opdracht :aliases.

Het is ook handig om de lijst met opdrachten te bekijken die via sneltoetscombinaties binnen het huidige venster beschikbaar zijn: klik hiervoor eenvoudig op “?”.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Ook in k9s is er zoekmodus, om er te komen is het voldoende om “/” in te voeren. Hiermee kunt u de inhoud van het huidige "venster" doorzoeken. Stel dat je eerder bent binnengekomen :ns, heb je een lijst met naamruimten open. Als er te veel zijn, is het voldoende om het venster met naamruimten in te voeren om niet te lang naar beneden te hoeven scrollen /mynamespace.

Om op labels te zoeken, kunt u alle pods in de gewenste naamruimte selecteren en vervolgens bijvoorbeeld invoeren: / -l app=whoami. We krijgen een lijst met pods met dit label:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Zoeken werkt in alle soorten vensters, inclusief logboeken, YAML-manifestweergave en describe voor bronnen - zie hieronder voor meer informatie over deze opties.

Hoe ziet het algehele navigatieproces eruit?

Met de opdracht :ctx U kunt de context selecteren:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Om een ​​naamruimte te selecteren, bestaat de reeds genoemde opdracht. :ns, en dan kunt u zoeken naar de gewenste ruimte: /test.

Als we nu de resource selecteren waarin we geïnteresseerd zijn (bijvoorbeeld dezelfde StatefulSet), wordt de bijbehorende informatie hiervoor weergegeven: hoeveel pods er actief zijn, met beknopte informatie over hen.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Alleen pods kunnen interessant zijn - dan is het voldoende om in te voeren :pod. In het geval van ConfigMaps (:cm — voor een lijst van deze bronnen) kunt u het object van interesse selecteren en op "u" drukken, waarna K9s u precies vertelt wie (deze CM) het gebruikt.

Een andere handige functie voor het bekijken van bronnen is hun "Röntgenfoto" (röntgenfoto). Deze modus wordt aangeroepen door de opdracht :xray RESOURCE en... het is makkelijker om te laten zien hoe het werkt, dan om uit te leggen. Hier is een illustratie voor StatefulSets:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes
(Elk van deze bronnen kan worden bewerkt, aangepast, describe.)

En hier is Deployment met Ingress:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Werken met hulpbronnen

Voor elke bron kunt u informatie verkrijgen in YAML of de bijbehorende describe door op de overeenkomstige sneltoetsen te drukken (respectievelijk “y” en “d”). Er zijn natuurlijk nog meer basisbewerkingen: hun lijst en sneltoetsen zijn altijd zichtbaar dankzij de handige 'kop' in de interface (verborgen door op Ctrl + e te drukken).

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Bij het bewerken van een bron ('e' na selectie) wordt de teksteditor die is gedefinieerd in de omgevingsvariabelen (export EDITOR=vim).

En dit is hoe een gedetailleerde beschrijving van de bron eruit ziet (describe):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

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

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

U kunt ook bronnen herstellen vanuit de gemaakte back-upbestanden, nadat u systeemlabels en annotaties hebt verwijderd. Om dit te doen, moet je naar de directory gaan met hen (:dir /tmp), selecteer vervolgens het gewenste bestand en pas toe apply.

Overigens kunt u op elk gewenst moment teruggaan naar de vorige ReplicaSet als er problemen zijn met de huidige. Om dit te doen, moet u de gewenste RS selecteren (:rs (voor hun lijst):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

… en terugdraaien met Ctrl + l. We zouden een melding moeten ontvangen dat alles succesvol is verlopen:

k9s/whoami-5cfbdbb469 successfully rolled back

En om de replica's te schalen, klikt u gewoon op 's' (schaal) en selecteert u het gewenste aantal kopieën:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

U kunt elke container betreden via de shell. Ga hiervoor naar de gewenste pod, druk op "s" (shell) en selecteer de container.

Andere functies

Uiteraard is het ook mogelijk om logs te bekijken ("l" voor de geselecteerde resource). En om nieuwe logs te bekijken, hoeft u niet constant op Enter te drukken: markeer het gewoon ("m") en houd vervolgens alleen de nieuwe berichten bij.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

In hetzelfde venster kunt u ook het tijdsbereik voor het uitgeven van logs selecteren:

  • toets “1” - in 1 minuut;
  • "2" - 5 minuten;
  • "3" - 15 minuten;
  • "4" - 30 minuten;
  • "5" - 1 uur;
  • "0" - voor de gehele levensduur van de pod.

Speciale bedrijfsmodus Puls (opdracht :pulse) toont algemene informatie over het Kubernetes-cluster:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Hierin kunt u het aantal bronnen en hun status zien (de bronnen met de status worden in het groen weergegeven) Running).

Een andere interessante eigenschap van K9's wordt genoemd Popeye. Alle bronnen worden gecontroleerd op bepaalde criteria van correctheid en de resulterende 'beoordeling' wordt weergegeven met uitleg. U kunt bijvoorbeeld zien dat er niet genoeg probes of limieten zijn, en dat sommige containers onder root kunnen draaien…

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Basis Helm-ondersteuning is beschikbaar. Zo kunt u bijvoorbeeld de releases bekijken die op een cluster zijn geïmplementeerd:

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

criterium

K9s heeft zelfs ingebouwde he — is een eenvoudige HTTP-serverbelastinggenerator, een alternatief voor de bekendere ab (ApacheBench).

Om dit te kunnen doen, moet u poortdoorsturing inschakelen in de pod. Om dit te doen, selecteert u pod en drukt u op Shift + f, gaat u naar het submenu poort-doorsturen met behulp van de alias "pf".

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Nadat u de poort hebt geselecteerd en op Ctrl + b hebt gedrukt, start de benchmark zelf. De resultaten van zijn werk worden opgeslagen in /tmp en zijn later beschikbaar om te bekijken in K9s.

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

Om de benchmarkconfiguratie te wijzigen, moet u een bestand maken $HOME/.k9s/bench-<my_context>.yml (gedefinieerd voor elk cluster).

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

Configuratievoorbeeld:

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

interface

Het uiterlijk van kolommen voor bronnenlijsten wordt gewijzigd door een bestand aan te maken $HOME/.k9s/views.yml. Een 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

Het is waar, er is geen kolom op de etiketten, wat is wat we hebben probleem in het project.

Sorteren op kolommen doet u met behulp van sneltoetsen:

  • Shift + n — op naam;
  • Shift + o - bij knooppunten;
  • Shift + i — door IP;
  • Shift + a — per containerlevensduur;
  • Shift + t — op basis van het aantal herstarts;
  • Shift + r — volgens gereedheidsstatus;
  • Shift + c — op basis van CPU-verbruik;
  • Shift + m — op geheugengebruik.

Als iemand het standaardkleurenschema niet leuk vindt, ondersteunt K9s zelfs skins. Er zijn kant-en-klare voorbeelden (7 stuks) beschikbaar hier. Hier is een voorbeeld van een van deze skins (bij de marine):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

plugins

Tenslotte de plug-ins kunt u de mogelijkheden van K9s uitbreiden. Ik heb er zelf maar één in mijn werk gebruikt - kubectl get all -n $namespace.

Het ziet er zo uit. Een bestand aanmaken $HOME/.k9s/plugin.yml met inhoud als deze:

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 kunt u naar de naamruimte gaan en op "g" drukken om de bijbehorende opdracht uit te voeren:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Onder de plugins bevinden zich bijvoorbeeld integraties met kubectl-jq en een hulpprogramma voor het bekijken van logs ster.

Conclusie

Naar mijn mening zijn de K9's erg handig om mee te werken: je raakt er snel aan gewend om alles wat je nodig hebt te vinden zonder ze te gebruiken. kubectl. Ik vond het prettig om logs te kunnen bekijken en opslaan, bronnen snel te kunnen bewerken, de algehele werksnelheid* te hebben en de Popeye-modus bleek erg handig. Speciaal vermeldenswaardig is de mogelijkheid om plug-ins te maken en de applicatie aan te passen aan uw behoeften.

* Hoewel er een groot volume aan boomstammen was, merkte ik ook dat de K9's langzamer werkten. Op zulke momenten “at” het hulpprogramma 2 cores van de Intel Xeon E312xx op en kon zelfs vastlopen.

Wat ontbreekt er op dit moment? Snelle terugdraaiing naar de vorige versie (niet over RS) zonder naar de directory te gaan. Bovendien vindt de restauratie alleen plaats voor alleen resource: als u een annotatie of label hebt verwijderd, moet u de gehele resource verwijderen en herstellen (dit is waar u naar de map moet gaan). Een ander klein dingetje is dat de datum van dergelijke opgeslagen “backups” ontbreekt.

PS

Lees ook op onze blog:

Bron: www.habr.com