ProHoster > blog > administratie > 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:
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.)
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.
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 "?".
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:
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:
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.
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:
(Elk van deze bronnen kan worden bewerkt, veranderd, gemaakt describe.)
En hier is Implementatie met Ingress:
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).
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):
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:
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):
... 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:
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.
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:
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 ...
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.
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.
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):
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:
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".