Funk-lab/admin/k8s/k9s.md
Hermes Bot 00e53fc0b8 docs(hermes): sections état vérifié — inspection cluster 2026-06-05
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>
2026-06-05 12:32:57 +02:00

213 lines
No EOL
5.6 KiB
Markdown

# 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 |
---
## É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.).