# 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) ```bash 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 ```bash 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`. ```bash # 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` : ```yaml k9s: namespace: active: all favorites: - all view: active: v1/pods all ``` ### Lancer k9s sur storage-01 depuis le poste perso ```bash 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 |