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 gemakkelijk te maken om applicaties in K8s te navigeren, te monitoren en te beheren. K9s monitort voortdurend wijzigingen in Kubernetes en biedt snelle opdrachten om met bewaakte bronnen te werken.

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

Installatie en lancering

Dit is een clienttoepassing (met betrekking tot het Kubernetes-cluster) die het gemakkelijkst 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 пакеты. Over het algemeen kunt u voor Linux-systemen een binair 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. Afgaande op de reviews werkt de applicatie ook met oudere versies van Kubernetes zoals 1.12.

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

Navigatie

Er wordt standaard een venster geopend met de standaardnaamruimte die voor de context is opgegeven. Dat wil zeggen, als je schreef 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

Ga naar commando modus doet u door op ":" te drukken. Daarna kunt u de werking van k9s besturen met behulp van opdrachten - om bijvoorbeeld de lijst met StatefulSets te bekijken (in de huidige naamruimte), kunt u invoeren :sts.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Voor enkele andere Kubernetes-resources:

  • :ns — naamruimten;
  • :deploy — implementaties;
  • :ing — binnendringen;
  • :svc - Diensten.

Er is een opdracht om een ​​volledige lijst met beschikbare brontypen weer te geven :aliases.

Het is ook handig om de lijst met commando's te bekijken die beschikbaar zijn via sneltoetscombinaties in het huidige venster: om dit te doen, klikt u gewoon op "?".

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Ook in k9s is er zoek modus, om te gaan waar het voldoende is om "/" in te voeren. Hiermee wordt gezocht naar de inhoud van het huidige "venster". Stel dat u eerder bent binnengekomen :ns, hebt u een lijst met naamruimten geopend. Als er te veel zijn, is het voldoende om het venster met naamruimten in te voeren om niet lang naar beneden te 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

De zoekopdracht werkt in alle soorten vensters, inclusief logboeken, het bekijken van YAML-manifesten en describe voor bronnen - zie hieronder voor meer informatie over deze functies.

Hoe ziet de algehele navigatiestroom eruit?

Met de opdracht :ctx je kunt een context kiezen:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Om een ​​naamruimte te selecteren, is er het reeds genoemde commando :ns, en dan kunt u zoeken naar de gewenste ruimte: /test.

Als we nu de bron selecteren waarin we geïnteresseerd zijn (bijvoorbeeld dezelfde StatefulSet), verschijnt de bijbehorende informatie ervoor: hoeveel pods worden uitgevoerd met korte informatie daarover.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Alleen pods kunnen interessant zijn - dan is het voldoende om binnen te komen :pod. In het geval van ConfigMaps (:cm - voor de lijst van deze bronnen), kunt u het object van interesse selecteren en op "u" klikken, waarna K9s u zal vertellen wie het specifiek gebruikt (deze CM).

Een andere handige functie voor het bekijken van bronnen is hun "röntgenfoto" (röntgenweergave). Deze modus wordt aangeroepen door het commando :xray RESOURCE en ... het is gemakkelijker 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, veranderd, gemaakt describe.)

En hier is Implementatie met Ingress:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Werken met middelen

U kunt informatie krijgen over elke bron in YAML of zijn describe door op de corresponderende sneltoetsen (“y” en “d”, respectievelijk) te drukken. Natuurlijk zijn er nog meer basisbewerkingen: hun lijst en sneltoetsen zijn altijd zichtbaar dankzij een handige "header" 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 de selectie), wordt de teksteditor geopend die is gedefinieerd in de omgevingsvariabelen (export EDITOR=vim).

En zo ziet de gedetailleerde beschrijving van de bron eruit (describe):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

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

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

U kunt ook bronnen herstellen van de gemaakte back-upbestanden, na het verwijderen van systeemlabels en annotaties. Om dit te doen, moet je met hen naar de map gaan (:dir /tmp), selecteer vervolgens het gewenste bestand en solliciteer apply.

Overigens kunt u op elk moment teruggaan naar de vorige ReplicaSet als er problemen zijn met de huidige. Selecteer hiervoor de gewenste RS (:rs voor hun lijst):

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

... en terugdraaien met Ctrl + l. We zouden een melding moeten krijgen dat alles goed is gegaan:

k9s/whoami-5cfbdbb469 successfully rolled back

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

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

U kunt elk van de containers invoeren met behulp van de shell: ga hiervoor naar de gewenste pod, klik op "s" (shell) en selecteer de container.

Andere functies

Natuurlijk wordt het bekijken van logs ook ondersteund ("l" voor de geselecteerde bron). En om nieuwe logboeken te bekijken, hoeft u niet constant op Enter te drukken: het volstaat om ("m") te markeren en dan alleen nieuwe berichten bij te houden.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

In hetzelfde venster kunt u ook het tijdsbereik selecteren voor de uitvoer van logboeken:

  • toets "1" - gedurende 1 minuut;
  • "2 minuten;
  • "3 minuten;
  • "4 minuten;
  • "5" - 1 uur;
  • "0" - voor de gehele levensduur van de pod.

Speciale bedrijfsmodus Puls (commando :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 (groen geeft de bronnen weer die de status hebben Running).

Een andere coole functie van K9s heet Popeye. Het controleert alle bronnen op bepaalde criteria van juistheid en geeft de resulterende "beoordeling" met uitleg weer. U kunt bijvoorbeeld zien dat er niet genoeg voorbeelden of limieten zijn en dat sommige containers als root kunnen worden uitgevoerd ...

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Er is basisondersteuning voor Helm. Zo kunt u bijvoorbeeld de releases zien die in het cluster zijn geïmplementeerd:

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

criterium

Zelfs ingebouwd in K9's he is een eenvoudige HTTP server load generator, een alternatief voor de bekendere ab (ApacheBench).

Om dit in te schakelen, moet u port-forward inschakelen in de pod. Selecteer hiervoor de pod en druk op Shift + f, ga naar het port-forward submenu met de "pf" alias.

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

Na het selecteren van de poort en het indrukken van Ctrl + b, zal de benchmark zelf starten. De resultaten van zijn werk worden erin opgeslagen /tmp en zijn beschikbaar om later te bekijken in K9s.

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

Om de configuratie van de benchmark te wijzigen, moet u een bestand aanmaken $HOME/.k9s/bench-<my_context>.yml (bepaald per cluster).

NB: Het is belangrijk dat de extensie van alle YAML-bestanden in een directory staat .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 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

Toegegeven, er is niet genoeg kolom voor labels, waarvoor die er is probleem in het project.

Sorteren op kolommen wordt uitgevoerd met sneltoetsen:

  • Verschuiving + n - op naam;
  • Shift + o - op knooppunten;
  • Shift + i - via IP;
  • Shift + a - door de levensduur van de container;
  • Shift + t - op basis van het aantal herstarts;
  • Shift + r - op gereedheidsstatus;
  • Shift + c - op CPU-verbruik;
  • Shift + m - op geheugenverbruik.

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

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

plugins

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

Het ziet er zo uit. Maak een bestand aan $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 het bijbehorende commando uit te voeren:

Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes

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

Conclusie

Naar mijn smaak bleek K9's erg handig om mee te werken: je kunt snel wennen aan het zoeken naar alles wat je nodig hebt zonder het te gebruiken. kubectl. Ik was tevreden met de weergave van de logboeken en hun opslag, snelle bewerking van bronnen, de snelheid van werken in het algemeen *, de Popeye-modus bleek nuttig te zijn. Een speciale vermelding is de mogelijkheid om plug-ins te maken en de applicatie aan te passen aan uw behoeften.

* Hoewel ik, met een groot aantal logboeken, ook de trage werking van K9's opmerkte. Op zulke momenten "at" het hulpprogramma 2 cores van de Intel Xeon E312xx op en kon zelfs vastlopen.

Wat ontbreekt er op dit moment? Snel terugdraaien naar de vorige versie (we hebben het niet over RS) zonder naar de directory te gaan. Bovendien vindt herstel alleen plaats voor alleen bron: als u een annotatie of label verwijdert, moet u de volledige bron verwijderen en herstellen (hier moet u naar de directory gaan). Nog een kleinigheid - er is niet genoeg datum voor dergelijke opgeslagen "back-ups".

PS

Lees ook op onze blog:

Bron: www.habr.com

Voeg een reactie