Funk-lab/admin/k8s/k9s.md
alkatrazz 34b235305b docs(cluster): aligne la doc sur l'état réel (relevé 2026-06-21) + snapshot
Passe de vérification terrain (SSH s01/g01 + kubectl) pour corriger les écarts
doc↔réalité, et ajout d'un document de référence vérifié.

- admin/ops/etat-cluster.md (nouveau) : snapshot daté — machines, services+ports
  par hôte, workloads k8s, namespaces, IngressRoute, bases PG, modèles LiteLLM,
  RAG/Qdrant, + procédure pour régénérer le relevé.
- OS AlmaLinux 9.7 → 9.8 (s01/g01) ; précise k8s v1.33.1 (CLAUDE/README/install/talos).
- RAG funk-docs : retire le warning périmé « supprimée 2026-06-17 / à re-ingérer » →
  reconstruite (436 chunks, nomic-embed-text :1238 dim 768, CPU). Maj rag.md,
  incidents.md, stt.md.
- Namespace sacrifice (hors-repo, hors ArgoCD) + bases PG grafana/sacrifice +
  services ai via IngressRoute + registry in-cluster (CLAUDE.md, k9s.md).
- Services de résilience (llm-heartbeat, llama-watchdog/embed) et instances CPU
  manuelles :1236/:1237 (souvent éteintes) documentés.
- Journal progress/2026-06-21.md : section relevé + RAG.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:47:33 +02:00

5.6 KiB

k9s — TUI Kubernetes

k9s est une interface terminal interactive pour administrer le cluster Kubernetes. Il remplace la plupart des commandes kubectl get/describe/logs/exec par une navigation clavier.


Installation

Poste perso et storage-01 (v0.50.18)

curl -Lo /tmp/k9s.tar.gz \
  https://github.com/derailed/k9s/releases/download/v0.50.18/k9s_Linux_amd64.tar.gz
tar -xzf /tmp/k9s.tar.gz -C /tmp k9s
sudo mv /tmp/k9s /usr/local/bin/k9s
sudo chmod +x /usr/local/bin/k9s
k9s version

Pour une version plus récente : https://github.com/derailed/k9s/releases/latest

Sur storage-01 depuis le poste perso

ssh storage-01 "curl -sLo /tmp/k9s.tar.gz \
  https://github.com/derailed/k9s/releases/download/v0.50.18/k9s_Linux_amd64.tar.gz && \
  tar -xzf /tmp/k9s.tar.gz -C /tmp k9s && \
  sudo mv /tmp/k9s /usr/local/bin/k9s && \
  sudo chmod +x /usr/local/bin/k9s"

Configuration

Kubeconfig

k9s lit ~/.kube/config — le même que kubectl. Le kubeconfig Funk est généré depuis talhelper et pointe sur https://192.168.10.11:6443.

# Vérifier le contexte actif
kubectl config get-contexts

# Contexte attendu : admin@funk

Forcer tous les namespaces par défaut

k9s mémorise le namespace par contexte dans ~/.local/share/k9s/clusters/funk/admin@funk/config.yaml. Après le premier lancement, corriger ce fichier pour éviter de toujours démarrer sur default :

k9s:
  namespace:
    active: all
    favorites:
      - all
  view:
    active: v1/pods all

Lancer k9s sur storage-01 depuis le poste perso

ssh -t storage-01 k9s   # -t obligatoire pour allouer un TTY (TUI)

Namespaces du cluster Funk

Namespace Contenu
monitoring Prometheus, Grafana, AlertManager
ai Open WebUI, n8n, STT-server, Ghostfolio (+ Redis)
infra Traefik, MetalLB, NFS provisioner, registry in-cluster
argocd ArgoCD (GitOps)
metallb-system MetalLB (controller + speakers)
nfs-provisioner nfs-subdir-external-provisioner
sacrifice Jeu FPS Sacrifice (web + CronJob) — hors repo Funk-lab, hors ArgoCD
kube-system Composants Kubernetes internes

Navigation — raccourcis essentiels

Général

Touche Action
0 Tous les namespaces
1, 2... Namespace favori N
: Ouvrir la ligne de commande (changer de ressource)
/ Filtrer la liste (regex supporté)
Esc Retour / annuler
? Aide complète (tous les raccourcis)
ctrl+c Quitter k9s

Ressources courantes (taper : puis le nom)

Commande Ressource affichée
:pod Pods
:deploy Deployments
:svc Services
:ing Ingress
:pvc PersistentVolumeClaims
:ns Namespaces
:node Nœuds du cluster
:secret Secrets
:cm ConfigMaps
:event Events (utile pour debug)
:cj CronJobs
:job Jobs

Actions sur une ressource sélectionnée

Touche Action
Entrée Descendre dans la ressource (pod → containers)
l Logs du pod/container
d Describe (équivalent kubectl describe)
e Éditer le YAML en live
y Afficher le YAML complet
s Shell interactif dans le container (exec -it)
ctrl+d Supprimer la ressource
ctrl+k Kill (suppression forcée)
r Restart le déploiement (rollout restart)

Logs

Touche Action
l Logs du container sélectionné
ctrl+s Sauvegarder les logs dans un fichier
w Activer/désactiver le retour à la ligne
t Afficher/masquer les timestamps
0 Charger tous les logs (pas seulement les 100 dernières lignes)

Cas d'usage fréquents

Voir l'état des pods en direct

Lancer k9s → appuyer sur 0 → vue de tous les pods avec état en temps réel. Les pods CrashLoopBackOff ou Pending apparaissent en rouge.

Lire les logs d'un pod

:pod → sélectionner le pod → l

Pour suivre les logs en continu : ils se rafraîchissent automatiquement.

Débugger un pod en erreur

:pod → sélectionner le pod → d   (describe — voir Events en bas)
:event → filtrer par nom du pod  (voir la raison du crash)

Redémarrer un déploiement

:deploy → sélectionner → r

Exécuter un shell dans un pod

:pod → sélectionner → s → choisir le container

Voir la consommation CPU/RAM des nœuds

:node → les colonnes CPU% et MEM% sont affichées en temps réel

Surveiller les PVC (stockage NFS)

:pvc → vérifier que tous sont Bound (sinon : Pending = problème NFS provisioner)

Dépannage

Symptôme Cause Action
"No resources found in default namespace" k9s démarre sur le mauvais namespace Appuyer sur 0 ou corriger ~/.local/share/k9s/clusters/funk/admin@funk/config.yaml
Pas de connexion au cluster kubeconfig absent ou cluster éteint kubectl get nodes pour diagnostiquer ; funk-start si le cluster est éteint
Shell (s) ne fonctionne pas Pod sans shell ou image distroless Utiliser kubectl debug à la place
k9s freeze sur storage-01 Pas de TTY alloué Toujours lancer avec ssh -t storage-01 k9s

Fichiers de configuration

Fichier Rôle
~/.kube/config Kubeconfig — adresse cluster + certificats
~/.config/k9s/config.yaml Config globale k9s (refresh rate, seuils CPU/RAM...)
~/.config/k9s/aliases.yaml Alias de ressources personnalisés
~/.local/share/k9s/clusters/funk/admin@funk/config.yaml Namespace et vue actifs par contexte