Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

K9s fornisce un'interfaccia terminale per interagire con i cluster Kubernetes. L'obiettivo di questo progetto Open Source è facilitare la navigazione agevole delle applicazioni in K8s, il monitoraggio e la gestione. K9s osserva 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. Alla data di scrittura dell'articolo, conta più di 9000 stelle su GitHub e circa 80 collaboratori. Vediamo cosa può fare k9s?

Installazione e avvio

È un'applicazione client (rispetto al cluster Kubernetes) che è più semplice avviare come immagine Docker:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Per alcuni distributori Linux e altri sistemi operativi ci sono anche pacchetti pronti per l'installazione . In generale, per i sistemi Linux è possibile installare il 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 quanto si dice, l'applicazione funziona anche con versioni più vecchie di Kubernetes, come la 1.12.

Non ci sono requisiti specifici per il cluster K8s. Dai feedback, l'applicazione funziona anche con versioni di Kubernetes così vecchie come la 1.12.

L'applicazione si avvia utilizzando la configurazione standard .kube/config — in modo simile a come fa kubectl.

Navigazione

Per impostazione predefinita, si apre una finestra con il namespace standard specificato per il contesto. Cioè, se hai scritto kubectl config set-context --current --namespace=test, si aprirà il namespace test. (Per il cambiamento di contesti/spazi dei nomi, vedi sotto.)

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Passare a modalità comando si realizza premendo «:». Dopo di che, puoi gestire il funzionamento di k9s usando comandi — ad esempio, per visualizzare l'elenco degli StatefulSet (nel namespace corrente) puoi digitare :sts.

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Per alcune altre risorse Kubernetes:

  • :ns — Namespaces;
  • :deploy — Deployments;
  • :ing — Ingress;
  • :svc — Servizi.

Per visualizzare l'elenco completo dei tipi di risorse disponibili per la visualizzazione, usa il comando :aliases.

È utile visualizzare anche l'elenco dei comandi disponibili tramite le combinazioni di tasti nel contesto della finestra corrente: per farlo, basta premere «?».

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Inoltre, in k9s c'è una modalità di ricerca, per accedervi è sufficiente digitare «/». Con questa modalità puoi cercare nel contenuto della finestra attuale. Ad esempio, se hai precedentemente digitato :ns, hai aperto un elenco di spazi dei nomi. Se ce ne sono troppi, per non dover scorrere a lungo verso il basso, basta inserire nella finestra degli spazi dei nomi /mynamespace.

Per cercare per etichette, puoi selezionare tutti i pod nel namespace desiderato e poi 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, comprese le registrazioni, la visualizzazione dei manifest YAML e describe per le risorse — per maggiori dettagli su queste funzionalità, vedere di seguito.

Come appare in generale la sequenza di azioni per la navigazione?

Utilizzando il comando :ctx puoi selezionare il contesto:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Per scegliere il namespace, c'è il comando già menzionato :ns, e poi puoi utilizzare la ricerca per lo spazio desiderato: /test.

Se ora selezioni la risorsa di nostro interesse (ad esempio, lo stesso StatefulSet), appariranno le informazioni corrispondenti: quanti pod sono in esecuzione con brevi dettagli su di essi.

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Potrebbero interessare solo i pod — in questo caso, basta inserire :pod. Nel caso dei ConfigMap (:cm — per l'elenco di queste risorse) puoi scegliere l'oggetto di interesse e premere «u», dopo di che K9s ti dirà chi lo utilizza specificamente (questo CM).

Un'altra comoda funzionalità per visualizzare le risorse è il loro «raggio X» (XRay view). Questo stato è attivato dal comando :xray RESOURCE e… è più facile mostrare come funziona piuttosto che spiegarlo. Ecco un'illustrazione per gli StatefulSets:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes
(Ognuno di questi risorse può essere modificato, cambiato, fatto describe.)

Ecco un Deployment con Ingress:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Gestione delle risorse

Di ogni risorsa si può ottenere informazioni in YAML o nella sua describe premendo le relative combinazioni di tasti («y» e «d» rispettivamente). Ci sono sicuramente più operazioni di base: la loro lista e le combinazioni di tasti sono sempre visibili grazie all'utile «header» nell'interfaccia (si nasconde premendo Ctrl + e).

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Quando si modifica qualsiasi risorsa («e» dopo la sua selezione) si apre un editor di testo, definito nelle variabili d'ambiente (export EDITOR=vim).

Ecco come appare una descrizione dettagliata della risorsa (describe):

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Questo output (o l'output del progetto YAML della risorsa) può essere salvato con la consueta combinazione di tasti Ctrl + s. Dove verrà salvato, sarà noto dal messaggio di K9s:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml salvato con successo!

Dai file di backup creati è possibile anche ripristinare le risorse, eliminando preventivamente le etichette e le annotazioni di sistema. Per fare ciò è necessario andare nella directory con loro (:dir /tmp), dopo di che selezionare il file desiderato e applicarlo applica.

A proposito, è possibile tornare a un ReplicaSet precedente in qualsiasi momento, se ci sono problemi con quello attuale. Per farlo, è necessario selezionare il RS desiderato (:rs per la loro lista):

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

… ed eseguire il rollback utilizzando Ctrl + l. Dobbiamo ricevere una notifica che tutto è andato a buon fine:

k9s/whoami-5cfbdbb469 è stato ripristinato con successo

E per scalare le repliche, basta premere «s» (scale) e scegliere il numero di istanze desiderato:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

È possibile accedere a qualsiasi contenitore tramite shell: per farlo, passare al pod desiderato, premere «s» (shell) e scegliere il contenitore.

Altre funzionalità

Certo, è supportata anche la visualizzazione dei log («l» per la risorsa selezionata). E per visualizzare i nuovi log, non è necessario premere Enter continuamente: basta contrassegnare («m»), dopodiché si possono monitorare solo i nuovi messaggi.

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

In questa stessa finestra è possibile selezionare un 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 tutta la durata del pod.

La modalità di lavoro speciale Pulse (comando :pulse) mostra informazioni generali sul cluster Kubernetes:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

In esso è possibile vedere la quantità di risorse e il loro stato (quelle con stato mostrato in verde) Esecuzione).

Un'altra funzione interessante di K9s si chiama Popeye. Essa verifica tutte le risorse rispetto a determinati criteri di correttezza e restituisce un 'rating' con spiegazioni. Ad esempio, è possibile vedere che mancano spazi o limiti, e alcuni container possono essere eseguiti come root...

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

C'è un supporto di base per Helm. Ad esempio, è possibile controllare i rilasci distribuiti nel cluster:

:helm all # tutti
:helm $namespace # in uno spazio dei nomi specifico

Benchmark

In K9s hanno integrato anche hey — è un semplice generatore di carico per server HTTP, un'alternativa al più noto ab (ApacheBench).

Per attivarlo, è necessaria l'attivazione del port-forward nel pod. Per fare ciò, selezioniamo il pod e premiamo Shift + f, quindi accediamo al sottomenu port-forward usando l'alias 'pf'.

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Dopo aver selezionato la porta e premuto Ctrl + b, il benchmark partirà. I risultati del suo lavoro vengono salvati in /tmp e sono disponibili per la consultazione successiva 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-.yml (definito per ogni cluster).

NB: È importante che l'estensione di tutti i file YAML nella directory .k9s sia proprio .yml (.yaml non funziona correttamente).

Esempio di configurazione:

benchmarks:
  defaults:
    # Numero di thread
    concurrency: 2
    # Numero di richieste
    requests: 1000
  containers:
    # Impostazioni per il contenitore del benchmark
    # Il contenitore è definito come 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:
    # È possibile eseguire benchmark su servizi di tipo NodePort e LoadBalancer
    # Sintassi: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Interfaccia

La visualizzazione delle colonne per le liste delle risorse è modificata creando un file $HOME/.k9s/views.yml. 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

Tuttavia, manca la colonna per le etichette, su cui esiste un problema nel progetto.

L'ordinamento per colonne viene effettuato mediante combinazioni di tasti:

  • Shift + n — per nome;
  • Shift + o — per nodi;
  • Shift + i — per IP;
  • Shift + a — per tempo di vita del contenitore;
  • Shift + t — per numero di riavvii;
  • Shift + r — per stato di prontezza;
  • Shift + c — per utilizzo della CPU;
  • Shift + m — per l'uso della memoria.

Se a qualcuno non piace il design predefinito, K9s supporta anche skin. Sono disponibili esempi pronti (7 in totale) qui. Ecco un esempio di una di queste skin (in the navy):

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Plugin

Infine, plugin che espandono le possibilità di K9s. Personalmente ho utilizzato solo una di esse — kubectl get all -n $namespace.

Appare in questo modo. Creiamo un file $HOME/.k9s/plugin.yml con il seguente contenuto:

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 passare allo spazio dei nomi e premere «g» per eseguire il comando corrispondente:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Tra i plugin ci sono, ad esempio, integrazioni con kubectl-jq e l'utility per visualizzare i log stern.

Conclusione

A mio avviso, K9s si è rivelata molto comoda da usare: ci si abitua rapidamente a cercare tutto senza utilizzare kubectl. Mi ha colpito la visualizzazione dei log e il loro salvataggio, l'editing rapido delle risorse, la velocità complessiva*, si è rivelato utile il comando Popeye. Merita una menzione a parte la possibilità di creare plugin e personalizzare l'applicazione secondo le proprie esigenze.

* Anche se con un grande volume di log ho notato un funzionamento lento di K9s. In quei momenti, l'utility consumava 2 core di Intel Xeon E312xx e poteva persino bloccarsi.

Di cosa abbiamo bisogno al momento? Di un ripristino veloce alla versione precedente (non parlo di RS) senza dover entrare nella directory. Inoltre, il ripristino avviene solo per tutto il risorsa: se hai eliminato un'annotazione o un'etichetta, dovrai eliminare e ripristinare l'intera risorsa (qui sarà necessario entrare nella directory). Un altro piccolo dettaglio: manca la data dei backup salvati.

P.S.

Leggete anche nel nostro blog:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster