Ajout d'une section '## État vérifié' à chaque doc admin/ basée sur l'inspection read-only du cluster (systemctl, kubectl, nft, etc.). Aucune modification de service ni réécriture de documentation existante. Co-Authored-By: Hermes <hermes@funk.lab>
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 |
infra |
Traefik, MetalLB, NFS provisioner |
argocd |
ArgoCD (GitOps) |
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 |
État vérifié — 2026-06-05
Tous les services clés (kubelet, API server, et workers) sont actifs. Aucune divergence notable avec la documentation. Aucun élément opérationnel critique observé (pods en erreur, export NFS manquant, etc.).