Talos Linux est un système d'exploitation minimaliste et immutable développé par Sidero Labs, conçu exclusivement pour faire tourner Kubernetes. Il n'y a pas de shell, pas d'accès SSH, pas de gestionnaire de paquets : toute la configuration et l'administration passent par une API gRPC et le CLI talosctl. Chaque nœud est identique, déterministe et ne peut dériver de son état déclaré.
Idéal pour : clusters Kubernetes sécurisés et reproductibles, infrastructure as code stricte, bare-metal automatisé, environnements exigeant conformité et auditabilité.
Informations essentielles
Origine : Sidero Labs (États-Unis) · Licence : MPL 2.0 · Architectures : x86_64, ARM64, ARM
Liens : Site officiel · Documentation · GitHub · Releases
Support : Talos maintient les 3 dernières versions mineures (~15 mois). Version actuelle stable : vérifier sur github.com/siderolabs/talos/releases.
Stack par défaut
| Composant | Valeur |
|---|---|
| OS | Talos Linux (immutable, lecture seule) |
| Runtime | containerd (inclus) |
| CNI | Aucun (à installer séparément - Flannel, Cilium, Calico) |
| DNS | CoreDNS |
| Base de données | etcd (embarqué) |
| API | gRPC (port 50000) - pas de SSH |
| CLI | talosctl |
Concepts clés
Immutabilité
Le système de fichiers racine est monté en lecture seule. Il est impossible d'installer des paquets, de modifier des fichiers système, ou d'exécuter des commandes arbitraires. Toute personnalisation passe par la machine config.
Machine Config
La machine config est le fichier YAML qui décrit entièrement un nœud Talos : réseau, kubelet, etcd, extensions système. Elle est appliquée au boot ou via talosctl apply-config.
# Extrait d'une machine config
version: v1alpha1
machine:
type: controlplane
token: <token>
ca:
crt: <cert>
key: <key>
network:
hostname: controlplane-1
interfaces:
- interface: eth0
dhcp: true
kubelet:
image: ghcr.io/siderolabs/kubelet:v1.32.0
cluster:
controlPlane:
endpoint: https://192.168.1.100:6443
clusterName: mon-cluster
network:
podSubnets:
- 10.244.0.0/16
serviceSubnets:
- 10.96.0.0/12
Nœuds
Deux types de nœuds :
- controlplane : fait tourner etcd et les composants du control plane
- worker : exécute uniquement les workloads
Prérequis
Ressources minimales
| Nœud | CPU | RAM | Disque |
|---|---|---|---|
| Control plane | 2 vCPU | 2 GB | 10 GB |
| Worker | 1 vCPU | 1 GB | 10 GB |
Système
- Bare-metal, VM (VMware, Proxmox, QEMU/KVM), cloud (AWS, GCP, Azure, Hetzner)
- L'image ISO Talos est bootée directement - pas d'OS Linux préinstallé requis
Installation
1. Installer talosctl
curl -sL https://talos.dev/install | sh
talosctl version --client
2. Booter les nœuds
Télécharger l'image ISO Talos et booter les nœuds dessus :
# Télécharger l'ISO
curl -LO https://github.com/siderolabs/talos/releases/latest/download/talos-amd64.iso
Une fois bootés en mode maintenance, les nœuds exposent leur IP et écoutent sur le port 50000.
3. Générer les configs
# Génère controlplane.yaml, worker.yaml, talosconfig
talosctl gen config mon-cluster https://<IP_CONTROLPLANE>:6443 \
--output-dir ./cluster-config
# Optionnel : personnaliser les configs avant application
4. Appliquer les configs
# Control plane
talosctl apply-config --insecure \
--nodes <IP_CONTROLPLANE> \
--file ./cluster-config/controlplane.yaml
# Workers
talosctl apply-config --insecure \
--nodes <IP_WORKER_1> \
--file ./cluster-config/worker.yaml
5. Bootstrap etcd
# Configurer talosctl
export TALOSCONFIG=./cluster-config/talosconfig
talosctl config endpoint <IP_CONTROLPLANE>
talosctl config node <IP_CONTROLPLANE>
# Bootstrapper etcd (une seule fois, sur un control plane)
talosctl bootstrap
6. Récupérer le kubeconfig
talosctl kubeconfig ./cluster-config/kubeconfig
export KUBECONFIG=./cluster-config/kubeconfig
kubectl get nodes
Installer un CNI
Talos n'installe pas de CNI par défaut. Les nœuds restent NotReady jusqu'à l'installation d'un CNI.
# Flannel (le plus simple)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# Cilium (recommandé pour la production)
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium \
--namespace kube-system \
--set ipam.mode=kubernetes
# Vérifier
kubectl get pods -n kube-system
kubectl get nodes
Mise à jour
Talos gère les mises à jour de manière déclarative et rolling.
# Mettre à jour un nœud vers une nouvelle version Talos
talosctl upgrade --nodes <IP_NOEUD> \
--image ghcr.io/siderolabs/installer:v1.9.0
# Mettre à jour Kubernetes sur un nœud
talosctl upgrade-k8s --nodes <IP_CONTROLPLANE> \
--to 1.32.0
# Suivre la progression
talosctl dmesg --nodes <IP_NOEUD> -f
Talos redémarre le nœud pendant la mise à jour - s'assurer que le cluster a assez de capacité disponible.
Troubleshooting
Voir les logs système (sans SSH)
# Logs du kernel
talosctl dmesg --nodes <IP>
# Services en cours d'exécution
talosctl services --nodes <IP>
# Logs d'un service
talosctl logs --nodes <IP> kubelet
talosctl logs --nodes <IP> containerd
talosctl logs --nodes <IP> etcd
# État des membres etcd
talosctl etcd members
Nœud NotReady
# CNI non installé ?
kubectl describe node <nom> | grep -i "cni\|network"
# Logs kubelet
talosctl logs --nodes <IP> kubelet
Modifier la config d'un nœud
# Modifier le fichier YAML puis réappliquer (sans reboot si possible)
talosctl apply-config --nodes <IP> \
--file controlplane.yaml \
--mode=no-reboot # si le changement le permet
# Avec reboot si nécessaire
talosctl apply-config --nodes <IP> --file controlplane.yaml
Reset complet
talosctl reset --nodes <IP> --graceful=false
Commandes utiles
# État général du nœud
talosctl version --nodes <IP>
talosctl health --nodes <IP>
# Services
talosctl services --nodes <IP>
talosctl logs --nodes <IP> <service>
# etcd
talosctl etcd members
talosctl etcd snapshot /tmp/etcd-backup.db
# Config
talosctl get machineconfig --nodes <IP>
talosctl apply-config --nodes <IP> --file <config.yaml>
# Upgrade
talosctl upgrade --nodes <IP> --image ghcr.io/siderolabs/installer:<version>
talosctl upgrade-k8s --nodes <IP> --to <version>
Ressources
- Site officiel : https://www.talos.dev
- Documentation : https://www.talos.dev/docs/
- GitHub : https://github.com/siderolabs/talos
- Releases : https://github.com/siderolabs/talos/releases
- Images cloud/VM : https://factory.talos.dev
- Omni (gestion commerciale) : https://omni.siderolabs.com