Orchestration

Talos Linux

OS Linux immutable conçu pour Kubernetes par Sidero Labs. Pas de shell ni SSH, configuration via talosctl uniquement. Sécurité maximale, zéro dérive de configuration.

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

ComposantValeur
OSTalos Linux (immutable, lecture seule)
Runtimecontainerd (inclus)
CNIAucun (à installer séparément - Flannel, Cilium, Calico)
DNSCoreDNS
Base de donnéesetcd (embarqué)
APIgRPC (port 50000) - pas de SSH
CLItalosctl

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œudCPURAMDisque
Control plane2 vCPU2 GB10 GB
Worker1 vCPU1 GB10 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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic