K9s: La CLI per Kubernetes che Dovresti Gia Usare

K9s e la CLI interattiva per Kubernetes che rende kubectl obsoleto per l'uso quotidiano. Setup, comandi, e workflow che ti cambiano la giornata.

Uso kubectl da anni. Lo conosco bene, so i comandi a memoria, ho alias per tutto. E poi ho scoperto k9s, e mi sono chiesto come ho fatto senza.

K9s e una TUI (text user interface) per Kubernetes. Gira nel terminale, ma ha un'interfaccia interattiva con navigazione, filtri, azioni rapide. Immagina un mix tra kubectl e Vim: potente, veloce, e una volta che impari le scorciatoie non torni indietro.

Perche Non Basta kubectl

kubectl e fantastico per scripting e automazione. Ma per uso interattivo ha dei limiti:

  • Devi digitare comandi completi ogni volta
  • Per vedere i log devi aprire un'altra finestra
  • Passare tra risorse diverse richiede comandi separati
  • Nessun auto-refresh — devi rilanciare per vedere cambiamenti

K9s risolve tutti questi problemi. Hai una vista live del cluster, navighi con i tasti, fai azioni con shortcut. E kubectl con steroidi per l'uso quotidiano.

Installazione

# macOS
brew install derailed/k9s/k9s

# Linux (via webi)
curl -sS https://webi.sh/k9s | sh

# Linux (da binario)
# Scarica da https://github.com/derailed/k9s/releases

# Arch
pacman -S k9s

# Windows (via scoop)
scoop install k9s

Lancia con:

k9s

Usa automaticamente il contesto corrente del tuo kubeconfig. Per cambiare contesto o namespace, lo fai direttamente da dentro k9s.

I Comandi Base

K9s e pensato per navigazione veloce. Questi sono i comandi che uso di piu.

Navigazione Risorse

Digita : seguito dal tipo di risorsa:

  • :pods o :po — lista pod
  • :deploy — deployments
  • :svc — services
  • :ns — namespaces
  • :no — nodes
  • :sec — secrets
  • :cm — configmaps

Puoi usare le abbreviazioni standard di Kubernetes. Se conosci kubectl, conosci gia i nomi.

Filtri

Una volta in una vista, / apre il filtro. Scrivi qualcosa e vedi solo le risorse che matchano.

/nginx     # mostra solo risorse con "nginx" nel nome
/app=web   # filtra per label
/-n prod   # solo namespace prod (se sei in All Namespaces)

Il filtro e live — i risultati si aggiornano mentre scrivi.

Azioni sui Pod

Con un pod selezionato:

  • l — log (live streaming)
  • s — shell nel container
  • d — describe
  • y — mostra YAML
  • e — edit
  • ctrl-d — delete
  • p — port-forward

Queste scorciatoie funzionano su qualsiasi risorsa, dove applicabili.

Navigazione Generale

  • Enter — entra nella risorsa / mostra dettagli
  • Esc — torna indietro
  • ctrl-a — mostra tutti i namespace
  • :q — esci
  • ? — help

I Log: Dove K9s Brilla

La gestione dei log e dove k9s mi ha conquistato.

Seleziona un pod, premi l. I log appaiono in streaming, come kubectl logs -f ma meglio:

  • Scroll con le frecce o Page Up/Down
  • / per cercare nel log
  • w per wrap delle linee lunghe
  • t per toggle timestamp
  • 0 per tornare alla fine (live)
  • Esc per uscire

Se il pod ha piu container, k9s ti chiede quale vuoi vedere. Puoi anche premere a per vedere tutti i container insieme, con prefisso per distinguerli.

Per log precedenti (container riavviato), premi p invece di l.

Port Forward Semplificato

Quante volte hai scritto kubectl port-forward svc/my-service 8080:80? Con k9s:

  1. Vai su :svc
  2. Seleziona il service
  3. Premi shift-f
  4. Scegli le porte

Il port-forward resta attivo in background. Vedi tutti i forward attivi con :pf.

Cambiare Contesto e Namespace

:ctx mostra tutti i contesti nel tuo kubeconfig. Seleziona e premi Enter per switchare.

:ns mostra i namespace. Seleziona per cambiare. Oppure usa ctrl-a per vedere tutte le risorse in tutti i namespace.

Personalizzazione

K9s e configurabile via file YAML. La config sta in ~/.config/k9s/ (o ~/.k9s su alcune piattaforme).

Skin Personalizzata

Puoi cambiare colori modificando ~/.config/k9s/skins/myskin.yaml:

k9s:
  body:
    fgColor: white
    bgColor: black
  frame:
    border:
      fgColor: dodgerblue

Attiva con:

# ~/.config/k9s/config.yaml
k9s:
  ui:
    skin: myskin

Alias Personalizzati

Definisci shortcut per risorse custom:

# ~/.config/k9s/aliases.yaml
aliases:
  pp: v1/pods
  dp: apps/v1/deployments
  ing: networking.k8s.io/v1/ingresses

Ora :pp mostra i pod, :dp i deployment, etc.

Hotkeys

Puoi definire azioni custom:

# ~/.config/k9s/hotkeys.yaml
hotKeys:
  shift-r:
    shortCut: Shift-R
    description: Rollout restart
    command: kubectl rollout restart deploy $NAME -n $NAMESPACE

Questo aggiunge un'azione che fa rollout restart del deployment selezionato.

Plugin

K9s supporta plugin per azioni custom. Crea file in ~/.config/k9s/plugins/:

# ~/.config/k9s/plugins/stern.yaml
plugins:
  stern:
    shortCut: Shift-L
    description: Stern logs
    scopes:
      - pods
    command: stern
    args:
      - $NAME
      - -n
      - $NAMESPACE

Ora Shift-L su un pod lancia stern per i log. Puoi integrare qualsiasi tool CLI nel tuo workflow k9s.

Workflow Quotidiano

Ecco come uso k9s tipicamente.

Inizio giornata: Lancio k9s, :ctx per verificare di essere nel cluster giusto, :pods con ctrl-a per una vista generale. Qualche pod in rosso? Indago.

Debug di un problema: :pods, filtro per l'app problematica, l per i log. Se serve, s per una shell e indago direttamente nel container.

Deploy nuovo: Faccio apply da terminale, poi in k9s guardo i pod nuovi che spawnano. Vedo lo stato in real-time senza fare kubectl get pods -w.

Port-forward per test: :svc, seleziono, shift-f. Testo localmente. Quando finisco, :pf e cancello il forward.

Troubleshooting eventi: :events mostra gli eventi del cluster. Filtro per il namespace interessato, vedo cosa e successo.

K9s vs Lens vs kubectl

Tre strumenti, tre use case.

kubectl: Scripting, automazione, CI/CD. Quando devo mettere comandi in uno script, kubectl e l'unica opzione.

k9s: Uso interattivo quotidiano da terminale. Il mio strumento principale quando lavoro con Kubernetes. Veloce, potente, funziona ovunque ci sia un terminale.

Lens: Quando devo mostrare qualcosa a qualcun altro, o quando preferisco un'interfaccia grafica. Demo, pair programming, esplorazione di cluster nuovi.

In pratica, k9s copre l'80% del mio tempo con Kubernetes. Per il resto uso kubectl (automazione) o Lens (casi specifici).

Tips Avanzati

Qualche trucco che ho imparato nel tempo:

Benchmarking risorse: :pulses mostra grafici di utilizzo CPU/memoria in tempo reale. Utile per capire se un pod sta soffrendo.

XRay view: :xray deploy mostra una vista gerarchica deploy → replicaset → pod. Utile per capire la struttura.

YAML diff: Quando editi una risorsa con e, k9s ti mostra il diff prima di applicare. Comodo per evitare errori.

Popeye (sanitizer integrato): :popeye lancia un audit del cluster e mostra problemi potenziali. Non perfetto, ma da indicazioni utili.

Benchmark: Con b su un pod puoi vedere metriche HTTP se il container le espone. Utile per debug di performance.

Problemi Comuni

K9s non parte, errore di connessione: Verifica che kubectl funzioni. K9s usa lo stesso kubeconfig e contesto.

Non vedo tutte le risorse: Controlla i permessi RBAC. K9s mostra solo quello che hai permesso di vedere.

Performance lenta su cluster grandi: Usa filtri per limitare cosa viene fetchato. Evita ctrl-a su cluster con migliaia di risorse.

Colori sbagliati: Il tuo terminale potrebbe non supportare 256 colori. Prova una skin diversa o verifica le impostazioni del terminale.

Conclusione

K9s ha cambiato come lavoro con Kubernetes quotidianamente. Non e un sostituto di kubectl — per scripting serve ancora quello. Ma per tutto il lavoro interattivo, k9s e semplicemente migliore.

L'investimento iniziale e minimo: qualche minuto per installarlo, qualche ora per imparare i comandi base. Il ritorno e una produttivita significativamente maggiore ogni giorno che lavori con Kubernetes.

Se passi piu di mezz'ora al giorno su kubectl interattivo, fatti un favore e prova k9s. Una settimana e non tornerai indietro.

Il terminale non e morto. A volte e solo piu potente di un'interfaccia grafica.