←Tous les articles
Mer. 14 octobre 2026·6 min de lecture

🐈 sofka : une TUI Kubernetes en Rust qui explique les pannes

Logo sofka et schéma : la touche X de sofka transforme une ressource dégradée en vue d'incident (rollout, conditions, pods bloquants, échecs des conteneurs, événements Warning)

📚 Introduction

Quand je dois fouiller un cluster Kubernetes, j’ouvre rarement kubectl en premier. J’ouvre une TUI. Pendant des annĂ©es, ce rĂ©flexe s’appelait k9s, et il le reste pour beaucoup de monde.

sofka se prĂ©sente comme une alternative directe. Écrite en Rust sur kube-rs et ratatui, elle reprend l’ergonomie clavier de k9s et revendique ouvertement l’inspiration. Son slogan rĂ©sume l’angle choisi : « The cluster tells you it’s broken. sofka tells you why. »

Le projet est jeune (premier paquet sur crates.io en juillet 2026) mais avance vite : la version 0.31.9 est sortie aujourd’hui mĂȘme. Il vaut un coup d’Ɠil, surtout si vous gĂ©rez des clusters pilotĂ©s par Flux CD ou Argo CD.

🔍 Qu’est-ce que sofka apporte de plus que k9s ?

Surtout du diagnostic, et des intĂ©grations GitOps qui se passent de binaires externes. Le reste (navigation, filtres, CRD, port-forwards, skins) existe dĂ©jĂ  des deux cĂŽtĂ©s, et la documentation de sofka a l’honnĂȘtetĂ© de le dire dans sa comparaison avec k9s.

La fonction phare tient sur une touche : X. Sur une ressource en souffrance, elle ouvre une vue d’incident qui rassemble l’état du rollout, les conditions dĂ©gradĂ©es, les pods bloquants, les raisons d’échec des conteneurs et les Ă©vĂ©nements Warning rĂ©cents. Jobs, CronJobs, PVC et Nodes ont leurs propres vĂ©rifications. Le point qui m’intĂ©resse : cette vue est dĂ©terministe. Pas d’IA, pas de service tiers, juste des rĂšgles appliquĂ©es aux donnĂ©es du cluster. Pour un outil qu’on dĂ©gaine en plein incident, je prĂ©fĂšre ce choix.

À cĂŽtĂ©, T affiche une timeline des changements observĂ©s par le watch pendant la session (rĂ©plicas, phases, redĂ©marrages, bascules de conditions). Elle vit en mĂ©moire et disparaĂźt Ă  la fermeture, ce n’est donc pas un journal d’audit.

🧰 GitOps sans CLI externe, Helm en lecture native

La touche t ouvre un menu d’actions sur les ressources Flux CD : suspend, resume, reconcile now, sur les Kustomizations, HelmReleases, sources et l’image automation. MĂȘme logique pour Argo CD, avec suspend, resume et sync des Applications. Tout passe par des patchs envoyĂ©s directement Ă  l’API Kubernetes, sans binaire flux ni argocd installĂ© sur le poste.

Pour Helm, la commande :helm ouvre un inspecteur qui dĂ©code lui-mĂȘme les Secrets de release : historique, values, manifests rendus, NOTES. Si vous avez lu mon article sur Helm 4, vous savez que ces Secrets contiennent tout l’état d’une release. sofka les lit sans passer par la CLI. Pour agir, c’est diffĂ©rent : le rollback (r) et la dĂ©sinstallation (ctrl-d) appellent le vrai binaire helm, qu’il faut donc garder installĂ©.

Quelques autres fonctions que je n’ai pas croisĂ©es ailleurs sous cette forme :

  • CapacitĂ© engagĂ©e par nƓud (:nodes) : les requests et limits CPU/mĂ©moire des pods rapportĂ©es Ă  l’allocatable. C’est ce qui explique qu’un pod refuse de se planifier sur un nƓud qui a l’air calme, et ça fonctionne sans Metrics Server.
  • Édition de Secrets dĂ©codĂ©s : e ouvre les valeurs en clair dans $EDITOR, sofka les rĂ©encode et ne patche que les clĂ©s modifiĂ©es, aprĂšs confirmation.
  • Contenu des volumes : x sur une PVC permet de parcourir les fichiers et de les copier dans les deux sens.
  • Logs combinĂ©s : on marque plusieurs pods avec space, puis l pour lire leurs logs ensemble.
  • Filtres typĂ©s : texte flou, !inverse, sĂ©lecteurs de labels et de champs, comparaisons comme restarts>=5 ou age<2h.

🚀 Installation et premiers pas

Le choix est large. Homebrew, Nix et Cargo couvrent la majorité des postes de dev :

brew install sofka                     # tap officiel Homebrew (macOS/Linux)
nix run github:nklmilojevic/sofka      # sans rien installer
cargo install sofka

Sur Linux, pkg.sofka.rs sert des dĂ©pĂŽts signĂ©s apt, dnf, zypper, pacman et apk, ce qui permet de garder l’outil Ă  jour avec le reste du systĂšme. Des binaires sont publiĂ©s pour macOS, Linux et Windows (aarch64 et x86_64) Ă  chaque release.

Le lancement ressemble Ă  k9s, avec quelques options utiles :

sofka                      # pods du contexte courant
sofka dp -A                # deployments, tous namespaces
sofka --context prod --readonly
sofka ctx                  # sélecteur de contexte avant connexion

Pour tester, un cluster local k3s ou k3d fait parfaitement l’affaire.

Deux modes sans TTY mĂ©ritent d’ĂȘtre signalĂ©s, parce qu’ils servent de smoke tests en CI : sofka --check se connecte, lance la dĂ©couverte et imprime un rĂ©sumĂ©, sofka pods --snapshot rend une seule frame d’une vue sur la sortie standard.

đŸ› ïž Venir de k9s

C’est souvent lĂ  que tout se joue : personne n’a envie de réécrire sa config. sofka import k9s convertit alias, plugins, hotkeys, vues, skins et rĂ©glages par contexte, puis liste honnĂȘtement ce qui n’a pas pu l’ĂȘtre.

La configuration se fait en TOML ou en YAML sous ~/.config/sofka (ou $XDG_CONFIG_HOME/sofka), dĂ©coupable en fichiers conf.d/, et :reload la recharge Ă  chaud. Le mode lecture seule peut ĂȘtre forcĂ© par contexte, ce qui rend la rĂšgle « on ne supprime rien en prod » bloquante au lieu de reposer sur la mĂ©moire de chacun.

Depuis la 0.26.0, un registre officiel de plugins relus est aussi disponible (sofka plugin search, sofka plugin install popeye). Popeye et Trivy y figurent, à condition d’avoir le binaire correspondant dans le PATH.

⚠ Quelques prĂ©cautions

Benchmark Ă  prendre pour ce qu’il est. Le rapport du dĂ©pĂŽt, refait le 6 octobre 2026 avec sofka 0.31.0 et k9s 0.51.0, donne une vue des pods affichĂ©e en 2,82 s contre 3,85 s (mĂ©dianes) et 324 Mio de RSS contre 738 Mio. Le site affiche encore une mesure plus ancienne, plus flatteuse (59 % de gain), que ce rapport remplace. Tout tourne sur un seul Apple M3 Max, et l’auteur dĂ©taille lui-mĂȘme les limites du test. C’est un indice, pas une vĂ©ritĂ© gĂ©nĂ©rale.

Projet trùs jeune. Trois mois d’existence publique et des versions qui s’enchaünent rapidement : attendez-vous à des changements de comportement entre deux mises à jour.

Parité imparfaite avec k9s. Pulse, Xray et Popeye existent mais ne fonctionnent pas comme dans k9s. Si votre routine en dépend, comparez avant de basculer.

Plugins non sandboxĂ©s. Les paquets du registre sont relus et vĂ©rifiĂ©s par checksum, mais ils s’exĂ©cutent avec vos permissions.

Gatekeeper sur macOS. Les binaires ne sont pas encore signés : un tarball téléchargé depuis le navigateur sera bloqué. xattr -d com.apple.quarantine sofka rÚgle le problÚme, ou passez par Homebrew ou Nix.

🎉 Conclusion

sofka ne remplace pas k9s par magie, et ne prĂ©tend pas le faire. Ce qu’il propose est ciblĂ© : une vue X qui rassemble les preuves d’une panne, Flux et Argo CD pilotables sans CLI annexe, un inspecteur Helm natif, et quelques vues pensĂ©es pour l’exploitation (capacitĂ© engagĂ©e, Secrets dĂ©codĂ©s, volumes).

Si vous vivez dĂ©jĂ  dans k9s, l’import de config rend l’essai presque gratuit. Je le garderais en lecture seule sur les clusters de prod le temps de se faire la main. Et pour ceux qui dĂ©couvrent l’écosystĂšme, mon article sur les bases de Kubernetes pose le dĂ©cor.

Le nom, au passage, vient de Sophie, le chat de l’auteur : un bleu russe qui surveille l’écran en permanence. « sofka » est le diminutif serbe de Sophia.

🔗 Liens utiles

/faq

Questions fréquentes

Qu'est-ce que sofka ?

+

sofka est une interface terminal (TUI) pour Kubernetes écrite en Rust, construite sur kube-rs et ratatui et inspirée de k9s. Elle est distribuée sous double licence MIT ou Apache-2.0.

Comment installer sofka ?

+

Via Homebrew (« brew install sofka »), Nix (« nix run github:nklmilojevic/sofka »), Cargo (« cargo install sofka ») ou les dépÎts apt, dnf, zypper, pacman et apk servis par pkg.sofka.rs. Des binaires sont aussi publiés pour macOS, Linux et Windows.

Peut-on migrer de k9s vers sofka ?

+

Oui, la commande « sofka import k9s » convertit les alias, plugins, hotkeys, vues, skins et réglages par contexte de k9s, puis liste ce qu'elle n'a pas pu convertir.

La touche X de sofka utilise-t-elle de l'IA ?

+

Non. La vue d'incident est déterministe : elle s'appuie sur des rÚgles et sur les données du cluster (état du rollout, conditions, raisons d'échec des conteneurs, événements Warning récents), sans service externe.