Comment nettoyer les anciennes tâches Kubernetes
Agence web » Actualités du digital » Comment mettre à niveau un cluster Kubernetes créé avec Kubeadm

Comment mettre à niveau un cluster Kubernetes créé avec Kubeadm

Kubeadm est l’outil officiel d’installation et de maintenance d’un cluster basé sur la distribution Kubernetes par défaut. Les clusters créés ne se mettent pas automatiquement à niveau et la désactivation des mises à jour de packages pour les composants Kubernetes fait partie du processus de configuration. Cela signifie que vous devez migrer manuellement votre cluster lorsqu’une nouvelle version de Kubernetes arrive.

Dans cet article, vous apprendrez les étapes d’une mise à niveau de Kubernetes en parcourant une transition de la v1.24 à la v1.25 sur Ubuntu 22.04. Le processus est généralement similaire pour toute version mineure de Kubernetes, mais vous devez toujours vous référer à la documentation officielle avant de commencer, au cas où une nouvelle version comporte des exigences spécialisées.

Identification de la version précise à installer

La première étape consiste à déterminer la version vers laquelle vous allez effectuer la mise à niveau. Vous ne pouvez pas ignorer les versions mineures – passer directement de la v1.23 à la v1.25 n’est pas pris en charge, par exemple – vous devez donc choisir la version de correctif la plus récente pour la version mineure qui suit la version actuelle de votre cluster.

Vous pouvez découvrir la dernière version du correctif avec la commande suivante :

$ apt-cache policy kubeadm | grep 1.25
1.25.1-00 500
1.25.0-00 500

Cela montre que 1.25.1-00 est la dernière version de Kubernetes v1.25. Remplacer 1.25 dans la commande avec la version mineure vers laquelle vous allez migrer.

Mise à niveau du plan de contrôle

Complétez cette section sur la machine qui exécute votre plan de contrôle. Ne touchez pas encore aux nœuds de travail : ils peuvent continuer à utiliser leur version actuelle de Kubernetes pendant la mise à jour du plan de contrôle. Si vous avez plusieurs nœuds de plan de contrôle, exécutez cette séquence sur le premier et suivez la procédure de nœud de travail dans la section suivante sur les autres.

Mettre à jour Kubeadm

Libérez d’abord la suspension du package Kubeadm et installez la nouvelle version. Spécifiez la version exacte identifiée précédemment afin qu’Apt ne récupère pas automatiquement la dernière version, ce qui pourrait être une version mineure non prise en charge.

$ sudo apt update
$ sudo apt-mark unhold kubeadm
$ sudo apt install -y kubeadm=1.25.1-00

Maintenant, réappliquez la retenue de sorte que apt upgrade ne livre pas de versions indésirables à l’avenir :

$ sudo apt-mark hold kubeadm
kubeadm set on hold

Vérifiez que Kubeadm est désormais la version attendue :

$ kubeadm version --short
kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.1"...

Créer le plan de mise à niveau

Kubeadm automatise le processus de mise à niveau du plan de contrôle. Utilisez d’abord le upgrade plan pour établir les versions vers lesquelles vous pouvez migrer. Cela vérifie votre cluster pour s’assurer qu’il peut accepter la nouvelle version.

$ sudo kubeadm upgrade plan

La sortie est assez longue mais cela vaut la peine d’inspecter de près. La première section doit indiquer que tous les composants Kubernetes seront mis à niveau vers le numéro de version que vous avez sélectionné précédemment. De nouvelles versions peuvent également être affichées pour CoreDNS et etcd.

COMPONENT                 CURRENT   TARGET
kube-apiserver            v1.24.5   v1.25.1
kube-controller-manager   v1.24.5   v1.25.1
kube-scheduler            v1.24.5   v1.25.1
kube-proxy                v1.24.5   v1.25.1
CoreDNS                   v1.8.6    v1.9.3
etcd                      3.5.3-0   3.5.4-0

La fin de la sortie comprend un tableau qui présente toutes les modifications de configuration requises. Il se peut que vous deviez parfois prendre des mesures manuelles pour ajuster ces fichiers de configuration et les fournir au cluster. Reportez-vous à la documentation de votre version si vous obtenez un « oui » dans la colonne « Mise à niveau manuelle requise ».

API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
kubelet.config.k8s.io     v1beta1           v1beta1             no

Ce cluster est maintenant prêt à être mis à niveau. Le plan a confirmé que Kubernetes v1.25.1 est disponible et qu’aucune action manuelle n’est requise. Vérifiez que vous avez installé la bonne version de Kubeadm si aucun plan n’est produit ou si des erreurs apparaissent. Vous essayez peut-être de vous déplacer entre plusieurs versions mineures.

Application du plan de mise à niveau

Vous pouvez maintenant demander à Kubeadm de procéder à l’application du plan de mise à niveau en exécutant upgrade apply avec le bon numéro de version :

$ sudo kubeadm upgrade apply v1.25.1

Une invite de confirmation apparaîtra :

[upgrade/version] You have chosen to change the cluster version to "v1.25.1"
[upgrade/versions] Cluster version: v1.24.5
[upgrade/versions] kubeadm version: v1.25.1
[upgrade] Are you sure you want to proceed? [y/N]:

Presse y pour continuer la mise à niveau. Le processus peut prendre plusieurs minutes pendant qu’il extrait les images des nouveaux composants et redémarre votre plan de contrôle. Vous ne pourrez pas interagir de manière fiable avec l’API de votre cluster pendant cette période, mais tous les pods en cours d’exécution doivent rester opérationnels sur vos nœuds.

Finalement, vous devriez voir un message de réussite :

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.25.1". Enjoy!]

Le plan de contrôle a maintenant été mis à jour.

Mise à niveau des nœuds de travail

Vous pouvez maintenant mettre à niveau vos noeuds worker. Ces étapes doivent également être effectués sur vos nœuds de plan de contrôle. Mettez à niveau chaque nœud dans l’ordre pour minimiser les effets de la capacité supprimée de votre cluster. Les pods seront reprogrammés vers d’autres nœuds pendant que chacun sera mis à niveau.

Commencez par vider le nœud de ses pods existants et placez un cordon autour de celui-ci. Remplacez le nom du nœud au lieu de node-1 dans les commandes suivantes.

$ kubectl cordon node-1
$ kubectl drain node-1

Cela expulse les pods du nœud et empêche la planification de nouveaux pods. Le nœud est maintenant inactif dans votre cluster.

Relâchez ensuite le gestionnaire de paquets en attente sur le kubeadm, kubectlet kubelet paquets. Installez la nouvelle version de chacun. Les versions des trois packages doivent correspondre exactement. N’oubliez pas de définir à nouveau le statut de suspension après avoir reçu les nouvelles versions.

$ sudo apt update
$ sudo apt-mark unhold kubeadm kubectl kubelet
$ sudo apt install -y kubeadm=1.25.1-00 kubectl=1.25.1-00 kubelet=1.25.1-00
$ sudo apt-mark hold kubeadm kubectl kubelet

Utilisez ensuite Kubeadm upgrade node commande pour appliquer la mise à niveau et mettre à jour la configuration de votre nœud :

$ sudo kubeadm upgrade node

Enfin, redémarrez le service Kubelet et déconnectez le nœud. Il devrait rejoindre le cluster et commencer à accepter de nouveaux pods.

$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
$ kubectl uncordon node-1

Vérification de votre cluster

Une fois que vous avez terminé votre mise à niveau, exécutez kubectl version pour vérifier que la version active correspond à vos attentes :

$ kubectl version --short
Client Version: v1.25.1
...
Server Version: v1.25.1

Vérifiez ensuite que tous vos nœuds signalent leur nouvelle version et ont entré le Ready Etat:

$ kubectl get nodes -o wide
NAME       STATUS   ROLES           AGE   VERSION
ubuntu22   Ready    control-plane   70m   v1.25.1

La mise à niveau est maintenant terminée.

Récupération après un échec de mise à niveau

Parfois, une mise à niveau peut échouer même si Kubeadm planifie avec succès un chemin et vérifie la santé de votre cluster. Des problèmes peuvent survenir si la mise à niveau est interrompue ou si un composant Kubernetes cesse de répondre. Kubeadm devrait automatiquement revenir à la version précédente si cela se produit.

La upgrade apply La commande peut être répétée en toute sécurité pour réessayer une mise à niveau ayant échoué. Il détectera les différences entre votre cluster et la version attendue, ce qui lui permettra de tenter une récupération des échecs totaux et des mises à niveau partielles.

Lorsque la répétition de la commande ne fonctionne pas, vous pouvez essayer de forcer la mise à niveau en ajoutant le --force drapeau à la commande :

$ kubeadm upgrade apply --force

Cela permettra à la mise à niveau de se poursuivre dans les situations où les exigences manquent ou ne peuvent plus être remplies.

Lorsqu’un sinistre survient et que votre cluster semble totalement endommagé, vous devriez pouvoir le restaurer à l’aide des fichiers de sauvegarde que Kubeadm écrit automatiquement :

  • Copiez le contenu de /etc/kubernetes/tmp/kubeadm-backup-etcd-<date>-<time> Dans votre /var/lib/etcd annuaire.
  • Copiez le contenu de /etc/kubernetes/tmp/kubeadm-backup-manifests-<date>-<time> Dans votre /etc/kubernetes/manifests annuaire.

Ces sauvegardes peuvent être utilisées pour restaurer manuellement la version précédente de Kubernetes dans un état de fonctionnement.

Sommaire

La mise à niveau de Kubernetes avec Kubeadm ne devrait pas être trop stressante. La majeure partie du processus est automatisée, votre implication se limitant à l’installation des nouveaux packages et à la vérification du plan de mise à niveau.

Avant la mise à niveau, vous devez toujours consulter le journal des modifications de Kubernetes et toute documentation publiée par les composants que vous utilisez dans votre cluster. Les interfaces réseau des pods, les contrôleurs Ingress, les fournisseurs de stockage et d’autres modules complémentaires peuvent tous présenter des incompatibilités avec une nouvelle version de Kubernetes ou nécessiter leurs propres routines de mise à niveau.

★★★★★