Introduction

Récemment, une version partielle de Kubernetes a été portée sur TypeScript, permettant ainsi l'exécution de clusters directement dans le navigateur. Cette version, appelée webernetes, a nécessité la génération de près de 100 000 lignes de code réparties sur 552 commits et 629 fichiers, le tout en deux mois.

Contexte Technique

La question qui revient le plus souvent est de savoir si Kubernetes a été compilé en WebAssembly pour cette réalisation. La réponse est non. Une simple application « hello, world ! » en Go compilée en WebAssembly pèse environ 540 Ko gzip, ce qui est déjà plus lourd que webernetes, qui pèse environ 140 Ko gzip. Compiler tout Kubernetes en WebAssembly aurait nécessité l'envoi de mégaoctets via le réseau. Les erreurs de compilation dues à l'appel d'API de niveau système non disponibles dans le navigateur ont également été rencontrées.

Webernetes a donc été conçu pour être léger et ne pas télécharger de véritables images à partir d'un registre comme Docker Hub. À la place, il utilise son propre registre basé sur le navigateur, et les images sont définies à l'aide d'une API TypeScript. Les images sont créées en étendant la classe BaseImage et en implémentant des méthodes pour exécuter des processus et gérer les requêtes HTTP.

Analyse et Implications

Webernetes est destiné à la création de contenus interactifs sur Kubernetes et non à la production. Il ne nécessite pas d'exécuter de véritables images et se concentre sur la simulation de workloads pour illustrer des concepts spécifiques. L'intention est d'étendre webernetes pour supporter davantage de fonctionnalités Kubernetes au fil du temps, comme les ConfigMaps, les Secrets, les ressources de pod, les volumes persistants, etc.

La majorité du code webernetes a été généré avec des modèles de langage (LLM), ce qui pourrait susciter des inquiétudes quant à la qualité et à la fiabilité du code. Cependant, les efforts pour garantir la similarité lexicale et le comportement identique avec le codebase Go de Kubernetes ont été entrepris, notamment en passant en revue manuellement le code généré pour identifier et corriger les erreurs.

Perspective

L'avenir de webernetes repose sur l'expansion de ses fonctionnalités pour mieux supporter les besoins des créateurs de contenus interactifs sur Kubernetes. Les contributions et les retours de la communauté seront essentiels pour améliorer et élargir les capacités de webernetes. Les limites actuelles, comme le manque de prise en charge de certaines fonctionnalités Kubernetes, seront abordées à mesure que le projet évolue.