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:
:podso: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 containerd: describey: mostra YAMLe: editctrl-d: deleteshift-f: port-forwardp: 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 dettagliEsc: torna indietroctrl-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 logwper il wrap delle righe lunghetper mostrare o nascondere i timestamp0per tornare alla fine (live)Escper 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:
- Vai su
:svc - Seleziona il service
- Premi
shift-f - 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 nullaImagePullBackOff/ErrImagePull: nome o tag dell'immagine sbagliati, oppure registry privato senza credenziali valideCrashLoopBackOff: il container parte e muore di continuo. Qui i log servono davvero: premipper leggere l'istanza precedente, che è quella andata in crashFailedMount: il volume non è disponibile. Una PVC ancora pending, o un secret o configmap mancanteUnhealthy: 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
- Setup di un cluster Kubernetes con kubeadm, se il cluster su cui puntare k9s ti manca ancora
- This guide in English
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.