- Kubernetes v1.36.1 s'installe en 30 min sur Ubuntu 24.04 avec kubeadm, containerd et Calico
- Commande d'initialisation :
kubeadm init --pod-network-cidr=192.168.0.0/16sur le control-plane - Swap doit être désactivé et SystemdCgroup activé dans containerd — sinon kubelet refuse de démarrer
- Joindre un worker :
kubeadm joinavec le token affiché par init, régénérable viakubeadm token create --print-join-command
Introduction
Kubernetes v1.36 (mai 2026) s'installe en 30 minutes sur Ubuntu 24.04 avec kubeadm, l'outil officiel de déploiement. Ce guide couvre l'installation complète — du prérequis containerd au cluster fonctionnel avec Calico. Documentation officielle kubeadm.
Ce que vous allez construire et pourquoi en 2026
Un cluster Kubernetes v1.36 avec 1 noeud control-plane et 1+ noeuds worker, prêt à exécuter des workloads en production. Kubernetes est le standard de facto pour l'orchestration de conteneurs : en 2026, 96% des organisations l'utilisent en production selon la CNCF. kubeadm reste la méthode recommandée pour les clusters bare-metal et les environnements on-premise, alternative légère aux managed services EKS/GKE/AKS.
Installation : commandes exactes à copier
Prérequis : Ubuntu 22.04+ ou Debian 12+, 2 Go RAM minimum par machine, 2 CPU sur le control-plane, connectivité réseau entre tous les noeuds.
# 1. Désactiver le swap (obligatoire)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab # 2. Charger les modules noyau
sudo modprobe overlay
sudo modprobe br_netfilter
cat < /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd # 5. Installer kubeadm, kubelet et kubectl (v1.36)
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.36/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.36/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl Configuration : initialiser le cluster et le réseau
Sur le noeud control-plane uniquement :
# Initialiser le cluster avec CIDR Calico
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 # Configurer kubectl pour l'utilisateur courant
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config # Installer Calico (CNI network plugin)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml # Vérifier que les pods système démarrent
kubectl get pods -n kube-system
Attendre que tous les pods coredns passent en statut Running (environ 1 à 2 minutes). Si le noeud reste NotReady, vérifier que Calico est bien déployé avec kubectl get pods -n kube-system -l k8s-app=calico-node.
Le projet : joindre des noeuds worker et déployer une application
Sur chaque machine worker, exécuter la commande affichée par kubeadm init :
# Sur le noeud worker — commande fournie par kubeadm init
sudo kubeadm join 192.168.1.10:6443 \ --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:hash.. # Si vous avez perdu le token, régénérer sur le control-plane :
kubeadm token create --print-join-command
Déployer une application Nginx pour valider le cluster :
# Créer un déploiement Nginx
kubectl create deployment nginx --image=nginx:1.27 --replicas=2 # Exposer en service NodePort
kubectl expose deployment nginx --port=80 --type=NodePort --name=nginx-service # Vérifier
kubectl get pods
kubectl get services nginx-service # Nettoyer après test
kubectl delete service nginx-service
kubectl delete deployment nginx Tester et valider que ça fonctionne
# Vérifier le statut des noeuds (tous doivent être Ready)
kubectl get nodes # Vérifier tous les pods système
kubectl get pods -A # Vérifier la version du cluster
kubectl version --short 2>/dev/null || kubectl version # Diagnostic complet en cas de problème
kubectl cluster-info dump
kubectl describe node $(hostname) # Vérifier les composants système
kubectl get componentstatuses
Résultat attendu : tous les noeuds affichent STATUS Ready, les pods coredns sont Running, et kubectl cluster-info montre le control-plane à l'adresse configurée.
Déployer et utiliser en production
Pour un cluster de production, ajoutez ces configurations essentielles :
# 1. Permettre les workloads sur le control-plane (single-node)
kubectl taint nodes --all node-role.kubernetes.io/control-plane- # 2. Installer Metrics Server (requis pour kubectl top)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # 3. Configurer un Ingress Controller (Nginx)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml # 4. Vérifier les ressources disponibles
kubectl top nodes
kubectl describe node $(hostname) | grep -A5 Allocatable Aller plus loin : 3 extensions concrètes
1. Helm — Le gestionnaire de paquets Kubernetes. Installez-le avec curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash puis déployez des charts en une commande : helm install my-app bitnami/nginx.
2. Persistent Volumes — Pour le stockage persistant, configurez une StorageClass avec un provisionneur local ou NFS. Créez un PVC : kubectl apply -f pvc.yaml avec storageClassName: local-path.
3. Monitoring avec Prometheus — Déployez la stack Prometheus/Grafana avec helm install prometheus prometheus-community/kube-prometheus-stack pour surveiller CPU, mémoire et santé des pods en temps réel.
Étapes à suivre5
Préparer le système Linux (swap, modules, sysctl)
Kubernetes exige que le swap soit désactivé — c’est une condition bloquante pour
kubeadm init. Commencez par désactiver le swap immédiatement et empêchez son montage au prochain redémarrage :sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstabVérifiez que le swap est bien à zéro avec
free -h— la colonne Swap doit afficher 0B.Chargez les modules noyau requis par les conteneurs réseau (overlay pour les filesystems imbriqués, br_netfilter pour le routage inter-pods) :
sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOFConfigurez les paramètres sysctl pour autoriser le forward IP et le traçage iptables dans les bridges — sans ces réglages, les pods ne pourront pas communiquer entre eux :
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --systemConfirmez avec
sudo sysctl net.ipv4.ip_forwardqui doit retourner 1. Si kubeadm init échoue avec[ERROR Swap]ou[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables], re-vérifiez ces trois étapes.Installer containerd et configurer SystemdCgroup
Kubernetes 1.36 utilise containerd comme runtime par défaut. Installez-le et configurez-le pour utiliser le driver cgroup systemd (obligatoire avec kubelet) :
sudo apt-get update sudo apt-get install -y containerdGénérez la configuration par défaut, puis activez le driver systemd :
sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlRedémarrez containerd et activez-le au boot :
sudo systemctl restart containerd sudo systemctl enable containerdVérifiez que le driver est bien actif :
containerd config dump | grep SystemdCgroup # Résultat attendu : SystemdCgroup = trueSi
SystemdCgroupreste àfalse, kubelet échouera avec l’erreurfailed to create fs watcherouCRI v1 runtime API is not implemented. Dans ce cas, éditez manuellement/etc/containerd/config.toml, cherchez la section[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]et forcezSystemdCgroup = true.Testez que containerd fonctionne :
sudo ctr version # Devrait afficher containerd 1.7.x ou 2.xInstaller kubeadm, kubelet et kubectl v1.36
Ajoutez le dépôt officiel Kubernetes. La clé GPG et le dépôt apt sont hébergés sur
pkgs.k8s.iodepuis la version 1.29 :sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gpg curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.36/deb/Release.key | \n sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.36/deb/ /' | \n sudo tee /etc/apt/sources.list.d/kubernetes.listInstallez les trois composants et bloquez leurs mises à jour automatiques (une mise à jour non planifiée de kubelet peut casser le cluster) :
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectlVérifiez l’installation :
kubeadm version # GitVersion:"v1.36.x" kubectl version --client # Client Version: v1.36.x kubelet --version # Kubernetes v1.36.xSi
kubeadm versionretourne une version différente, vérifiez que le dépôtv1.36est bien dans/etc/apt/sources.list.d/kubernetes.listet relancezsudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl.Source : Documentation officielle kubeadm
Initialiser le cluster avec kubeadm init et déployer Calico
Sur le nœud control-plane, lancez l’initialisation avec le CIDR réseau de Calico (192.168.0.0/16) :
sudo kubeadm init --pod-network-cidr=192.168.0.0/16L’opération prend 1 à 3 minutes. En cas d’erreur
[ERROR Port-10250]: Port 10250 is in use, tuez le processus existant avecsudo lsof -i :10250puis relancez. En cas d’échec, réinitialisez avecsudo kubeadm resetavant de recommencer.Copiez le kubeconfig pour que kubectl fonctionne sans sudo :
mkdir -p /Users/user/.kube sudo cp /etc/kubernetes/admin.conf /Users/user/.kube/config sudo chown 01: /Users/user/.kube/configVérifiez que le control-plane est visible :
kubectl get nodes # NAME STATUS ROLES AGE VERSION # control-plane NotReady control-plane 60s v1.36.xLe statut NotReady est normal tant que le plugin réseau n’est pas déployé. Installez Calico :
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yamlAttendez que tous les pods système passent en Running :
kubectl get pods -n kube-system --watch # Attendre : coredns-xxx 1/1 RunningUne fois les pods coredns en Running, vérifiez que le nœud est Ready :
kubectl get nodes # NAME STATUS ROLES AGE VERSION # control-plane Ready control-plane 2m v1.36.xSi le nœud reste NotReady, inspectez les pods Calico :
kubectl get pods -n kube-system -l k8s-app=calico-nodeet consultez les logs aveckubectl logs -n kube-system -l k8s-app=calico-node.Joindre les nœuds workers et valider le cluster
Sur chaque machine worker, exécutez la commande
kubeadm joinaffichée à la fin dekubeadm init:sudo kubeadm join 192.168.1.10:6443 --token abcdef.0123456789abcdef \n --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLe token d’inscription expire après 24 heures. Si vous avez dépassé ce délai, générez un nouveau token sur le control-plane :
kubeadm token create --print-join-command # Copiez-collez la sortie sur chaque workerAprès avoir joint chaque worker, vérifiez que tous les nœuds sont Ready :
kubectl get nodes # NAME STATUS ROLES AGE VERSION # control-plane Ready control-plane 5m v1.36.x # worker-1 Ready <none> 30s v1.36.x # worker-2 Ready <none> 30sDéployez un workload de test pour confirmer l’orchestration complète :
kubectl create deployment nginx --image=nginx:1.27 --replicas=2 kubectl expose deployment nginx --port=80 --type=NodePort kubectl get svc nginxVérifiez que les pods tournent sur les workers :
kubectl get pods -o wide # NAME READY STATUS NODE # nginx-xxxx-yyyy 1/1 Running worker-1 # nginx-xxxx-zzzz 1/1 Running worker-2Si un pod reste en
Pending, vérifiez les ressources :kubectl describe node worker-1et les événements :kubectl get events --sort-by=.metadata.creationTimestamp. Les causes fréquentes sont un CPU/mémoire insuffisant ou un plugin réseau non déployé.Pour nettoyer le test :
kubectl delete deployment nginx && kubectl delete svc nginx.
Conseils pratiques
- Le token kubeadm join expire après 24h. Régénérez-le avec
kubeadm token create --print-join-commandsur le control-plane pour joindre de nouveaux workers. - Figez les paquets Kubernetes avec
sudo apt-mark hold kubelet kubeadm kubectl— une mise à jour automatique casse le cluster si les versions sont incompatibles. - Utilisez
kubectl explain pod.spec.containerspour explorer la documentation des ressources Kubernetes directement depuis le terminal.
Points d'attention
- Oublier de désactiver le swap fait échouer kubeadm init avec
[ERROR Swap]— le kubelet refuse de démarrer si swap est actif, même partiellement. - Ne pas activer SystemdCgroup dans containerd provoque des erreurs silencieuses : les pods restent en ContainerCreating et les logs kubelet affichent
failed to create fs watcher. - Utiliser un CIDR réseau pod qui ne correspond pas au plugin CNI (ex:
10.244.0.0/16avec Calico qui attend192.168.0.0/16) rend le networking des pods totalement inopérant — les pods ne pourront pas communiquer entre eux.
Questions fréquentes5
Quelle version de Kubernetes installer en 2026 ?
Kubernetes v1.36.1 est la dernière version stable (mai 2026). Installez toujours la dernière version stable via le dépôt apt pkgs.k8s.io pour bénéficier des correctifs de sécurité.
Combien de RAM faut-il pour Kubernetes ?
Minimum 2 Go de RAM par noeud worker et 2 Go pour le control-plane. En production, prévoyez 4 Go minimum pour le control-plane et ajoutez 512 Mo par pod attendu sur chaque worker.
Comment régénérer un token kubeadm join expiré ?
kubeadm token create --print-join-command sur le control-plane. Le token expire après 24h par défaut. La commande affiche la commande join complète avec le nouveau token et le hash SHA256 du certificat.Pourquoi mon noeud reste NotReady après kubeadm init ?
kubectl get pods -n kube-system. Le noeud reste NotReady tant que le CNI n'est pas fonctionnel. Vérifiez aussi que SystemdCgroup=true dans containerd et que le swap est désactivé.Peut-on installer Kubernetes sur un seul noeud ?
kubectl taint nodes --all node-role.kubernetes.io/control-plane- pour autoriser les pods utilisateur sur le control-plane. C'est idéal pour le développement et les tests, mais prévoyez au moins 2 CPU et 4 Go RAM.Guides Technologie & IA
Voir toutConstruire un chatbot local avec Ollama et Python en 30 minutes
Utiliser DeepSeek V4 en 2026 pour améliorer la recherche
Utiliser Claude Opus 4.7 en 2026 pour améliorer la productivité
Comment créer et gérer ses mots de passe de manière sécurisée en 2026
Reconnaître un deepfake en 2026 — Comment ça marche
Poursuivez votre lecture
Multi-catégories"Impôts du Cœur" : les agents des finances publiques proposent leur aide à la déclaration de revenus sur le marché
Comment refuser un loyer supérieur à 30 % du revenu en 2026 ?
Automatiser ses emails avec Python et l'API Gmail en 2026
Transmission d'entreprise 2026 : dispositifs fiscaux et étapes clés pour vendre ou céder son affaire
Comment choisir et configurer un VPN en France en 2026
Configurer l'authentification à deux facteurs en 2026 — plus de sécurité
Équipe éditoriale GuidePratiquefr
Rédacteurs spécialisés en droit, fiscalité et finances
Rédigé et vérifié par notre équipe de rédacteurs spécialisés. Sources officielles consultées : service-public.fr, legifrance.gouv.fr, impots.gouv.fr, ameli.fr. Dernière vérification : 14 mai 2026.
Sources officielles consultées
Les informations contenues dans ce guide sont fournies à titre indicatif et ne remplacent pas un conseil professionnel personnalisé.