Documentation Officielle : k9scli.io
Quand on administre quotidiennement plusieurs clusters Kubernetes, enchaîner les commandes kubectl get pods -n ..., kubectl logs -f ... et kubectl describe ... finit toujours par faire perdre de précieuses secondes lors d’un incident critique.
Créé par Fernand Galiana (derailed), K9s (github.com/derailed/k9s) s’est imposé comme le cockpit interactif de terminal (TUI pour Terminal User Interface, c’est-à-dire un tableau de bord visuel qui tourne directement dans la console texte sans navigateur web) de référence pour tout ingénieur Cloud, DevOps ou SRE : pilotable au clavier avec les raccourcis de Vim, il observe l’API Server Kubernetes en temps réel.
1. Les fondamentaux de K9s : naviguer à la vitesse du clavier
Lancé d’une simple commande k9s dans le terminal (ou k9s --readonly pour éviter toute fausse manipulation en production), l’outil ouvre une vue dynamique sur le cluster actif de votre ~/.kube/config.
1.1. Les commandes de navigation (:mode) et de filtrage (/filtre)
Comme dans Vim, la touche : ouvre la barre de commande pour basculer instantanément vers n’importe quelle ressource Kubernetes (y compris vos CRDs personnalisées) :
:pod(ou:po) : liste tous les Pods avec leur état, nombre de restarts, IP, nœud et consommation CPU/RAM ;:deploy(ou:dp),:sts,:ds,:cj: gestion des Deployments, StatefulSets, DaemonSets et CronJobs ;:svc,:ing,:netpol: inspection des Services, Ingress et NetworkPolicies ;:ctx: changement instantané de contexte Kubernetes (bascule entre clusters Dev, Staging et Prod) ;:ns: filtrage par Namespace ;/mot-clé: filtre temps réel par expression régulière (et/-f label=valeurpour filtrer par labels Kubernetes).
1.2. Les raccourcis d’intervention immédiate sur un Pod ou un Nœud
| Touche | Action immédiate dans K9s | Équivalent kubectl remplacé |
|---|---|---|
l / p | Affiche les logs en continu (p pour le conteneur crashé précédent) | kubectl logs -f <pod> [--previous] |
s | Ouvre un shell interactif dans le conteneur sélectionné | kubectl exec -it <pod> -- /bin/sh |
d | Affiche le describe complet avec les événements en bas de page | kubectl describe <ressource> <nom> |
y / e | Inspecte le YAML complet (y) ou l’édite à chaud (e) | kubectl get -o yaml / kubectl edit |
Shift-f | Crée un port-forward local immédiat vers le Pod ou le Service | kubectl port-forward <pod> 8080:80 |
Ctrl-d / Ctrl-k | Supprime proprement (Ctrl-d) ou tue immédiatement (Ctrl-k --force) | kubectl delete pod <pod> |
2. Nouveautés K9s (v0.30 → v0.50+) & Workflows SRE
Depuis la rédaction initiale de cet article en 2023, K9s (derailed/k9s) a connu une évolution majeure (passage à la configuration XDG ~/.config/k9s/, refonte du moteur de plugins, scans de vulnérabilités intégrés et nouvelles vues analytiques). Voici les nouveautés incontournables en 2026 pour industrialiser son usage en production :
┌────────────────────────────────────────────────────────────────────────────┐
│ NOUVEAUTÉS K9S (UPDATE 2026) POUR L'EXPLOITATION SRE │
│ │
│ 1. :xray <ressource> ──► Arbre de dépendances temps réel (Pod/SVC/SA) │
│ 2. :pulses (ou :pu) ──► Cockpit de santé global & graphiques ASCII │
│ 3. Vulnerability Scans ──► Scan CVE des images OCI directement dans :po │
│ 4. Custom Views ──► Colonnes sur-mesure par CRD (views.yaml) │
│ 5. Plugins SRE 2026 ──► Debug éphémère, Stern, Dive, Flux & ArgoCD │
│ 6. Skins par Cluster ──► Bordure Rouge en PROD vs Bleue en DEV │
└────────────────────────────────────────────────────────────────────────────┘
2.1. Vue :xray : visualiser l’arbre de dépendances complet en ASCII
Taper :xray deploy ou :xray pod ouvre une vue arborescente interactive qui relie automatiquement chaque Deployment à ses ReplicaSets, ses Pods, ses Containers, ainsi qu’aux ConfigMaps, Secrets, ServiceAccounts et PVCs montés. En un coup d’œil, on repère immédiatement quel Secret manquant ou quel PVC en Pending bloque le démarrage d’un Pod.
2.2. Cockpit :pulses et Audit :popeye
La commande :pulses transforme le terminal en tableau de bord télémétrique avec jauges animées de santé pour les Deployments, ReplicaSets, Pods, StatefulSets et la pression CPU/Mémoire du cluster. Couplé au sanitizer Popeye, K9s met en évidence les erreurs de configuration (probes absentes, limites mémoire manquantes, ports non nommés).
2.3. Scans de vulnérabilités d’images intégrés (imageScans)
Les versions récentes de K9s intègrent un scanner de vulnérabilités d’images OCI activable dans ~/.config/k9s/config.yaml :
# ~/.config/k9s/config.yaml
k9s:
liveViewAutoRefresh: true
refreshRate: 2
maxConnRetry: 5
readOnly: false
ui:
enableMouse: false
headless: false
logoless: true
imageScans:
enable: true
exclusions:
namespaces: ["kube-system"]
Une colonne dédiée apparaît alors dans la vue des Pods pour signaler immédiatement le nombre de CVE critiques présentes dans les images déployées.
2.4. Colonnes personnalisées (Custom Views : views.yaml)
Avec la prolifération des CRDs (Cert-Manager, Cilium, Crossplane, External-Secrets), la vue par défaut n’affiche parfois que NAME et AGE. Le fichier ~/.config/k9s/views.yaml permet désormais d’extraire n’importe quel champ JSONPath directement en colonne dans K9s :
# ~/.config/k9s/views.yaml
views:
v1/pods:
sortColumn: STATUS:asc
columns:
- NAME
- NAMESPACE
- STATUS
- RESTARTS
- NODE
- IP
- QOS:.status.qosClass
- CPU
- MEM
2.5. Plugins SRE indispensables en 2026 (~/.config/k9s/plugins.yaml)
Le système de plugins de K9s permet d’associer une touche clavier à n’importe quelle action externe en injectant dynamiquement $NAME, $NAMESPACE, $CONTAINER et $CONTEXT. Voici trois plugins particulièrement efficaces en production :
# ~/.config/k9s/plugins.yaml
plugins:
# 1. Injecter un conteneur éphémère de debug réseau (netshoot) avec Shift-D
debug-netshoot:
shortCut: Shift-D
description: "Debug Ephemeral Container (netshoot)"
scopes:
- containers
command: bash
background: false
confirm: true
args:
- -c
- "kubectl debug -it -n=$NAMESPACE $POD --target=$NAME --image=nicolaka/netshoot:latest -- bash"
# 2. Agréger les logs multi-pods d'un Deployment avec Stern via Shift-L
stern-logs:
shortCut: Shift-L
description: "Logs multi-pods (Stern)"
scopes:
- deployments
- daemonsets
- statefulsets
command: stern
background: false
args:
- --tail
- 100
- $FILTER
- -n
- $NAMESPACE
- --context
- $CONTEXT
# 3. Forcer une réconciliation immédiate FluxCD / GitOps avec Shift-R
flux-reconcile:
shortCut: Shift-R
description: "Flux Reconcile"
scopes:
- kustomizations
- helmreleases
command: bash
background: false
args:
- -c
- "flux reconcile ${RESOURCE_NAME::-1} $NAME -n $NAMESPACE --context $CONTEXT"
2.6. Garde-fou visuel anti-erreur : un thème (Skin) rouge vif pour la Production
Pour éviter de confondre un terminal connecté à la pré-production avec celui de la production, K9s permet d’attribuer dans ~/.config/k9s/clusters/<cluster>/<context>/config.yaml un skin spécifique par contexte (par exemple un thème dracula ou nord bleu sur les clusters de test, et un thème à bordure rouge sang + mode readOnly: true par défaut sur les clusters de production).
3. Sources et Références
- Dépôt GitHub officiel K9s (
derailed/k9s) : https://github.com/derailed/k9s - Documentation officielle K9s (Plugins, Views, Skins, XRay) : https://k9scli.io/
- Communauté des Plugins K9s : https://github.com/derailed/k9s/tree/master/plugins
Si vous voulez plus d’information sur l’infrastructure vous pouvez voir le repo à ce sujet : https://github.com/ravindrajob/InfraAtHome
