K9s per Kubernetes: Comandi, Scorciatoie e Configurazione

K9s è una interfaccia testuale per Kubernetes: un'alternativa interattiva a kubectl per il lavoro quotidiano sul cluster. Questa guida copre l'installazione, i comandi e le scorciatoie che si usano davvero, come cambiare contesto e namespace, i filtri, i log in streaming, il port-forward e la configurazione di skin, alias, hotkey e plugin.

Per chi è questa guida: chi conosce già kubectl e passa tempo a navigare i cluster in modo interattivo. Cosa non è: non è un tutorial su Kubernetes. Se il cluster devi ancora costruirlo, parti dalla guida al setup con kubeadm.

⚡ Cheat sheet dei comandi k9s

I comandi e i tasti che coprono la maggior parte del lavoro quotidiano. Tutto quello che vedi qui è spiegato in dettaglio nel resto della guida.

k9s                 # avvia, usando il contesto corrente del kubeconfig

# Viste: digita ":" seguito dalla risorsa
:pods   :deploy   :svc   :ns   :no   :sec   :cm   :events

# Contesto e namespace
:ctx                # cambia contesto (cluster)
:ns                 # cambia namespace
ctrl-a              # mostra tutti i namespace

# Trovare le cose
/nginx              # filtro live sulla vista corrente
/app=web            # filtra per label

# Agire sulla risorsa selezionata
l                   # log live            s   shell nel container
d                   # describe            y   mostra YAML
e                   # edit (mostra diff)  p   log precedenti
shift-f             # port-forward        ctrl-d  delete

# Uscire
Esc                 # indietro   :q   esci    ?   help

Vai a: installazione · contesto e namespace · filtri · log · configurazione

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

Perché Non Basta kubectl

kubectl è 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 i cambiamenti

K9s risolve tutti questi problemi. Hai una vista live del cluster, navighi con i tasti, fai azioni con le scorciatoie. È kubectl con gli 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.

Comandi e Scorciatoie

K9s è pensato per la navigazione veloce. Questi sono i comandi che uso di più.

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 già i nomi.

Filtri: Trovare le Risorse in Fretta

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

/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 è 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
  • shift-f: port-forward
  • p: log precedenti (l'istanza del container prima dell'ultimo riavvio)

Queste scorciatoie funzionano su qualsiasi risorsa, dove applicabili.

Navigazione Generale

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

I Log: Dove K9s Brilla

La gestione dei log è 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 il wrap delle righe lunghe
  • t per mostrare o nascondere i timestamp
  • 0 per tornare alla fine (live)
  • Esc per uscire

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

Per i 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.

Come Cambiare Contesto e Namespace

:ctx mostra tutti i contesti nel tuo kubeconfig. Seleziona e premi Enter per passare a un altro cluster.

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

Eventi: Cosa È Appena Successo nel Cluster

Quando un pod si rifiuta di partire, i log sono spesso vuoti: il container non è mai arrivato al punto di scriverne. La risposta di solito sta negli eventi, e :events è il modo più rapido per leggerli.

:events            # eventi del cluster, dal più recente
/Failed            # filtra solo i fallimenti
/FailedScheduling  # pod che non sono stati piazzati su un nodo
ctrl-a             # allarga a tutti i namespace

Gli eventi che si incontrano più spesso, e cosa significano di solito:

  • FailedScheduling: nessun nodo soddisfa la richiesta. CPU o memoria insufficienti, un taint senza toleration corrispondente, oppure un node selector che non corrisponde a nulla
  • ImagePullBackOff / ErrImagePull: nome o tag dell'immagine sbagliati, oppure registry privato senza credenziali valide
  • CrashLoopBackOff: il container parte e muore di continuo. Qui i log servono davvero: premi p per leggere l'istanza precedente, che è quella andata in crash
  • FailedMount: il volume non è disponibile. Una PVC ancora pending, o un secret o configmap mancante
  • Unhealthy: la probe di liveness o readiness sta fallendo. Spesso è sbagliata la probe, non l'applicazione

Puoi anche vedere gli eventi limitati a un singolo oggetto: seleziona un pod e premi d per il describe. Gli eventi di quell'oggetto sono in fondo, ed è di solito lì che sta la causa vera.

Configurazione: Skin, Alias e Hotkey

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

Skin Personalizzata

Puoi cambiare i 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 scorciatoie 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, e così via.

Hotkey

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 il 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 partono. Vedo lo stato in tempo reale 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 e vedo cosa è successo.

K9s vs Lens vs kubectl

Tre strumenti, tre casi d'uso.

kubectl: scripting, automazione, CI/CD. Quando devo mettere comandi in uno script, kubectl è 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 e 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 i problemi potenziali. Non è perfetto, ma dà indicazioni utili.

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

Problemi Comuni

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

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

Performance lenta su cluster grandi: usa i filtri per limitare cosa viene caricato. 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 il modo in cui lavoro con Kubernetes ogni giorno. Non è un sostituto di kubectl: per lo scripting serve ancora quello. Ma per tutto il lavoro interattivo, k9s è semplicemente migliore.

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

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

Il terminale non è morto. A volte è solo più potente di un'interfaccia grafica.

Da leggere anche

Kubernetes in produzione per un e-commerce?

Il lavoro quotidiano sul cluster è la parte facile. Aiuto le aziende a portare Adobe Commerce e Magento su Kubernetes: auto-scaling, controllo dei costi e un'infrastruttura che un team piccolo riesce davvero a gestire.

Consulenza Magento e Adobe Commerce