Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

K9s fornisce un'interfaccia utente del terminale per interagire con i cluster Kubernetes. L'obiettivo di questo progetto Open Source è semplificare la navigazione tra le applicazioni in K8s, il loro monitoraggio e gestione. K9s tiene costantemente d'occhio i cambiamenti in Kubernetes e propone comandi rapidi per lavorare con le risorse monitorate.

Il progetto è scritto in Go e esiste da oltre un anno e mezzo: il primo commit è stato effettuato il 1 febbraio 2019. Al momento della scrittura di questo articolo, conta oltre 9000 stelle su GitHub e circa 80 contributori. Cosa può fare k9s?

Installazione e avvio

Questa è un'applicazione client (rispetto al cluster Kubernetes) che può essere avviata più facilmente 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 installatori pronti all'uso sono. 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 giudicare dai feedback, l'applicazione funziona anche con versioni più vecchie di Kubernetes, come la 1.12.

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

Navigazione

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

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Navigare in modalità comandi avviene premendo il tasto «:». Dopo di che, puoi gestire il funzionamento di k9s tramite comandi: ad esempio, per visualizzare l'elenco degli StatefulSets (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 — Ingresses;
  • :svc — Services.

Per ottenere un elenco completo dei tipi di risorse disponibili per la visualizzazione, c'è il comando :aliases.

È comodo visualizzare anche l'elenco dei comandi disponibili tramite combinazioni di tasti rapidi all'interno della finestra corrente: basta premere il tasto «?».

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Inoltre, k9s ha una modalità di ricerca, per passare alla quale è sufficiente digitare «/». Questo consente di cercare nel contenuto della finestra corrente. Supponiamo che tu abbia precedentemente digitato :ns, ti si aprirà l'elenco degli spazi dei nomi. Se ce ne sono troppi, per non dover scorrere a lungo verso il basso, è sufficiente digitare nella finestra con i namespaces /mynamespace.

Per cercare tra i label, puoi selezionare tutti i pod nell'namespace desiderato, dopodiché puoi inserire, ad esempio, / -l app=whoami. Otterremo un elenco di pod con questo label:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

La ricerca funziona in tutte le tipologie di finestre, comprese le registrazioni, la visualizzazione dei manifesti YAML e describe per le risorse — maggiori dettagli su queste funzionalità sono disponibili qui sotto.

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 selezionare l'namespace c'è già il comando menzionato :ns, e poi puoi utilizzare la ricerca per l'namespace desiderato: /test.

Se ora selezioni la risorsa di interesse (ad esempio, il solito StatefulSet), apparirà l'informazione corrispondente: 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 — allora basta inserire :pod. Nel caso dei ConfigMap (:cm — per l'elenco di queste risorse) puoi selezionare l'oggetto di interesse e premere "u", dopo di che K9s suggerirà chi lo utilizza specificamente (questo CM).

Un'altra comoda funzione per visualizzare le risorse è il loro "XRay" (vista XRay). Questa modalità viene attivata con il comando :xray RESOURCE e... è più semplice mostrare come funziona piuttosto che spiegarlo. Ecco un'illustrazione per gli StatefulSets:

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

Ecco un Deployment con Ingress:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Lavorare con le risorse

Su ogni risorsa puoi ottenere informazioni in YAML o i suoi describe premendo le corrispondenti combinazioni di tasti ("y" e "d" rispettivamente). Le operazioni di base, ovviamente, sono ancora di più: il loro elenco e le combinazioni di tasti sono sempre in vista grazie alla comoda "testata" nell'interfaccia (si nasconde premendo Ctrl + e).

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Quando modifichi qualsiasi risorsa ("e" dopo la sua selezione) si apre un editor di testo definito nelle variabili ambientali (export EDITOR=vim).

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

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Questo output (o l'output di visualizzazione del manifesto YAML della risorsa) può essere salvato utilizzando la nota combinazione di tasti Ctrl + s. Dove verrà salvato, sarà indicato dal messaggio di K9s:

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

Dai file di backup creati puoi anche ripristinare risorse, previa rimozione delle etichette e annotazioni di sistema. Per farlo, sarà necessario accedere alla directory contenente questi file (:dir /tmp), dopodiché selezionare il file desiderato e applicarlo apply.

A proposito, in qualsiasi momento è possibile tornare a un ReplicaSet precedente 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

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

k9s/whoami-5cfbdbb469 è stato ripristinato con successo

Per scalare le repliche, basta premere «s» (scale) e selezionare il numero desiderato di istanze:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

In qualsiasi contenitore è possibile accedere con la shell: per farlo, vai al pod desiderato, premi «s» (shell) e seleziona il contenitore.

Altre possibilità

Certo, è supportata anche la visualizzazione dei log («l» per la risorsa selezionata). E per visualizzare i nuovi log, non è necessario premere continuamente Invio: basta fare un mark («m») e poi monitorare solo i nuovi messaggi.

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

In questa stessa finestra è possibile selezionare l'intervallo di tempo per visualizzare i log:

  • il 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 funzionamento speciale Pulse (comando :pulse) mostra informazioni generali sul cluster Kubernetes:

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

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

Un'altra interessante funzione di K9s si chiama Popeye. Controlla tutte le risorse in base a specifici criteri di correttezza e restituisce un «rating» con spiegazioni. Ad esempio, puoi vedere che mancano i limiti o le richieste, o che un contenitore potrebbe essere eseguito come root…

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

C'è un supporto base per Helm. Ad esempio, puoi vedere i rilasci distribuiti nel cluster:

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

Benchmark

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

Per attivarlo, sarà necessario attivare il port-forward nel pod. Per farlo, scegli il pod e premi Shift + f, quindi vai nel 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, verrà avviato il benchmark. I risultati della sua esecuzione vengono salvati in /tmp e sono disponibili per la visualizzazione 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 il 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:

benchmark:
  predefiniti:
    # Numero di thread
    concorrenza: 2
    # Numero di richieste
    richieste: 1000
  contenitori:
    # Impostazioni per il contenitore del benchmark
    # Il contenitore è definito come namespace/pod-name:container-name
    default/nginx:nginx:
      concorrenza: 2
      richieste: 10000
      http:
        percorso: /
        metodo: POST
        corpo:
          {"foo":"bar"}
        intestazione:
          Accetta:
            - text/html
          Content-Type:
            - application/json
 servizi:
    # È possibile eseguire benchmark su servizi del tipo NodePort e LoadBalancer
    # Sintassi: namespace/service-name
    default/nginx:
      concorrenza: 5
      richieste: 500
      http:
        metodo: GET
        percorso: /auth
      auth:
        utente: flant
        password: s3cr3tp455w0rd

Document

Il tipo di colonne per le liste delle risorse viene modificato creando un file $HOME/.k9s/views.yml. Ecco un esempio del suo contenuto:

k9s:
 viste:
   v1/pods:
     colonne:
       - ETÀ
       - NAMESPACE
       - NOME
       - IP
       - NODO
       - STATO
       - PRONTO
   v1/services:
     colonne:
       - ETÀ
       - NAMESPACE
       - NOME
       - TIPO
       - CLUSTER-IP

Certo, manca una colonna per le etichette, su cui c'è un problema nel progetto.

L'ordinamento per colonne avviene tramite 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 consumo di CPU;
  • Shift + m — per consumo di memoria.

Se a qualcuno non piace il tema di default, K9s supporta anche skin.Esempi pronti (7 in totale) sono disponibili qui. Ecco un esempio di uno di questi skin (in the navy):

Panoramica di k9s — un'interfaccia terminale avanzata per Kubernetes

Plugin

Infine, plugin permettono di estendere le funzionalità di K9s. Io stesso ho usato solo uno di essi nella mia attività — kubectl get all -n $namespace.

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

plugin:
 get-all:
   scorciatoia: g
   conferma: false
   descrizione: ottieni tutto
   ambiti:
   - all
   comando: sh
   background: false
   argomenti:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

Ora si può passare nello 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 lo strumento per visualizzare i log stern..

Conclusione

A mio avviso, K9s si è rivelato molto comodo da utilizzare: ci si abitua rapidamente a cercare tutto il necessario senza dover utilizzare kubectl. Mi ha colpito 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. Vale la pena menzionare le possibilità di creare plugin e adattare l'applicazione alle proprie esigenze.

* Anche se con un grande volume di log sento che K9s lavora lentamente. In questi momenti l'utilità "mangiava" 2 core su Intel Xeon E312xx e poteva persino bloccarsi.

Cosa manca al momento? Un rapido rollback alla versione precedente (non si parla di RS) senza dover accedere alla 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 accedere alla directory). Un'altra piccola cosa — manca la data di questi "backup" salvati.

P.S.

Leggi 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