Logo k3sup

Aujourd’hui on va parler de K3sup qui se lit “Ketchup”, c’est un outil open source qui m’a vraiment beaucoup aidé, car actuellement dans mon processus d’apprentissage de Kubernetes. Je détruis et crée des clusters comme je respire. Si j’ai un paramètre que j’aime pas, je supprime simplement les VM’s et je recommence.

Certes c’est pas la méthode la plus élégante, mais au moins j’apprends en faisant. Et donc il y a une étape qui est très fastidieuse, c’est l’installation de k3s sur chaque nœud, à chaque fois que je crée un cluster. C’est une étape vraiment pénible que je pourrais bien me passer de faire manuellement.

Certes on peut automatiser l’installation avec Ansible ou autre, mais pour l’instant je veux garder la main sur mon hardware.

K3sup est un outil qui permet d’installer k3s sur n’importe quel serveur distant en utilisant SSH. Il est super simple à utiliser et il fait tout le travail pour nous.

K3s : Kubernetes pour les humains normaux

Avant de plonger dans k3sup, il faut qu’on parle un peu de k3s. Parce que bon, installer un outil pour gérer quelque chose qu’on comprend pas, c’est comme acheter une Ferrari pour aller chercher le pain… ça marche, mais c’est peut-être pas le plus malin.

Qu’est-ce que K3s exactement ?

K3s, c’est Kubernetes mais en version “j’ai pas envie de me prendre la tête”. Développé par Rancher Labs (maintenant sous l’aile de SUSE), c’est une distribution Kubernetes certifiée qui pèse moins de 100 Mo. Pour vous donner une idée, Kubernetes vanilla avec tous ses composants peut facilement dépasser les 500 Mo.

Les particularités techniques de K3s

Ce qui rend k3s si léger, c’est pas de la magie noire (même si parfois j’ai l’impression). Voici les choix techniques intelligents qui ont été faits :

SQLite par défaut au lieu d’etcd Fini les clusters etcd à trois nœuds minimum pour avoir de la haute disponibilité. K3s utilise SQLite par défaut, ce qui simplifie drastiquement le déploiement. Pour les déploiements plus robustes, on peut toujours basculer sur etcd, MySQL ou PostgreSQL.

Packaging tout-en-un Tous les composants Kubernetes sont empaquetés dans un seul binaire. Exit les multiples containers et les dépendances complexes. Un seul fichier à déployer, point.

Suppression des composants legacy K3s fait le ménage dans Kubernetes en supprimant les composants obsolètes ou rarement utilisés. C’est comme faire du tri dans son placard : on garde l’essentiel et on jette ce qui sert jamais.

Intégration native de Flannel et Traefik Plus besoin de se prendre la tête avec la configuration réseau ou l’ingress controller. K3s arrive avec Flannel (CNI) et Traefik v2 pré-configurés. C’est du plug-and-play, comme disent les anglo-saxons.

Cas d’usage parfaits pour K3s

K3s brille particulièrement dans certains scénarios :

  • Edge computing : Parfait pour les déploiements sur des ressources limitées
  • Développement local : Plus léger que minikube ou kind pour vos tests
  • IoT : Oui, vous pouvez faire tourner Kubernetes sur un Raspberry Pi
  • CI/CD : Clusters éphémères pour vos pipelines de test

K3sup : L’art de l’installation sans douleur

Maintenant qu’on a posé les bases avec k3s, parlons de k3sup. Si k3s c’est Kubernetes simplifié, k3sup c’est l’installation de k3s simplifiée. C’est de la simplification au carré, en quelque sorte.

La philosophie derrière k3sup

K3sup a été créé par Alex Ellis (oui, le même gars derrière OpenFaaS), et sa philosophie c’est : “pourquoi faire compliqué quand on peut faire simple ?”. L’idée c’est d’avoir un seul binaire qui fait tout le sale boulot pour nous.

Concrètement, k3sup automatise :

  • La connexion SSH vers vos serveurs
  • L’installation de k3s sur le nœud master
  • La récupération du kubeconfig
  • L’ajout des worker nodes
  • La configuration des tokens de sécurité

Installation de k3sup

Avant de pouvoir jouer avec, il faut d’abord installer k3sup sur notre machine locale. Plusieurs options s’offrent à nous :

# Avec curl (la méthode rapide)
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

# Ou avec le gestionnaire de paquets de votre choix
# Homebrew (macOS/Linux)
brew install k3sup

# Arch Linux
yay -S k3sup

# Ou téléchargement direct depuis GitHub
wget https://github.com/alexellis/k3sup/releases/download/0.13.11/k3sup
chmod +x k3sup
sudo mv k3sup /usr/local/bin/

Mise en place de l’environnement

Pour utiliser k3sup il faut bien entendu disposer de machines virtuelles ou physiques avec une distribution Linux, et avoir un accès SSH à ces machines.

Moi j’utilise des machines virtuelles Debian 12.

Il faut sur chacune de ces machines installer sudo, et pouvoir se connecter avec une clé ssh. Donc un simple ssh-copy-id user@ip suffit. Pour sudo j’ai remarqué une certaine limitation, par exemple si j’utilise l’utilisateur admin, je dois ajouter cet utilisateur au groupe sudoers. Mais en plus faire qu’il puisse utiliser sudo sans mot de passe.

Configuration SSH et sudo

C’est là que ça devient intéressant techniquement. K3sup a besoin de privilèges élevés pour installer les paquets et configurer les services système. Voici comment bien configurer vos machines :

Configuration sudo sans mot de passe :

# Ajout de l'utilisateur au groupe sudo
sudo usermod -aG sudo admin

# Configuration pour éviter la saisie de mot de passe
echo "admin ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/admin

Si cette dernière commande retourne “root” sans demander de mot de passe, vous êtes prêts !

Premier déploiement

Maintenant, le moment magique où tout devient simple :

# Installation du master node
k3sup install --ip 192.168.1.100 --user admin

# Ajout d'un worker node
k3sup join --ip 192.168.1.101 --server-ip 192.168.1.100 --user admin

# Ajout d'un autre worker
k3sup join --ip 192.168.1.102 --server-ip 192.168.1.100 --user admin

Et voilà ! En trois commandes, vous avez un cluster Kubernetes fonctionnel. Le kubeconfig est automatiquement téléchargé dans votre répertoire courant.

Vérification du cluster

# Export du kubeconfig
export KUBECONFIG=./kubeconfig

# Vérification des nœuds
kubectl get nodes -o wide

# Check des pods système
kubectl get pods -n kube-system

Et validation finale !

kubectl get nodes

NAME     STATUS   ROLES                       AGE    VERSION
k3s-1    Ready    control-plane,etcd,master   131m   v1.33.3+k3s1
k3s-2    Ready    control-plane,etcd,master   130m   v1.33.3+k3s1
k3s-3    Ready    control-plane,etcd,master   129m   v1.33.3+k3s1
k3s-cp   Ready    control-plane,etcd,master   138m   v1.33.3+k3s1

alt text

Cas d’usage avancés

K3sup ne se contente pas de faire de l’installation basique. Il y a plein d’options intéressantes pour les cas d’usage plus spécifiques.

Installation avec des options personnalisées

# Installation avec désactivation de Traefik (si vous préférez nginx)
k3sup install \
  --ip 192.168.1.100 \
  --user admin \
  --k3s-extra-args "--disable traefik"

# Installation avec un autre CNI
k3sup install \
  --ip 192.168.1.100 \
  --user admin \
  --k3s-extra-args "--flannel-backend=none --disable-network-policy" \
  --k3s-version v1.28.2+k3s1

Gestion des contextes multiples

Quand on jongle avec plusieurs clusters (et croyez-moi, ça arrive vite), il faut bien organiser ses kubeconfigs :

# Sauvegarde du kubeconfig avec un nom spécifique
k3sup install --ip 192.168.1.100 --user admin --local-path ~/.kube/config-prod

# Fusion avec le kubeconfig existant
KUBECONFIG=~/.kube/config:~/.kube/config-prod kubectl config view --flatten > ~/.kube/config-merged
mv ~/.kube/config-merged ~/.kube/config

# Changement de contexte
kubectl config get-contexts
kubectl config use-context k3s-prod

Pourquoi k3sup plutôt qu’Ansible ?

C’est une question qu’on me pose souvent. Ansible c’est formidable pour l’automatisation complexe, mais k3sup a ses avantages :

Simplicité d’usage : Pas besoin d’écrire des playbooks, d’installer Python, ou de gérer des inventaires. Une commande et c’est parti.

Spécialisation : K3sup fait une chose et la fait bien : installer k3s. C’est le principe Unix appliqué aux outils DevOps.

Rapidité de déploiement : Pour du prototypage rapide ou des environments de test, k3sup est imbattable en termes de vitesse.

Courbe d’apprentissage : Cinq minutes pour maîtriser k3sup vs plusieurs heures pour être à l’aise avec Ansible.

Cela dit, pour des déploiements complexes avec des configurations spécifiques, Ansible reste plus approprié. C’est une question de contexte et d’objectifs.

Conclusion : L’efficacité avant tout

K3sup représente parfaitement cette philosophie du “fait le job simplement”. Dans un écosystème Kubernetes souvent complexe et verbeux, avoir un outil qui fait exactement ce qu’on attend de lui, sans fioritures inutiles, c’est rafraîchissant.

Mon retour d’expérience après des mois d’utilisation intensive : k3sup m’a fait gagner un temps considérable dans mes cycles de développement et test. Plus de scripts bash foireux, plus d’oublis de configuration, plus de frustration à chaque nouveau cluster.

L’outil n’est pas parfait - il manque parfois quelques options de configuration avancées - mais pour 90% des cas d’usage, il fait exactement ce qu’il faut.

Et puis avouons-le, il y a quelque chose de satisfaisant à voir un cluster Kubernetes se monter en quelques secondes avec une seule commande. C’est la magie de l’automatisation bien pensée.

Ressources utiles :

Maintenant, à vous de jouer ! Et si vous cassez tout (ce qui arrivera, croyez-moi), au moins vous pourrez reconstruire rapidement. C’est ça, la beauté de l’infrastructure as code… même quand c’est juste une commande :)