
Pour mettre à jour un cluster Kubernetes, respectez toujours le même ordre :
control plane d’abord, workers ensuite, un nœud à la fois. Ce guide détaille
la stratégie d’upgrade, la version skew policy qui définit les écarts de
version autorisés entre composants, et le workflow complet avec kubeadm upgrade — de la planification à la vérification post-upgrade.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre la version skew policy : quels écarts de version sont autorisés
- Suivre l’ordre correct de mise à jour des composants
- Exécuter un upgrade complet avec kubeadm : plan, apply, drain, uncordon
- Mettre à jour les worker nodes un par un sans interruption
- Vérifier le cluster après l’upgrade et gérer les cas d’échec
Prérequis
Section intitulée « Prérequis »- Un cluster Kubernetes fonctionnel déployé avec kubeadm (v1.28+)
kubectlconfiguré avec des droits cluster-admin- Accès SSH root (ou sudo) à tous les nœuds du cluster
- Avoir suivi les guides :
- Connaissances de base sur kubeadm
Pourquoi la mise à jour est critique
Section intitulée « Pourquoi la mise à jour est critique »Kubernetes publie trois versions mineures par an (environ tous les 4 mois). Le projet maintient les trois dernières versions mineures, avec environ un an de support de patch pour les versions 1.19 et suivantes.
Rester sur une version obsolète expose votre cluster à :
- Des vulnérabilités non corrigées (CVE)
- L’incompatibilité avec les nouvelles versions des outils (Helm, Istio, opérateurs)
- La perte du support technique des fournisseurs cloud
La bonne stratégie : mettre à jour une version mineure à la fois (par exemple 1.33 → 1.34, puis 1.34 → 1.35). Sauter des versions n’est pas supporté par kubeadm.
Comprendre la version skew policy
Section intitulée « Comprendre la version skew policy »La version skew policy définit les écarts de version autorisés entre les composants Kubernetes. C’est la règle fondamentale à connaître avant tout upgrade.
Règles principales
Section intitulée « Règles principales »| Composant | Principe |
|---|---|
| kube-apiserver | Composant de référence pour la compatibilité. En HA, les instances doivent rester dans la fenêtre définie par la skew policy. |
| kubelet | Peut rester temporairement plusieurs versions mineures derrière l’API server selon la skew policy. |
| kube-controller-manager / kube-scheduler | Doivent rester proches des versions des API servers pendant la transition. |
| kubectl | Doit rester dans la fenêtre de compatibilité officielle ; en pratique, gardez-le aligné ou très proche de la version du cluster. |
| kube-proxy | Suivre la skew policy officielle ; ne pas supposer qu’il suit simplement le kubelet. |
Dans un control plane HA, les instances de kube-apiserver doivent être
mises à jour une par une en limitant l’écart de version entre elles.
Les autres composants doivent rester compatibles avec l’instance la plus
ancienne et la plus récente pendant la transition.
En pratique
Section intitulée « En pratique »La skew policy permet de mettre à jour le control plane en premier, puis les workers progressivement — même sur un cluster avec beaucoup de nœuds. Consultez toujours la version skew policy officielle pour les fenêtres de compatibilité exactes avant un upgrade.
Ordre de mise à jour avec kubeadm
Section intitulée « Ordre de mise à jour avec kubeadm »Avec kubeadm, la mise à jour commence par le control plane via
kubeadm upgrade apply, qui gère les composants du plan de contrôle
(API server, controller-manager, scheduler) ainsi que etcd et les addons
lorsqu’ils sont administrés par kubeadm. Si etcd est géré séparément,
sa stratégie de compatibilité doit être vérifiée à part.
Ensuite, les workers sont mis à jour un par un avec
kubeadm upgrade node, suivi de la mise à jour de kubelet.
Enfin, mettez à jour kubectl sur vos postes d’administration.
Avant l’upgrade : préparation
Section intitulée « Avant l’upgrade : préparation »Vérifier l’état du cluster
Section intitulée « Vérifier l’état du cluster »Assurez-vous que le cluster est sain avant de commencer :
kubectl get nodeskubectl get pods -A | grep -v Running | grep -v CompletedTous les nœuds doivent être Ready. Aucun pod critique ne doit être en
erreur.
Sauvegarder etcd
Section intitulée « Sauvegarder etcd »Une sauvegarde etcd est indispensable avant un upgrade. En cas de problème, elle permet de restaurer le cluster dans son état précédent.
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup-pre-upgrade.db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.keyVérification :
ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup-pre-upgrade.db --write-tablePour un guide complet sur la sauvegarde, consultez Backup et restauration de cluster.
Lire les notes de version
Section intitulée « Lire les notes de version »Avant chaque upgrade, consultez les notes de version officielles Kubernetes. Vérifiez :
- Les breaking changes et APIs dépréciées
- Les nouvelles fonctionnalités qui passent en GA (stable)
- Les prérequis spécifiques à la version
Upgrade du control plane (kubeadm)
Section intitulée « Upgrade du control plane (kubeadm) »L’upgrade se fait sur le premier nœud control plane d’abord, puis sur les éventuels autres nœuds control plane.
Étape 1 : mettre à jour kubeadm
Section intitulée « Étape 1 : mettre à jour kubeadm »Sur le nœud control plane, mettez à jour le paquet kubeadm vers la
version cible :
# Ubuntu / Debiansudo apt-mark unhold kubeadmsudo apt-get update && sudo apt-get install -y kubeadm=1.35.0-1.1sudo apt-mark hold kubeadmVérification :
kubeadm versionÉtape 2 : planifier l’upgrade
Section intitulée « Étape 2 : planifier l’upgrade »sudo kubeadm upgrade planCette commande affiche :
- La version actuelle du cluster
- La version cible disponible
- Les composants qui seront mis à jour
- Les éventuels avertissements (APIs dépréciées, etc.)
Lisez attentivement la sortie avant de continuer.
Étape 3 : appliquer l’upgrade
Section intitulée « Étape 3 : appliquer l’upgrade »sudo kubeadm upgrade apply v1.35.0kubeadm upgrade apply met à jour les composants du control plane sur le
nœud ciblé et applique, selon la configuration du cluster, les mises à jour
planifiées des composants gérés comme CoreDNS, kube-proxy et etcd.
Étape 4 : mettre à jour kubelet et kubectl
Section intitulée « Étape 4 : mettre à jour kubelet et kubectl »# Drainer le nœudkubectl drain ks-cp1 --ignore-daemonsets
# Mettre à jour les paquetssudo apt-mark unhold kubelet kubectlsudo apt-get update && sudo apt-get install -y kubelet=1.35.0-1.1 kubectl=1.35.0-1.1sudo apt-mark hold kubelet kubectl
# Redémarrer kubeletsudo systemctl daemon-reloadsudo systemctl restart kubelet
# Remettre le nœud en servicekubectl uncordon ks-cp1Le drain d’un nœud control plane dépend de votre architecture. Dans beaucoup
de clusters, les workloads applicatifs n’y tournent pas (taint NoSchedule
du control plane). Dans d’autres environnements, traitez ce nœud comme
tout autre nœud hébergeant des Pods.
Pour les nœuds control plane supplémentaires (si votre cluster est en HA),
la procédure est similaire mais utilise kubeadm upgrade node au lieu de
kubeadm upgrade apply :
# Sur le nœud CP supplémentaire :sudo apt-mark unhold kubeadmsudo apt-get update && sudo apt-get install -y kubeadm=1.35.0-1.1sudo apt-mark hold kubeadm
sudo kubeadm upgrade nodePuis mettez à jour kubelet/kubectl et redémarrez comme pour le premier nœud.
Upgrade des worker nodes
Section intitulée « Upgrade des worker nodes »Les workers se mettent à jour un par un pour éviter toute interruption de service. Pour chaque worker, le workflow est identique.
-
Mettre à jour kubeadm sur le worker :
Fenêtre de terminal sudo apt-mark unhold kubeadmsudo apt-get update && sudo apt-get install -y kubeadm=1.35.0-1.1sudo apt-mark hold kubeadm -
Appliquer la configuration :
Fenêtre de terminal sudo kubeadm upgrade node -
Drainer le worker (depuis un poste d’administration) :
Fenêtre de terminal kubectl drain ks-worker1 --ignore-daemonsets --delete-emptydir-data -
Mettre à jour kubelet et kubectl :
Fenêtre de terminal sudo apt-mark unhold kubelet kubectlsudo apt-get update && sudo apt-get install -y kubelet=1.35.0-1.1 kubectl=1.35.0-1.1sudo apt-mark hold kubelet kubectlsudo systemctl daemon-reloadsudo systemctl restart kubelet -
Remettre le worker en service :
Fenêtre de terminal kubectl uncordon ks-worker1 -
Vérifier avant de passer au worker suivant :
Fenêtre de terminal kubectl get nodeskubectl get pods -A -o wide | grep ks-worker1
Vérifications post-upgrade
Section intitulée « Vérifications post-upgrade »Après avoir mis à jour tous les nœuds, vérifiez l’ensemble du cluster :
Versions des nœuds
Section intitulée « Versions des nœuds »kubectl get nodesTous les nœuds doivent afficher la même version :
NAME STATUS ROLES AGE VERSIONks-cp1 Ready control-plane 43h v1.35.0ks-worker1 Ready worker 43h v1.35.0ks-worker2 Ready worker 43h v1.35.0Pods système
Section intitulée « Pods système »kubectl get pods -n kube-systemTous les pods du plan de contrôle doivent être Running.
Santé du plan de contrôle
Section intitulée « Santé du plan de contrôle »Vérifiez la santé des composants via l’endpoint readyz de l’API server :
kubectl get --raw='/readyz?verbose' | grep '\[-\]\|\[\+\]'Test fonctionnel rapide
Section intitulée « Test fonctionnel rapide »Créez un pod de test pour valider que le cluster fonctionne :
kubectl run test-upgrade --image=nginx --restart=Neverkubectl get pod test-upgrade -wAttendez que le pod passe en Running, puis nettoyez :
kubectl delete pod test-upgradeGérer un échec d’upgrade
Section intitulée « Gérer un échec d’upgrade »kubeadm upgrade apply échoue
Section intitulée « kubeadm upgrade apply échoue »Si kubeadm upgrade apply échoue en cours de route, vous pouvez
relancer la même commande en toute sécurité : elle est idempotente. Si
le problème persiste, consultez les logs :
sudo journalctl -u kubelet -fsudo crictl ps -aRestaurer depuis la sauvegarde etcd
Section intitulée « Restaurer depuis la sauvegarde etcd »En dernier recours, si le cluster est dans un état incohérent après un upgrade raté, restaurez la sauvegarde etcd :
ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcd-backup-pre-upgrade.db \ --data-dir=/var/lib/etcd-restorePuis remplacez le répertoire de données etcd et redémarrez les services. Consultez le guide Backup et restauration pour la procédure complète.
kubelet ne démarre pas après l’upgrade
Section intitulée « kubelet ne démarre pas après l’upgrade »Si le kubelet ne démarre pas sur un nœud après la mise à jour :
sudo journalctl -u kubelet -f --no-pager | tail -50Causes fréquentes :
- Incompatibilité de version : vérifiez que les versions installées respectent la version skew policy et l’ordre d’upgrade recommandé par kubeadm
- Configuration obsolète :
kubeadm upgrade noden’a pas été exécuté avant la mise à jour du kubelet - Certificats : les certificats ont expiré (renouvelez avec
kubeadm certs renew all)
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
kubeadm upgrade plan ne trouve pas la version | Repository apt/yum non mis à jour | apt-get update puis réessayer |
| Upgrade bloqué depuis 10+ minutes | Pull d’images lent ou timeout réseau | Vérifier la connectivité et pré-pull les images : kubeadm config images pull |
Nœud reste en NotReady après upgrade | kubelet pas redémarré ou mauvaise version | systemctl restart kubelet ; vérifier kubelet --version |
Pods en Pending après drain | Pas assez de ressources sur les nœuds restants | Vérifier les requests/limits ; uncordon d’abord puis re-drain |
| CoreDNS ne fonctionne plus | ConfigMap CoreDNS personnalisé écrasé | Restaurer la config depuis le backup ; vérifier kubectl -n kube-system get cm coredns |
| API server inaccessible après upgrade | Certificats expirés ou port occupé | sudo crictl logs <container-id> du conteneur kube-apiserver |
À retenir
Section intitulée « À retenir »- Mettez à jour une version mineure à la fois : 1.33 → 1.34, jamais 1.33 → 1.35 directement.
- L’ordre est strict : control plane d’abord (kubeadm upgrade apply), workers ensuite (kubeadm upgrade node), un nœud à la fois.
- La version skew policy définit les fenêtres de compatibilité entre composants. Consultez-la systématiquement avant un upgrade.
- Sauvegardez etcd avant chaque upgrade. C’est votre filet de sécurité.
- Lisez les notes de version pour anticiper les breaking changes et APIs supprimées.
kubeadm upgrade applyest idempotent : en cas d’échec, relancez la même commande.- Vérifiez le cluster après chaque nœud :
kubectl get nodes, pods système, test fonctionnel.