Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes
K9s fornisce un'interfaccia utente terminale per l'interazione con i cluster Kubernetes. L'obiettivo di questo progetto Open Source è semplificare la navigazione, il monitoraggio e la gestione delle applicazioni nei K8. K9s monitora costantemente i cambiamenti in Kubernetes e offre comandi rapidi per lavorare con le risorse monitorate.
Il progetto è scritto in Go ed esiste da oltre un anno e mezzo: il primo commit è stato effettuato il 1 febbraio 2019. Al momento in cui scrivo, ci sono più di 9000 stelle attive GitHub e circa 80 collaboratori. Vediamo cosa possono fare i k9?
Installazione e lancio
Questa è un'applicazione client (in relazione al cluster Kubernetes) più semplice da eseguire come immagine Docker:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
Per alcune distribuzioni Linux e altri sistemi operativi, ci sono anche pronti per l'installazione пакеты. In generale, per i sistemi Linux, puoi installare un file binario:
Non ci sono requisiti specifici per il cluster K8s stesso. A giudicare dalle recensioni, l'applicazione funziona anche con versioni precedenti di Kubernetes come la 1.12.
L'applicazione viene avviata utilizzando la configurazione standard .kube/config - simile a come funziona kubectl.
Navigazione
Per impostazione predefinita, viene aperta una finestra con lo spazio dei nomi predefinito specificato per il contesto. Cioè, se hai scritto kubectl config set-context --current --namespace=test, si aprirà lo spazio dei nomi test. (Vedi sotto per modificare contesti/spazi dei nomi.)
Vai a modalità di comando si fa premendo ":". Successivamente, puoi controllare il funzionamento di k9s utilizzando i comandi, ad esempio per visualizzare l'elenco di StatefulSet (nello spazio dei nomi corrente), puoi inserire :sts.
Per alcune altre risorse Kubernetes:
:ns — spazi dei nomi;
:deploy — Distribuzioni;
:ing — Ingressi;
:svc - Servizi.
Per visualizzare un elenco completo dei tipi di risorse disponibili per la visualizzazione, è disponibile un comando :aliases.
Comodo è anche visualizzare l'elenco dei comandi disponibili tramite combinazione di tasti di scelta rapida all'interno della finestra corrente: per farlo basta cliccare su "?".
Anche in k9s c'è modalità di ricerca, per andare a cui è sufficiente inserire "/". Con esso, viene eseguita una ricerca sul contenuto della "finestra" corrente. Diciamo se sei entrato in precedenza :ns, hai un elenco di spazi dei nomi aperti. Se ce ne sono troppi, per non scorrere a lungo verso il basso, è sufficiente entrare nella finestra con gli spazi dei nomi /mynamespace.
Per cercare per etichette, puoi selezionare tutti i pod nello spazio dei nomi desiderato, quindi inserire, ad esempio, / -l app=whoami. Otterremo un elenco di pod con questa etichetta:
La ricerca funziona in tutti i tipi di finestre, inclusi i log, la visualizzazione di manifest YAML e describe per le risorse - vedi sotto per maggiori dettagli su queste funzionalità.
Come si presenta il flusso di navigazione complessivo?
Con il comando :ctx puoi scegliere un contesto:
Per selezionare uno spazio dei nomi, c'è il comando già citato :ns, quindi puoi utilizzare la ricerca per lo spazio desiderato: /test.
Se ora selezioniamo la risorsa che ci interessa (ad esempio, lo stesso StatefulSet), appariranno le informazioni corrispondenti per essa: quanti pod sono in esecuzione con brevi informazioni su di essi.
Solo i pod possono interessare, quindi è sufficiente entrare :pod. Nel caso di ConfigMap (:cm - per l'elenco di queste risorse), puoi selezionare l'oggetto di interesse e cliccare su "u", dopodiché K9s ti dirà chi lo utilizza nello specifico (questo CM).
Un'altra caratteristica utile per visualizzare le risorse è il loro "x-ray" (vista a raggi X). Questa modalità è chiamata dal comando :xray RESOURCE e ... è più facile mostrare come funziona che spiegare. Ecco un'illustrazione per StatefulSet:
(Ciascuna di queste risorse può essere modificata, cambiata, creata describe.)
Ed ecco la distribuzione con Ingress:
Lavorare con le risorse
Puoi ottenere informazioni su ogni risorsa in YAML o nel suo describe premendo le scorciatoie da tastiera corrispondenti ("y" e "d", rispettivamente). Naturalmente, ci sono anche operazioni più basilari: il loro elenco e le scorciatoie da tastiera sono sempre visibili grazie a una comoda "intestazione" nell'interfaccia (nascosta premendo Ctrl + e).
Quando si modifica una risorsa ("e" dopo la sua selezione), viene aperto l'editor di testo definito nelle variabili di ambiente (export EDITOR=vim).
Ed ecco come appare la descrizione dettagliata della risorsa (describe):
Questo output (o l'output della visualizzazione del manifest della risorsa YAML) può essere salvato utilizzando la familiare scorciatoia da tastiera Ctrl + s. Dove verrà salvato sarà noto dal messaggio di K9:
È inoltre possibile ripristinare le risorse dai file di backup creati, dopo aver rimosso etichette e annotazioni di sistema. Per fare ciò, devi andare nella directory con loro (:dir /tmp), quindi selezionare il file desiderato e applicare apply.
A proposito, in qualsiasi momento puoi tornare al ReplicaSet precedente se ci sono problemi con quello attuale. Per fare ciò, selezionare la RS desiderata (:rs per la loro lista):
... e rollback con Ctrl + l. Dovremmo ricevere una notifica che tutto è andato bene:
k9s/whoami-5cfbdbb469 successfully rolled back
E per scalare le repliche basta cliccare sulla "s" (scala) e selezionare il numero di istanze desiderato:
Puoi entrare in uno qualsiasi dei contenitori utilizzando la shell: per farlo, vai nel pod desiderato, fai clic su "s" (shell) e seleziona il contenitore.
Altre caratteristiche
Naturalmente, è supportata anche la visualizzazione dei registri ("l" per la risorsa selezionata). E per guardare i nuovi registri, non è necessario premere costantemente Invio: è sufficiente contrassegnare ("m"), quindi tenere traccia solo dei nuovi messaggi.
Sempre nella stessa finestra è possibile selezionare l'intervallo di tempo per l'output dei log:
tasto "1" - per 1 minuto;
"2" - 5 minuti;
"3" - 15 minuti;
"4" - 30 minuti;
"5" - 1 ora;
"0" - per l'intera durata del pod.
Modo operativo speciale Impulso (command :pulse) mostra informazioni generali sul cluster Kubernetes:
In esso puoi vedere il numero di risorse e il loro stato (il verde mostra quelle che hanno lo stato Running).
Si chiama un'altra caratteristica interessante di K9 Popeye. Controlla tutte le risorse per determinati criteri di correttezza e visualizza la "valutazione" risultante con spiegazioni. Ad esempio, puoi vedere che non ci sono abbastanza campioni o limiti e alcuni contenitori possono essere eseguiti come root ...
C'è il supporto di base del timone. Ad esempio, ecco come puoi vedere le versioni distribuite nel cluster:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Segno di riferimento
Anche integrato nei K9 ehi è un semplice generatore di carico del server HTTP, alternativo al più noto ab (ApacheBench).
Per abilitarlo, devi abilitare il port forward nel pod. Per fare ciò, seleziona il pod e premi Shift + f, vai al sottomenu port-forward usando l'alias "pf".
Dopo aver selezionato la porta e aver premuto Ctrl + b, verrà avviato il benchmark stesso. I risultati del suo lavoro sono conservati in /tmp e sono disponibili per una successiva visualizzazione in K9s.
Per modificare la configurazione del benchmark, è necessario creare un file $HOME/.k9s/bench-<my_context>.yml (determinato per ciascun cluster).
NB: è importante che l'estensione di tutti i file YAML in una directory .k9s era esattamente .yml (.yaml non funziona correttamente).
Esempio di configurazione:
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
Interfaccia
L'aspetto delle colonne per gli elenchi di risorse viene modificato creando un file $HOME/.k9s/views.yml. Un esempio del suo contenuto:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
È vero, non c'è abbastanza colonna per le etichette, per le quali c'è questione nel progetto.
L'ordinamento per colonne viene eseguito tramite scorciatoie da tastiera:
Maiusc + n - per nome;
Maiusc + o - per nodi;
Maiusc + i - per IP;
Maiusc + a - per la durata del contenitore;
Maiusc + t - per il numero di riavvii;
Maiusc + r - per stato di prontezza;
Maiusc + c - per consumo della CPU;
Maiusc + m - per consumo di memoria.
Se a qualcuno non piace la combinazione di colori predefinita, K9s supporta anche pelli. Sono disponibili esempi già pronti (7 pezzi). qui. Ecco un esempio di una di queste skin (nella marina):
plugins
Infine, l' plugins consentono di espandere le capacità dei K9. Io stesso ne ho usato solo uno nel mio lavoro - kubectl get all -n $namespace.
Sembra così. Crea un file $HOME/.k9s/plugin.yml con contenuti come questo:
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"
Ora puoi andare nello spazio dei nomi e premere "g" per eseguire con il comando corrispondente:
Tra i plugin ci sono, ad esempio, le integrazioni con kubectl-jq e un'utility per la visualizzazione dei log poppa.
conclusione
Per i miei gusti, K9 si è rivelato molto comodo con cui lavorare: puoi abituarti rapidamente a cercare tutto ciò di cui hai bisogno senza usarlo. kubectl. Mi ha fatto piacere la visualizzazione dei log e il loro salvataggio, la rapida modifica delle risorse, la velocità di lavoro in generale *, la modalità Popeye si è rivelata utile. Una menzione speciale è la possibilità di creare plug-in e modificare l'applicazione in base alle proprie esigenze.
* Sebbene, con un grande volume di registri, ho notato anche il lento funzionamento dei K9. In tali momenti, l'utilità "mangiava" 2 core dell'Intel Xeon E312xx e poteva persino bloccarsi.
Cosa manca al momento? Rollback rapido alla versione precedente (non stiamo parlando di RS) senza andare alla directory. Inoltre, il recupero avviene solo per solo risorsa: se elimini un'annotazione o un'etichetta, dovrai eliminare e ripristinare l'intera risorsa (è qui che devi andare nella directory). Un'altra sciocchezza: non c'è abbastanza data per tali "backup" salvati.