Kubernetes ne prend pas en charge la mise à niveau sur plusieurs versions ! Par conséquent, la mise à niveau progressive de 1.18-1.19-1.20-1.21-1.22-1.23 est requise, et la mise à niveau est plus lourde lorsqu'elle s'étend sur plusieurs versions.
I. Aperçu
1. Notes sur la mise à niveau
- Ce qui suit décrit le moment où chaque nœud est libéré pendant le processus de mise à niveau. Si vous effectuez
kubelet
une mise à niveau mineure de la version d'un , vous devez d'abord effacer le ou les nœuds à mettre à niveau.CoreDNS Pods
Pour les nœuds du plan de contrôle, ou d'autres charges très importantes peuvent s'exécuter sur eux . Voir Nœuds vides pour plus d'informations. - Après une mise à niveau, tous les conteneurs seront redémarrés car le hachage de la spécification du conteneur a changé.
- Pour vérifier que le service Kubelet a redémarré avec succès après la mise à niveau, vous pouvez exécuter
systemctl status kubelet
oujournalctl -xeu kubelet
afficher le journal du service.
2. Stratégie de déviation de version
nom | serveur API | Kubelet |
---|---|---|
serveur API | ±1 | |
Kubelet | -2 | |
gestionnaire de contrôleur kube, planificateur kube | -1 | |
être un mandataire | -2 | Identique au nœud Kubelet |
Kubectl | ±1 |
3. L'environnement actuel du cluster
l'hôte | système | IP |
---|---|---|
loc-master35 | CentOS 7.6 | 10.10.1.35 |
lieu-noeud36 | CentOS 7.6 | 10.10.1.36 |
loc-noeud37 | CentOS 7.6 | 10.10.1.37 |
4. Processus de mise à niveau des macros
- Mettre à niveau le nœud du plan de contrôle principal
- Mettre à niveau d'autres nœuds du plan de contrôle
- Mettre à niveau les nœuds de travail
2. Mettre à niveau les nœuds du plan de contrôle
1. Confirmez la version de mise à niveau
# yum list --showduplicates kubeadm --disableexcludes=kubernetes
......
ubeadm.x86_64 1.17.16-0 kubernetes
kubeadm.x86_64 1.17.17-0 kubernetes
......
kubeadm.x86_64 1.18.20-0 kubernetes
kubeadm.x86_64 1.19.0-0 kubernetes
kubeadm.x86_64 1.19.1-0 kubernetes
kubeadm.x86_64 1.19.2-0 kubernetes
kubeadm.x86_64 1.19.3-0 kubernetes
kubeadm.x86_64 1.19.4-0 kubernetes
kubeadm.x86_64 1.19.5-0 kubernetes
kubeadm.x86_64 1.19.6-0 kubernetes
kubeadm.x86_64 1.19.7-0 kubernetes
kubeadm.x86_64 1.19.8-0 kubernetes
kubeadm.x86_64 1.19.9-0 kubernetes
kubeadm.x86_64 1.19.10-0 kubernetes
kubeadm.x86_64 1.19.11-0 kubernetes
kubeadm.x86_64 1.19.12-0 kubernetes
kubeadm.x86_64 1.19.13-0 kubernetes
kubeadm.x86_64 1.19.14-0 kubernetes
kubeadm.x86_64 1.19.15-0 kubernetes
......
kubeadm.x86_64 1.24.0-0 kubernetes
2. Mettre à niveau les nœuds du plan de contrôle
Nous mettons d’abord à niveau le premier nœud de contrôle principal, puis mettons à niveau les autres nœuds de contrôle et enfin mettons à niveau les autres nœuds de travail.
Mise à niveau de Kubeadm 2.1
- mise à niveau
kubeadm
# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes
- Vérifier le plan de mise à niveau
# kubeadm upgrade plan # 检查集群是否可以升级
......
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT CURRENT AVAILABLE
kubelet 3 x v1.18.0 v1.19.16
Upgrade to the latest stable version:
COMPONENT CURRENT AVAILABLE
kube-apiserver v1.18.0 v1.19.16
kube-controller-manager v1.18.0 v1.19.16
kube-scheduler v1.18.0 v1.19.16
kube-proxy v1.18.0 v1.19.16
CoreDNS 1.6.7 1.7.0
etcd 3.4.3-0 3.4.13-0
You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.19.16
Note: Before you can perform this upgrade, you have to update kubeadm to v1.19.16.
......
_____________________________________________________________________
- Sélectionnez la version vers laquelle mettre à niveau
# kubeadm upgrade apply 1.19.12
......
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.19.12". Enjoy!
kubeadm upgrade
Les certificats gérés sur le nœud sont automatiquement kubeadm
renouvelés. Si vous devez ignorer l'opération de renouvellement du certificat, vous pouvez utiliser l'indicateur --certificate-renewal=false.
# kubeadm upgrade apply 1.19.12 --certificate-renewal=false
2.2 Nœuds vides
kubectl drain
commande pour marquer un nœud comme non planifiable et expulser toute la charge
# kubectl drain loc-master35 --ignore-daemonsets
2.3 Mettre à niveau Kubelet et Kubectl
# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y
# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet
2.4 Annuler la protection des nœuds
# kubectl uncordon loc-master35
node/loc-master35 uncordoned
3. Améliorez d'autres plans de contrôle
En supposant qu'il y en ait d'autres master
, nous devons également les master
mettre à niveau.
# yum install kubeadm-1.19.12-0 kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes
#
# kubeadm upgrade node # 这一点与主不一样
# kubectl drain loc-master-xx --ignore-daemonsets
# systemctl daemon-reload
# systemctl restart kubelet
# kubectl uncordon loc-master-xx
3. Mettez à niveau le nœud de travail
1. Mettre à niveau Kubeadm
# yum install kubeadm-1.19.12-0 --disableexcludes=kubernetes
2、kubeadmMise à niveau
# kubeadm upgrade node
3. Évacuez le nœud
kubectl drain
commande pour marquer un nœud comme non planifiable et expulser toute la charge
# kubectl drain loc-node36 --ignore-daemonsets
4. Mettre à niveau Kubelet et Kubectl
# yum install kubelet-1.19.12-0 kubectl-1.19.12-0 --disableexcludes=kubernetes -y
# 重启 kubelet
# systemctl daemon-reload
# systemctl restart kubelet
5. Annuler la protection des nœuds
# kubectl uncordon loc-node36
node/loc-node36uncordoned
4. Inspection après mise à niveau
- Afficher l'état du nœud
# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
loc-master35 Ready master 33d v1.19.12 10.10.1.35 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3
loc-node36 Ready <none> 33d v1.19.12 10.10.1.36 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3
loc-node37 Ready <none> 33d v1.19.12 10.10.1.37 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3
- Vérifiez si le plug-in est normal
# kubectl logs -f kube-controller-manager-loc-master35 -n kube-system
- Afficher
kubelet
la sortie du journal
# journalctl -f -u kubelet
...
5. Principe de fonctionnement
1、kubeadm Mise à niveau appliquée
Kubeadm Upgrade Apply effectue les opérations suivantes :
- Vérifiez si votre cluster est dans un état évolutif :
-
- Le serveur API est accessible
-
- Tous les nœuds sont à l'état Prêt
-
- La surface de contrôle est saine
- Appliquez une politique de dérive de version.
- Assurez-vous que l'image du plan de contrôle est disponible ou extraite vers le serveur.
- Si une configuration de composant nécessite une mise à niveau de version, générez une configuration alternative et/ou utilisez une configuration de version de remplacement fournie par l'utilisateur.
- Mettez à niveau les composants du plan de contrôle ou annulez si l'un d'entre eux ne parvient pas à démarrer.
- Appliquez les nouveaux manifestes CoreDNS et kube-proxy et forcez la création de toutes les règles RBAC requises.
- Si l'ancien fichier expire après 180 jours, un nouveau certificat et un nouveau fichier de clé pour le serveur API seront créés et l'ancien fichier sera sauvegardé.
2、kubeadmNoeud de mise à niveau
kubeadm upgrade node
Sur les autres nœuds plats de contrôle, procédez comme suit :
- Obtenez le kubeadm ClusterConfiguration à partir du cluster.
- (Facultatif) Sauvegardez le certificat kube-apiserver.
- Mettez à niveau le manifeste du pod statique des composants du plan de contrôle.
- Mettre à niveau la configuration du kubelet pour ce nœud
kubeadm upgrade node
Effectuez les tâches suivantes sur les nœuds de travail :
- Récupérez la configuration kubeadm ClusterConfiguration du cluster.
- Mettez à niveau la configuration du kubelet pour ce nœud.
Référence :
https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
https://kubernetes.io/releases/version-skew-policy/