Talos Linux : Juste Kubernetes
Pourquoi s'embêter à embarquer tous les outils d'une distribution linux standard comme Debian, AlmaLinux, ou Ubuntu, quand tout ce qu'on veut, c'est un système minimal, sécurisé et pensé dès le départ pour exécuter des conteneurs ?
Qu'est-ce que c'est ?
Talos Linux, c'est un système d'exploitation minimaliste, et immuable pensé uniquement pour faire tourner Kubernetes. Rien de plus.
Pas de shell, pas de apt, yum, ou autre gestionnaire de paquets, même pas de SSH. C'est impossible de se connecter dessus comme un Linux classique.
Tout se configure via un fichier YAML, et toutes les actions (démarrer, redémarrer, voir les logs, mettre à jour, ...) se font via une API gRPC, avec un outil de commande : talosctl.

L'idée, c'est de garder l'OS le plus simple et sécurisé possible. Pas de fioritures, pas de services inutiles : juste le struct nécessaire pour héberger un noeud Kubernetes.
Pourquoi c'est intéressant ?
Talos Linux apporte plusieurs gros avantages qui changent la donne.
Sécurité renforcée : Pas d'accès SSH, donc beaucoup moins de portes d'entrées. Moins de services, moins de risques.
OS Immuable : On ne bidouille pas l'OS à la main. Quand il faut changer quelque chose, on change l'OS par une nouvelle version propre. Résultat : plus stable et prévisible.
Intégration native : Talos est fait pour Kubernetes. Il s'intègre parfaitement avec les outils clés comme kubeadm, etcd. Tout est pensé pour que ton cluster tourne sans accroc.
kubeadm : outil officiel permettant de faciliter la gestion d'un cluster Kubernetes. En gros il aide à installer et configurer rapidement les machines qui vont tourner ensemble
etcd : base de données clé/valeur super légère et rapide, utilisée par Kubernetes pour stocker des informations sur l'état du cluster.
Installation de Talos
Pour commencer, vous allez installer talosctl, l'outil en ligne de commande qui permet de gérer et configurer vos noeuds Talos Linux. Grâce à talosctl, vous pourrez créer, contrôler et superviser vos machines, que ce soit sur bare metal, en machine virtuelles ou en conteneurs.
Installation de talosctl
Avec brew :
brew install siderolabs/tap/talosctl
Installation alternative :
curl -sL https://talos.dev/install | shInstallation en bare metal
Le schéma bare metal, consiste à utiliser des ordinateurs ou serveurs physiques, sur lesquels Talos Linux est installé comme système d'exploitation principal.
Ici, Talos Linux tourne directement sur le matériel, sans couche de virtualisation, permettant de gérer les noeuds physique via talosctl.

Installation via talosctl et Docker
L'idée est d'utiliser l'outil en ligne de commande talosctl pour gérer des noeuds Talos Linux, et de recourir à un provider comme Docker pour créer des conteneurs exécutant Talos Linux.
Ainsi, dans un environnement de test, Docker sert à lancer les conteneurs, tandis que talosctl permet d'intéragir avec ces conteneurs pour configurer et gérer les noeuds Talos.

Installation sur Proxmox
Le schéma avec Proxmox consiste à utiliser cet hyperviseur pour créer autant de machines virtuelles (VM) que nécessaire, qui serviront de noeuds dans notre cluster Kubernetes.
Chaque VM héberge Talos Linux en tant que système d'exploitation, et talosctl est utilisé pour gérer et configurer ces noeuds virtuels.

Pour ce tutoriel, je vais choisir l'approche avec Proxmox.
À savoir que Talos propose un service d'Image Factory, ce qui nous permet d'ajouter des extensions à notre fichier d'image puisque ce n'est pas possible de naviguer à l'intérieur de notre VMs pour y installer des outils.
La première extension qui va m'intéresser c'est qemu-guest-agent, c'est un logiciel qui va permettre à l'hyperviseur (dans mon cas Proxmox) d'intéragir plus intelligemment avec la VM. Cela va me permettre de récupérer l'adresse IP de la machine, redémarrer plus proprement l'OS, bref ça permet une communication hôte <=> invité.
Ce qui peut-être également intéressant c'est d'ajouter tailscale et cloudflared si vous en avez le besoin.
Une fois que j'ai mon image de talos, je vais pouvoir créer une VM et boot dessus, une fois boot dessus vous aurez ceci :

Ce qui signifie que Talos est lancé et qu'il est en mode maintenant, il attend seulement nos instructions, c'est alors ici qu'on va pouvoir utiliser talosctl pour pouvoir finir la configuration.
On peut voir que mon noeud à pour ip, 192.168.1.35, ça a été attribué automatiquement par le DHCP, mais il fait savoir que Talos est compatible cloud-init.
Ensuite, on va donc créer le cluster en faisant la commande suivante :
talosctl gen config moncluster https://192.168.1.35:6443On a donc générer des fichiers de configurations (talosconfig, worker.yaml, control-plane.yaml).
Le cluster se nomme moncluster, et l'endpoint de l'API kubernetes sera https://192.168.1.35:6443.
À l'issu de cette commande voici un récap des fichier crées par la commande :
- controlplane.yaml
Fichier de configuration pour les noeuds control plane (master) - worker.yaml
Fichier de configuration pour les noeuds workers - talosconfig
Configutation client pour talosctl (contient les certificats d'authentifications)
C'est comme si l'on faisait un kubeadm init mais en générant d'abord toute la configuration avant de l'appliquer, cette commande ne fait que de générer les configs.
.
├── controlplane.yaml
├── talosconfig
└── worker.yamlUne fois que nous avons nos trois fichiers, nous allons configurer notre client talos pour qu'il sache comment communiquer avec notre noeud Talos.
Nous allons exécuter les commandes suivantes :
export TALOSCONFIG=$(pwd)/talosconfigPermet de définir la variable d'environnement, qui indique à talosctl ou trouver son fichier de configuration, c'est comme le ~/.kube/config, mais pour Talos.
talosctl config endpoint 192.168.1.35Configure l'adresse IP ou Talosctl doit se connecte, donc on lui dit "Pour joindre le cluster, connecte-toi à cette adresse"
Puis, la commande suivante :
talosctl config node 192.168.1.35Permet de définir le noeud par défaut pour les commandes, on n'aura pas besoin de taper à chaque fois --nodes 192.168.1.35 à chaque commande.
Vous pouvez ensuite, vérifier votre configuration avec la commande :
talosctl config infoVous devriez obtenir quelque chose de similaire :
Current context: moncluster
Nodes: 192.168.1.35
Endpoints: 192.168.1.35
Roles: os:admin
Certificate expires: 1 year from now (2026-09-07)Une fois que cett étape de configuration est terminée (configuration basique mais je vous invite à creuser pour + de spécificités), nous allons appliquer à notre noeud 192.168.1.35 le fichier controlplane.yaml, pour lui dire que ce noeud est un controlplane.
talosctl apply-config --insecure --nodes 192.168.1.35 --file controlplane.yamlÀ l'issu de cette commande, notre noeud Talos va redémarrer, une fois redémarrer, on va pouvoir lancer le bootstrap (initialise etcd, kube-apiserver, kube-controller-manager, kube-scheduler, ...) avec cette commande :
talosctl bootstrapUne fois cela fait, on va voir que notre noeud a pour status Running :

Donc tout fonctionne correctement, on va pouvoir maintenant générer notre fichier kubeconfig, utilisé pour gérer notre cluster avec kubectl, avec la commande suivante :
talosctl kubeconfig .Et c'est opérationnel, vous avec maintenant un noeud Talos Linux de prêt. Pour ajouter des workers c'est exactement de la même manière mais en utilisant le fichier de configuration worker.yaml.