Retour aux articles • CLOUD • Mis à jour en 2026 • 6 min de lecture

K9s : Piloter Kubernetes au Terminal

Guide de référence K9s (derailed/k9s) pour piloter ses clusters Kubernetes en terminal : XRay, Pulses et les plugins SRE.

K9s : Piloter Kubernetes au Terminal
Dépôt GitHub Officiel : github.com/derailed/k9s (Apache 2.0 • Go • Fernand Galiana)
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=valeur pour filtrer par labels Kubernetes).

1.2. Les raccourcis d’intervention immédiate sur un Pod ou un Nœud

ToucheAction immédiate dans K9sÉquivalent kubectl remplacé
l / pAffiche les logs en continu (p pour le conteneur crashé précédent)kubectl logs -f <pod> [--previous]
sOuvre un shell interactif dans le conteneur sélectionnékubectl exec -it <pod> -- /bin/sh
dAffiche le describe complet avec les événements en bas de pagekubectl describe <ressource> <nom>
y / eInspecte le YAML complet (y) ou l’édite à chaud (e)kubectl get -o yaml / kubectl edit
Shift-fCrée un port-forward local immédiat vers le Pod ou le Servicekubectl port-forward <pod> 8080:80
Ctrl-d / Ctrl-kSupprime proprement (Ctrl-d) ou tue immédiatement (Ctrl-k --force)kubectl delete pod <pod>

2. MàJ 2026 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


Si vous voulez plus d’information sur l’infrastructure vous pouvez voir le repo à ce sujet : https://github.com/ravindrajob/InfraAtHome