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 plus | Les 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 commek3s
, à 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.