Featured image of post J'ai testé pour vous : k8e (Kubernetes Easy Engine)

J'ai testé pour vous : k8e (Kubernetes Easy Engine)

Ecrit par ~ zwindler ~

Tu ne faisais pas un livre sur Kubernetes, toi ?

Oui ! Et j’ai une bonne nouvelle : mon livre “Kubernetes : 50 solutions pour les postes de développement et les clusters de production”, édité par Eyrolles, sortira le 16 octobre 2025 ! Vous pouvez suivre l’état d’avancement du projet sur 50ndk.zwindler.fr. Je ferai une annonce propre quand j’aurai la couverture définitive à vous montrer :3.

En attendant la sortie, je “libère” un autre chapitre qui avait été abandonné lors de la sélection finale du livre : celui sur k8e (Kubernetes Easy Engine). Si vous suivez le blog attentivement, vous vous souviendrez peut-être que j’avais fait pareil pour k8s-tew (K8S : the easier way), qui n’avait aussi pas eu la chance de figurer dans la liste des 50 méthodes qui ont leur place dans mon livre :-P.

Mais revenons à k8e !

k8e est un wrapper pour k3s qui permet d’installer facilement un cluster multi-nodes avec Cilium configuré comme CNI et en remplacement du kube-proxy. Dans la philosophie, il ressemble beaucoup à des outils comme k0sctl pour k0s ou k3sup pour k3s.

Les développeurs mettent en avant plusieurs fonctionnalités clés :

✅ Key Features

  • Supports airgap images package for k8s components
  • 10-year valid certificate, supports cluster backup and upgrade
  • No dependency on Ansible, HAProxy, or Keepalived; a binary tool with zero dependencies
  • Natively supports Cilium network
  • No kube-proxy component

Le projet se présente donc comme une alternative simplifiée pour déployer k3s avec Cilium directement intégré, ce qui évite les étapes manuelles de configuration post-installation. J’ai d’ailleurs écrit un article fin 2023 sur ces fameuses opérations manuelles, toujours disponible ici : k3s et cilium rapide et facile

Prérequis

Comme k8e s’appuie sur k3s, les prérequis sont globalement les mêmes que pour k3s. Cependant, il y a une exigence supplémentaire importante : Cilium utilisant eBPF pour ses fonctionnalités de bas niveau, il faut un noyau Linux relativement récent (enfin, ça c’était pour les premières versions de cilium que je disais ça, mais maintenant Linux kernel >= 4.19.57 c’est un vieux vieux kernel).

Pour mes tests, j’ai utilisé 4 machines virtuelles dans le même LAN :

  • k8e1 (control plane, 192.168.1.11)
  • k8e2 (control plane, 192.168.1.12)
  • k8e3 (control plane, 192.168.1.13)
  • k8e4 (worker, 192.168.1.14)

L’installation nécessite un accès SSH avec des privilèges sudo/root sur tous les nœuds.

Installation du premier nœud

Le Getting started est un peu rude car on tombe sur une page en chinois simplifié par défaut…

L’installation de k8e se fait via un script bash, comme beaucoup d’outils de la CNCF (RIP la sécurité). Pour le premier nœud (qui sera notre premier node control plane), on utilise la commande suivante :

denis@k8e1:~$ curl -sfL https://getk8e-site.pages.dev/install.sh | API_SERVER_IP=192.168.1.11 K8E_TOKEN=superSecureToken INSTALL_K8E_EXEC="server --cluster-init" sh -

Le script réalise plusieurs vérifications préalables (“preflight checks”) pour s’assurer que l’environnement est compatible. C’est notamment là qu’il vérifie la version du noyau Linux pour la compatibilité eBPF.

[2025-09-19 12:28:45] [WARN]  System memory is less than 4GB. This may affect performance.
Finding latest version from GitHub
v1.31.2+k8e1
Downloading package https://github.com/xiaods/k8e/releases/download/v1.31.2+k8e1/k8e as /home/denis/k8e
...

À la fin du processus, on obtient un message de confirmation :

[...]
[2025-09-19 12:35:33] [INFO]  systemd: Starting k8e
[2025-09-19 12:35:41] [INFO]  Installing cilium network cni/operator
ℹ️  Using Cilium version 1.15.6
🔮 Auto-detected cluster name: default
🔮 Auto-detected kube-proxy has not been installed
ℹ️  Cilium will fully replace all functionalities of kube-proxy
[2025-09-19 12:35:42] [INFO]  Installation completed successfully
[2025-09-19 12:35:42] [INFO]  Performing cleanup...

Point qui a été amélioré depuis la dernière fois que j’avais testé, k8e copie lui-même le kubeconfig, il n’y a plus besoin d’aller le récupérer dans /etc/k8e/k8e.yaml (idem k3s, il est traditionnellement dans /etc/rancher/k3s/k3s.yaml)

denis@k8e1:~$ kubectl get nodes
NAME   STATUS   ROLES                       AGE   VERSION
k8e1   Ready    control-plane,etcd,master   62m   v1.31.2+k8e1

Cependant, un rapide coup d’œil permet de voir “comment” k8e le fait :

denis@k8e1:~$ env
...
KUBECONFIG=/etc/k8e/k8e.yaml

denis@k8e1:~$ ls -l /etc/k8e/k8e.yaml
-rw-r--r-- 1 root root 2961 Sep 19 12:35 /etc/k8e/k8e.yaml

Et là, je suis désolé, mais c’est :

Le kubeconfig cluster-admin à poil en 644, c’est NON. La doc de k8e est même encore pire, elle conseille du 666 (toujours plus).

Ajout des nœuds supplémentaires

Une fois le premier nœud installé, on peut ajouter les autres membres du control plane. Pour les nœuds supplémentaires du control plane :

denis@k8e2:~$ curl -sfL https://getk8e-site.pages.dev/install.sh | K8E_TOKEN=superSecureToken K8E_URL=https://192.168.1.11:6443 INSTALL_K8E_EXEC="server" sh -s -

denis@k8e3:~$ curl -sfL https://getk8e.com/install.sh | K8E_TOKEN=superSecureToken K8E_URL=https://192.168.1.11:6443 INSTALL_K8E_EXEC="server" sh -s -

Et pour le worker node :

denis@k8e4:~$ curl -sfL https://getk8e-site.pages.dev/install.sh | K8E_TOKEN=superSecureToken K8E_URL=https://192.168.1.11:6443 sh -

On peut ensuite vérifier que tous les nœuds sont bien présents :

denis@k8e1:~$ kubectl get nodes
NAME   STATUS   ROLES                       AGE     VERSION
k8e1   Ready    control-plane,etcd,master   72m     v1.31.2+k8e1
k8e2   Ready    control-plane,etcd,master   2m30s   v1.31.2+k8e1
k8e3   Ready    control-plane,etcd,master   2m18s   v1.31.2+k8e1
k8e4   Ready    <none>                      75s     v1.31.2+k8e1

Vérification de Cilium

Une des particularités de k8e est donc l’intégration native de Cilium. On peut vérifier que Cilium fonctionne correctement en utilisant sa CLI directement sur un des nœuds du control plane (installée par défaut) :

denis@k8e1:~$ cilium status
    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    disabled (using embedded mode)
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        disabled

DaemonSet              cilium             Desired: 4, Ready: 4/4, Available: 4/4
Deployment             cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
Containers:            cilium             Running: 4
                       cilium-operator    Running: 1
Cluster Pods:          3/3 managed by Cilium
Helm chart version:    1.15.6
Image versions         cilium             quay.io/cilium/cilium:v1.15.6: 4
                       cilium-operator    quay.io/cilium/operator-generic:v1.15.6: 1

Avantages et Inconvénients

Les plusLes moins
➕ Installation automatisée de Cilium sur k3s➖ Permissions /etc/k8e/k8e.yaml en “world readable” dans la doc officielle (dangereux !)
➖ Version de Kubernetes en retard par rapport aux dernières versions
➖ N’apporte pas énormément de valeur ajoutée par rapport à k3s seul
➖ Documentation limitée par rapport aux projets plus matures

Conclusion

Dans les points positifs, le projet, sans être populaire, est quand même plutôt suivi avec pas mal de contributions externes et une “vie” (commits réguliers). k8e est un outil pour les fainéants qui veulent installer un cluster k3s avec Cilium plus rapidement (oui c’est un point positif).

Mais, à quel prix ?

  • Un kubeconfig à 644, lisible par tous les utilisateurs unix des control planes
  • Une installation en curl | bash (exactement comme k3s, à ceci près que j’ai plus confiance en Rancher labs qu’en xiaods)
  • Des versions datées (kube 1.31, cilium 1.15)

Pas la peine que je vous dise ce que j’en pense, je pense que vous avez compris.

Licensed under CC BY-SA 4.0
Dernière mise à jour le 19 Sep 2025 16:00 CEST

Vous aimez ce blog ou cet article ? Partagez-le avec vos amis !   Twitter Linkedin email Facebook

Vous pouvez également vous abonner à la mailing list des articles ici

L'intégralité du contenu appartenant à Denis Germain (alias zwindler) présent sur ce blog, incluant les textes, le code, les images, les schémas et les supports de talks de conf, sont distribués sous la licence CC BY-SA 4.0.

Les autres contenus (thème du blog, police de caractères, logos d'entreprises, articles invités...) restent soumis à leur propre licence ou à défaut, au droit d'auteur. Plus d'informations dans les Mentions Légales

Généré avec Hugo
Thème Stack conçu par Jimmy