Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

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

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.)

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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.

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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 "?".

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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.

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes
(Ciascuna di queste risorse può essere modificata, cambiata, creata describe.)

Ed ecco la distribuzione con Ingress:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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).

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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):

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

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

È 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):

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

... 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:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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.

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

Panoramica di k9s: un'interfaccia terminale avanzata per 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 ...

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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".

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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.

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes
Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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):

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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:

Panoramica di k9s: un'interfaccia terminale avanzata per Kubernetes

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.

PS

Leggi anche sul nostro blog:

Fonte: habr.com

Aggiungi un commento