Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:kubernetes:k8s01 [2022/09/04 11:46] adminelearning:workbooks:kubernetes:k8s01 [2024/12/18 13:32] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version - **2022.03**+Version - **2024.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF302 - Gestion des PODs, Contrôleurs de Réplication, ReplicaSets et Deployments======+======DOF302 - Gestion des PODs, Contrôleurs de Réplication, ReplicaSetsDeployments, de la Maintenance et des Mises-à-jour du Cluster======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF302 - Gestion des PODs, Contrôleurs de Réplication, ReplicaSets et Deployments**+  * **DOF302 - Gestion des PODs, Contrôleurs de Réplication, ReplicaSetsDeployments, de la Maintenance et des Mises-à-jour du Cluster**
     * Contenu du Module     * Contenu du Module
     * LAB #1 - Création d'un POD     * LAB #1 - Création d'un POD
Ligne 33: Ligne 33:
         * Rolling Updates         * Rolling Updates
         * Rollbacks         * Rollbacks
 +    * LAB #4 - Gestion de la Maintenance
 +      * 4.1 - La Commande drain
 +      * 4.2 - La Commande uncordon
 +    * LAB #5 - Gestion des Mises-à-jour
 +      * 5.1 - Mise-à-jour de kubeadm
 +      * 5.2 - Mise-à-jour des Travailleurs
 +
 +=====Ressources=====
 +
 +====Lab #1=====
 +
 +  * https://www.dropbox.com/scl/fi/n8iwjrfich5af7vtoezac/pod-definition.yaml?rlkey=hs3nwcczi1zucs3l7cge3bc9s&dl=0
 +
 +====Lab #2====
 +
 +  * https://www.dropbox.com/scl/fi/2atlsvs2oi21fp6xudh46/cr_definition.yaml?rlkey=35lzzkg6qah55pjw34ccaval7&dl=0
 +  * https://www.dropbox.com/scl/fi/j8ww8mdm82cec71lnz023/replicaset-definition.yaml?rlkey=2iypd89690ipt6lik3h3bae3f&dl=0
 +
 +====Lab #3====
 +
 +  * https://www.dropbox.com/scl/fi/h057eynmqvlaoytph372r/deployment-definition.yaml?rlkey=lrs8llq89ffn1a5megm317f5y&dl=0
  
 =====LAB #1 - Création d'un POD===== =====LAB #1 - Création d'un POD=====
Ligne 1245: Ligne 1266:
 6         kubectl apply --filename=deployment-definition.yaml --record=true 6         kubectl apply --filename=deployment-definition.yaml --record=true
 </code> </code>
 +
 +=====LAB #4 - Gestion de la Maintenance=====
 +
 +Afin de procéder à la maintenance d'un noeud, il est souvent nécessaire de le sortir du cluster. Cette opération s'appelle un **drain**.
 +
 +====4.1 - La Commande drain====
 +
 +Constatez l'état des pods :
 +
 +<code>
 +root@kubemaster:~# kubectl get pods -o wide --all-namespaces
 +NAMESPACE     NAME                                                READY   STATUS    RESTARTS      AGE   IP               NODE                        NOMINATED NODE   READINESS GATES
 +default       myapp-deployment-57c6cb89d9-dh4cb                   1/    Running               27m   192.168.150.2    kubenode2.ittraining.loc    <none>           <none>
 +default       myapp-deployment-57c6cb89d9-q7d4p                   1/    Running               27m   192.168.239.2    kubenode1.ittraining.loc    <none>           <none>
 +default       myapp-deployment-57c6cb89d9-f69nk                   1/    Running               27m   192.168.150.3    kubenode2.ittraining.loc    <none>           <none>
 +default       nginx                                               1/    Running               32m   192.168.239.1    kubenode1.ittraining.loc    <none>           <none>
 +kube-system   calico-kube-controllers-6799f5f4b4-zk298            1/1     Running               60m   192.168.55.195   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   calico-node-5htrc                                   1/    Running               50m   192.168.56.3     kubenode1.ittraining.loc    <none>           <none>
 +kube-system   calico-node-dc7hd                                   1/    Running               60m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   calico-node-qk5kt                                   1/    Running               52m   192.168.56.4     kubenode2.ittraining.loc    <none>           <none>
 +kube-system   coredns-6d4b75cb6d-kxtqk                            1/1     Running               62m   192.168.55.194   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   coredns-6d4b75cb6d-td7cf                            1/1     Running               62m   192.168.55.193   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   etcd-kubemaster.ittraining.loc                      1/1     Running   1 (57m ago)   63m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-apiserver-kubemaster.ittraining.loc            1/1     Running   2 (55m ago)   63m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-controller-manager-kubemaster.ittraining.loc   1/    Running   5 (50m ago)   63m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-proxy-fpksg                                    1/1     Running               62m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-proxy-sn26v                                    1/1     Running               50m   192.168.56.3     kubenode1.ittraining.loc    <none>           <none>
 +kube-system   kube-proxy-wxm4z                                    1/1     Running               52m   192.168.56.4     kubenode2.ittraining.loc    <none>           <none>
 +kube-system   kube-scheduler-kubemaster.ittraining.loc            1/1     Running   5 (51m ago)   63m   10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que sur **kubenode1.ittraining.loc**, il y a 4 pods, à savoir **myapp-deployment-57c6cb89d9-q7d4p**, **nginx**, **calico-node-5htrc**  et **kube-proxy-sn26v**.
 +</WRAP>
 +
 +Procédez maintenant au drain de kubenode1.ittraining.loc :
 +
 +<code>
 +root@kubemaster:~# kubectl drain kubenode1.ittraining.loc
 +node/kubenode1.ittraining.loc cordoned
 +error: unable to drain node "kubenode1.ittraining.loc" due to error:[cannot delete Pods declare no controller (use --force to override): default/nginx, cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-5htrc, kube-system/kube-proxy-sn26v], continuing command...
 +There are pending nodes to be drained:
 + kubenode1.ittraining.loc
 +cannot delete Pods declare no controller (use --force to override): default/nginx
 +cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-5htrc, kube-system/kube-proxy-sn26v
 +</code>
 +
 +Notez que la commande retourne deux erreurs :
 +
 +  * cannot delete Pods declare no controller (use --force to override): default/nginx
 +  * cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/calico-node-5htrc, kube-system/kube-proxy-sn26v
 +  
 +La première erreur est due au fait que l'opération ne peux pas déplacer un pod isolé, autrement dit un pod qui n'est pas géré par un Controller d'un vers un autre noeud. Dans ce cas, le drain ne peut que supprimer le pod **nginx** et refuse donc de le faire sans l'utilisation de l'option **--force**.
 +
 +<WRAP center round important 60%>
 +**Important** : Le mot Controller implique un ReplicationController, un ReplicaSet, un Job, un DaemonSet et un StatefulSet.
 +</WRAP>
 +
 +La deuxième erreur est due au fait que l'opération ne peut pas traiter les DaemonSets.
 +
 +<WRAP center round important 60%>
 +**Important** : Un DaemonSet contient des pods qui sont **liés** à des noeuds **spécifiques**.
 +</WRAP>
 +
 +Exécutez donc la commande de nouveau en ajoutant les deux options **--ignore-daemonsets** et **--force** :
 +
 +<code>
 +root@kubemaster:~# kubectl drain kubenode1.ittraining.loc --ignore-daemonsets --force
 +node/kubenode1.ittraining.loc already cordoned
 +WARNING: deleting Pods that declare no controller: default/nginx; ignoring DaemonSet-managed Pods: kube-system/calico-node-5htrc, kube-system/kube-proxy-sn26v
 +evicting pod default/nginx
 +evicting pod default/myapp-deployment-57c6cb89d9-f69nk
 +pod/nginx evicted
 +pod/myapp-deployment-57c6cb89d9-f69nk evicted
 +node/kubenode1.ittraining.loc drained
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que la commande n'a pas retourné d'erreurs.
 +</WRAP>
 +
 +Consultez de nouveau l'état des pods :
 +
 +<code>
 +root@kubemaster:~# kubectl get pods -o wide --all-namespaces
 +NAMESPACE     NAME                                                READY   STATUS    RESTARTS      AGE     IP               NODE                        NOMINATED NODE   READINESS GATES
 +default       myapp-deployment-57c6cb89d9-dh4cb                   1/    Running               45m     192.168.150.2    kubenode2.ittraining.loc    <none>           <none>
 +default       myapp-deployment-57c6cb89d9-f69nk                   1/    Running               45m     192.168.150.3    kubenode2.ittraining.loc    <none>           <none>
 +default       myapp-deployment-57c6cb89d9-l7lkd                   1/    Running               6m22s   192.168.150.4    kubenode2.ittraining.loc    <none>           <none>
 +kube-system   calico-kube-controllers-6799f5f4b4-zk298            1/1     Running               77m     192.168.55.195   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   calico-node-5htrc                                   1/    Running               68m     192.168.56.3     kubenode1.ittraining.loc    <none>           <none>
 +kube-system   calico-node-dc7hd                                   1/    Running               77m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   calico-node-qk5kt                                   1/    Running               70m     192.168.56.4     kubenode2.ittraining.loc    <none>           <none>
 +kube-system   coredns-6d4b75cb6d-kxtqk                            1/1     Running               80m     192.168.55.194   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   coredns-6d4b75cb6d-td7cf                            1/1     Running               80m     192.168.55.193   kubemaster.ittraining.loc   <none>           <none>
 +kube-system   etcd-kubemaster.ittraining.loc                      1/1     Running   1 (74m ago)   80m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-apiserver-kubemaster.ittraining.loc            1/1     Running   2 (73m ago)   80m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-controller-manager-kubemaster.ittraining.loc   1/    Running   5 (67m ago)   80m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-proxy-fpksg                                    1/1     Running               80m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +kube-system   kube-proxy-sn26v                                    1/1     Running               68m     192.168.56.3     kubenode1.ittraining.loc    <none>           <none>
 +kube-system   kube-proxy-wxm4z                                    1/1     Running               70m     192.168.56.4     kubenode2.ittraining.loc    <none>           <none>
 +kube-system   kube-scheduler-kubemaster.ittraining.loc            1/1     Running   5 (68m ago)   80m     10.0.2.65        kubemaster.ittraining.loc   <none>           <none>
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que le pod **nginx** a été détruit tandis que le pod **myapp-deployment-57c6cb89d9-q7d4p** a été **expulsé**. Un nouveau pod dénommé **myapp-deployment-57c6cb89d9-l7lkd** a été créé sur **kubenode2.ittraining.loc** afin de maintenir le nombre à **3**. Les deux pods **calico-node-5htrc** et **kube-proxy-sn26v** ont été ignorés.
 +</WRAP>
 +
 +Constatez maintenant l'état des noeuds :
 +
 +<code>
 +root@kubemaster:~# kubectl get nodes
 +NAME                        STATUS                     ROLES           AGE   VERSION
 +kubemaster.ittraining.loc   Ready                      control-plane   91m   v1.24.2
 +kubenode1.ittraining.loc    Ready,SchedulingDisabled   <none>          80m   v1.24.2
 +kubenode2.ittraining.loc    Ready                      <none>          82m   v1.24.2
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que le STATUS de **kubenode1.ittraining.loc** est **SchedulingDisabled** ce qui implique que le noeud n'accepte plus de nouveaux pods. Dans cet état le neoud est dit **cordoned**.
 +</WRAP>
 +
 +====4.2 - La Commande uncordon====
 +
 +Pour permettre le noeud de recevoir de nouveau des pods, il convient d'utiliser la commande suivante :
 +
 +<code>
 +root@kubemaster:~# kubectl uncordon kubenode1.ittraining.loc
 +node/kubenode1.ittraining.loc uncordoned
 +</code>
 +
 +Constatez de nouveau l'état des noeuds :
 +
 +<code>
 +root@kubemaster:~# kubectl get nodes
 +NAME                        STATUS   ROLES           AGE    VERSION
 +kubemaster.ittraining.loc   Ready    control-plane   124m   v1.24.2
 +kubenode1.ittraining.loc    Ready    <none>          113m   v1.24.2
 +kubenode2.ittraining.loc    Ready    <none>          115m   v1.24.2
 +</code>
 +
 +Dernièrement consultez de nouveau l'état des pods :
 +
 +<code>
 +root@kubemaster:~# kubectl get pods -o wide
 +NAME                                READY   STATUS    RESTARTS   AGE   IP              NODE                       NOMINATED NODE   READINESS GATES
 +myapp-deployment-57c6cb89d9-dh4cb   1/    Running            91m   192.168.150.2   kubenode2.ittraining.loc   <none>           <none>
 +myapp-deployment-57c6cb89d9-f69nk   1/    Running            91m   192.168.150.3   kubenode2.ittraining.loc   <none>           <none>
 +myapp-deployment-57c6cb89d9-l7lkd   1/    Running            52m   192.168.150.4   kubenode2.ittraining.loc   <none>           <none>
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que l'utilisation de la commande **uncordon** n'implique pas le basculement du pod **l7lkd** vers le noeud **kubenode2.ittraining.loc**.
 +</WRAP>
 +
 +=====LAB #5 - Gestion des Mises-à-jour=====
 +
 +====5.1 - Mise-à-jour de kubeadm====
 +
 +Commencez par modifier les sources de paquets :
 +
 +<code>
 +root@kubemaster:~# mkdir /etc/apt/keyrings
 +
 +root@kubemaster:~# curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
 +
 +root@kubemaster:~# echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.25/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
 +deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /
 +
 +root@kubemaster:~# vi /etc/apt/sources.list
 +
 +root@kubemaster:~# cat /etc/apt/sources.list
 +deb http://archive.debian.org/debian/ stretch main 
 +deb-src http://archive.debian.org/debian/ stretch main
 +deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
 +
 +root@kubemaster:~# apt update
 +Ign:1 http://archive.debian.org/debian stretch InRelease
 +Atteint:2 http://archive.debian.org/debian stretch Release
 +Réception de:3 https://download.docker.com/linux/debian stretch InRelease [44,8 kB]
 +Réception de:4 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  InRelease [1 192 B]
 +Réception de:6 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.28/deb  Packages [21,3 kB]
 +67,3 ko réceptionnés en 0s (190 ko/s)
 +Lecture des listes de paquets... Fait
 +Construction de l'arbre des dépendances       
 +Lecture des informations d'état... Fait
 +8 packages can be upgraded. Run 'apt list --upgradable' to see them.
 +</code>
 +
 +Afin de mettre à jour kubeadm, il convient de faire un drain du **Contrôleur** :
 +
 +<code>
 +root@kubemaster:~# kubectl drain kubemaster.ittraining.loc --ignore-daemonsets
 +node/kubemaster.ittraining.loc cordoned
 +WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-mp24s, kube-system/kube-proxy-btng8
 +evicting pod kube-system/coredns-6d4b75cb6d-t5rqf
 +evicting pod kube-system/calico-kube-controllers-bc5cbc89f-slc7s
 +evicting pod kube-system/coredns-6d4b75cb6d-hncvw
 +pod/calico-kube-controllers-bc5cbc89f-slc7s evicted
 +pod/coredns-6d4b75cb6d-hncvw evicted
 +pod/coredns-6d4b75cb6d-t5rqf evicted
 +node/kubemaster.ittraining.loc drained
 +</code>
 +
 +Afin de connaître la ou les version(s) supérieure(s) à celle installée, utilisez la commande suivante :
 +
 +<code>
 +root@kubemaster:~# apt-cache madison kubeadm
 +   kubeadm | 1.25.16-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.15-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.14-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.13-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.12-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.11-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.10-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.9-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.8-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.7-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.6-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.5-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.4-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.3-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.2-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.1-1.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +   kubeadm | 1.25.0-2.1 | https://pkgs.k8s.io/core:/stable:/v1.25/deb  Packages
 +</code>
 +
 +Procédez maintenant à la mise-à-jour de kubeadm :
 +
 +<code>
 +root@kubemaster:~# apt-get update && apt-get install -y --allow-change-held-packages kubeadm=1.25.0-2.1
 +Ign:1 http://archive.debian.org/debian stretch InRelease
 +Atteint:2 http://archive.debian.org/debian stretch Release
 +Réception de:3 https://download.docker.com/linux/debian stretch InRelease [44,8 kB]
 +Atteint:5 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.25/deb  InRelease
 +44,8 ko réceptionnés en 0s (81,7 ko/s)
 +Lecture des listes de paquets... Fait
 +Lecture des listes de paquets... Fait
 +Construction de l'arbre des dépendances       
 +Lecture des informations d'état... Fait
 +Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
 +  libjsoncpp1 linux-image-4.9.0-8-amd64
 +Veuillez utiliser « apt autoremove » pour les supprimer.
 +Les paquets retenus suivants seront changés :
 +  kubeadm
 +Les paquets suivants seront mis à jour :
 +  kubeadm
 +1 mis à jour, 0 nouvellement installés, 0 à enlever et 7 non mis à jour.
 +Il est nécessaire de prendre 9 219 ko dans les archives.
 +Après cette opération, 537 ko d'espace disque seront libérés.
 +Réception de:1 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.25/deb  kubeadm 1.25.0-2.1 [9 219 kB]
 +9 219 ko réceptionnés en 0s (14,6 Mo/s)
 +apt-listchanges : Lecture des fichiers de modifications (« changelog »)...
 +(Lecture de la base de données... 137041 fichiers et répertoires déjà installés.)
 +Préparation du dépaquetage de .../kubeadm_1.25.0-2.1_amd64.deb ...
 +Dépaquetage de kubeadm (1.25.0-2.1) sur (1.24.2-00) ...
 +dpkg: avertissement: impossible de supprimer l'ancien répertoire  « /etc/systemd/system/kubelet.service.d » : Le dossier n'est pas vide
 +Paramétrage de kubeadm (1.25.0-2.1) ...
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que l'utilisation de l'option **--allow-change-held-packages**.
 +</WRAP>
 +
 +Vérifiez que la version désirée a été installée :
 +
 +<code>
 +root@kubemaster:~# kubeadm version
 +kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.0", GitCommit:"a866cbe2e5bbaa01cfd5e969aa3e033f3282a8a2", GitTreeState:"clean", BuildDate:"2022-08-23T17:43:25Z", GoVersion:"go1.19", Compiler:"gc", Platform:"linux/amd64"}
 +</code>
 +
 +Afin de connaître les version des composants du Control Plane compatibles avec la version 1.25.0 de kubeadm, utilisez la commande **kubeadm upgrade plan** :
 +
 +<code>
 +root@kubemaster:~# kubeadm upgrade plan
 +[upgrade/config] Making sure the configuration is correct:
 +[upgrade/config] Reading configuration from the cluster...
 +[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 +[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
 +[preflight] Running pre-flight checks.
 +[upgrade] Running cluster health checks
 +[upgrade] Fetching available versions to upgrade to
 +[upgrade/versions] Cluster version: v1.24.2
 +[upgrade/versions] kubeadm version: v1.25.0
 +I0314 07:25:04.222393    8210 version.go:256] remote version is much newer: v1.29.2; falling back to: stable-1.25
 +[upgrade/versions] Target version: v1.25.16
 +[upgrade/versions] Latest version in the v1.24 series: v1.24.17
 +
 +Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
 +COMPONENT   CURRENT       TARGET
 +kubelet     3 x v1.24.2   v1.24.17
 +
 +Upgrade to the latest version in the v1.24 series:
 +
 +COMPONENT                 CURRENT   TARGET
 +kube-apiserver            v1.24.2   v1.24.17
 +kube-controller-manager   v1.24.2   v1.24.17
 +kube-scheduler            v1.24.2   v1.24.17
 +kube-proxy                v1.24.2   v1.24.17
 +CoreDNS                   v1.8.6    v1.9.3
 +etcd                      3.5.3-0   3.5.4-0
 +
 +You can now apply the upgrade by executing the following command:
 +
 +        kubeadm upgrade apply v1.24.17
 +
 +_____________________________________________________________________
 +
 +Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
 +COMPONENT   CURRENT       TARGET
 +kubelet     3 x v1.24.2   v1.25.16
 +
 +Upgrade to the latest stable version:
 +
 +COMPONENT                 CURRENT   TARGET
 +kube-apiserver            v1.24.2   v1.25.16
 +kube-controller-manager   v1.24.2   v1.25.16
 +kube-scheduler            v1.24.2   v1.25.16
 +kube-proxy                v1.24.2   v1.25.16
 +CoreDNS                   v1.8.6    v1.9.3
 +etcd                      3.5.3-0   3.5.4-0
 +
 +You can now apply the upgrade by executing the following command:
 +
 +        kubeadm upgrade apply v1.25.16
 +
 +Note: Before you can perform this upgrade, you have to update kubeadm to v1.25.16.
 +
 +_____________________________________________________________________
 +
 +
 +The table below shows the current state of component configs as understood by this version of kubeadm.
 +Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
 +resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
 +upgrade to is denoted in the "PREFERRED VERSION" column.
 +
 +API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
 +kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
 +kubelet.config.k8s.io     v1beta1           v1beta1             no
 +_____________________________________________________________________
 +</code>
 +
 +Procédez donc à la mise-à-jour de kubeadm vers la version **1.25.0** :
 +
 +<code>
 +root@kubemaster:~# kubeadm upgrade apply v1.25.0
 +[upgrade/config] Making sure the configuration is correct:
 +[upgrade/config] Reading configuration from the cluster...
 +[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 +[preflight] Running pre-flight checks.
 +[upgrade] Running cluster health checks
 +[upgrade/version] You have chosen to change the cluster version to "v1.25.0"
 +[upgrade/versions] Cluster version: v1.24.2
 +[upgrade/versions] kubeadm version: v1.25.0
 +[upgrade] Are you sure you want to proceed? [y/N]: y
 +</code>
 +
 +A l'issu de processus, vous verrez les deux lignes suivantes :
 +
 +<code>
 +...
 +[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.25.0". Enjoy!
 +
 +[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
 +root@kubemaster:~#
 +</code>
 +
 +Mettez-à-jour maintenant **kubelet** et **kubectl** :
 +
 +<code>
 +root@kubemaster:~# apt-get update && apt-get install -y --allow-change-held-packages kubelet=1.25.0-2.1 kubectl=1.25.0-2.1
 +...
 +</code>
 +
 +Au cas où le fichier du service de kubelet a subi des modifications, re-démarrez le daemon systemctl ainsi que le service kubelet :
 +
 +<code>
 +root@kubemaster:~# systemctl daemon-reload
 +
 +root@kubemaster:~# systemctl restart kubelet
 +</code>
 +
 +Annulez le drain de kubemaster :
 +
 +<code>
 +root@kubemaster:~# export KUBECONFIG=/etc/kubernetes/admin.conf
 +
 +root@kubemaster:~# kubectl uncordon kubemaster.ittraining.loc
 +node/kubemaster.ittraining.loc uncordoned
 +</code>
 +
 +Constatez maintenant l'état des noeuds :
 +
 +<code>
 +root@kubemaster:~# kubectl get nodes
 +NAME                        STATUS   ROLES           AGE     VERSION
 +kubemaster.ittraining.loc   Ready    control-plane   3h15m   v1.25.0
 +kubenode1.ittraining.loc    Ready    <none>          3h4m    v1.24.2
 +kubenode2.ittraining.loc    Ready    <none>          3h6m    v1.24.2
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que le Control Plane est à la version 1.25.0 tandis que les Travailleurs sont à la version 1.24.2.
 +</WRAP>
 +
 +====5.2 - Mise-à-jour des Travailleurs====
 +
 +Afin de mettre à jour un Travailleur, il convient de faire un drain du Travailleur concerné :
 +
 +<code>
 +root@kubemaster:~# kubectl drain kubenode1.ittraining.loc --ignore-daemonsets --force
 +node/kubenode1.ittraining.loc cordoned
 +Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-hgrt9, kube-system/kube-proxy-czrqt
 +evicting pod kube-system/calico-kube-controllers-bc5cbc89f-q2zkl
 +pod/calico-kube-controllers-bc5cbc89f-q2zkl evicted
 +node/kubenode1.ittraining.loc drained
 +</code>
 +
 +Connectez-vous à kubenode1 :
 +
 +<code>
 +root@kubemaster:~# ssh -l trainee kubenode1
 +trainee@kubenode1's password: 
 +Linux kubenode1.ittraining.loc 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
 +
 +The programs included with the Debian GNU/Linux system are free software;
 +the exact distribution terms for each program are described in the
 +individual files in /usr/share/doc/*/copyright.
 +
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 +permitted by applicable law.
 +Last login: Thu Mar 14 06:43:48 2024 from 192.168.56.2
 +trainee@kubenode1:~$ su -
 +Mot de passe : 
 +root@kubenode1:~# 
 +</code>
 +
 +Commencez par modifier les sources de paquets :
 +
 +<code>
 +root@kubemaster:~# mkdir /etc/apt/keyrings
 +
 +root@kubemaster:~# curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
 +
 +root@kubemaster:~# echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.25/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
 +deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /
 +
 +root@kubenode1:~# vi /etc/apt/sources.list
 +
 +root@kubenode1:~# cat /etc/apt/sources.list
 +deb http://archive.debian.org/debian/ stretch main 
 +deb-src http://archive.debian.org/debian/ stretch main
 +deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
 +
 +root@kubenode1:~# apt update
 +</code>
 +
 +Mettez-à-jour le paquet **kubeadm** :
 +
 +<code>
 +root@kubenode1:~# apt-get update && apt-get install -y --allow-change-held-packages kubeadm=1.25.0-2.1
 +...
 +</code>
 +
 +Mettez-à-jour la configuration de kubeadm :
 +
 +<code>
 +root@kubenode1:~# kubeadm upgrade node
 +[upgrade] Reading configuration from the cluster...
 +[upgrade] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 +[preflight] Running pre-flight checks
 +[preflight] Skipping prepull. Not a control plane node.
 +[upgrade] Skipping phase. Not a control plane node.
 +[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
 +[upgrade] The configuration for this node was successfully updated!
 +[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
 +</code>
 +
 +Mettez-à-jour maintenant **kubelet** et **kubectl** :
 +
 +<code>
 +root@kubenode1:~# apt-get update && apt-get install -y --allow-change-held-packages kubelet=1.25.0-2.1 kubectl=1.25.0-2.1
 +...
 +</code>
 +
 +Au cas où le fichier du service de kubelet a subi des modifications, re-démarrez le daemon systemctl ainsi que le service kubelet :
 +
 +<code>
 +root@kubenode1:~# systemctl daemon-reload
 +
 +root@kubenode1:~# systemctl restart kubelet
 +</code>
 +
 +Retournez à la machine **kubemaster** :
 +
 +<code>
 +root@kubenode1:~# exit
 +déconnexion
 +trainee@kubenode1:~$ exit
 +déconnexion
 +Connection to kubenode1 closed.
 +root@kubemaster:~#
 +</code>
 +
 +Annulez le drain de kubenode1 :
 +
 +<code>
 +root@kubemaster:~# kubectl uncordon kubenode1.ittraining.loc
 +node/kubenode1.ittraining.loc uncordoned
 +</code>
 +
 +Constatez maintenant l'état des noeuds :
 +
 +<code>
 +root@kubemaster:~# kubectl get nodes
 +NAME                        STATUS   ROLES           AGE     VERSION
 +kubemaster.ittraining.loc   Ready    control-plane   3h43m   v1.25.0
 +kubenode1.ittraining.loc    Ready    <none>          3h32m   v1.25.0
 +kubenode2.ittraining.loc    Ready    <none>          3h34m   v1.24.2
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que le Control Plane et kubenode1 sont à la version 1.25.0 tandis que kubenode2 est à la version 1.24.2.
 +</WRAP>
 +
 +Faites un drain du kubenode2 :
 +
 +<code>
 +root@kubemaster:~# kubectl drain kubenode2.ittraining.loc --ignore-daemonsets --force
 +node/kubenode2.ittraining.loc cordoned
 +Warning: ignoring DaemonSet-managed Pods: kube-system/calico-node-7q8nc, kube-system/kube-proxy-xmqkj
 +evicting pod kube-system/coredns-565d847f94-b6j2v
 +evicting pod kube-system/calico-kube-controllers-bc5cbc89f-zfdlb
 +pod/calico-kube-controllers-bc5cbc89f-zfdlb evicted
 +pod/coredns-565d847f94-b6j2v evicted
 +node/kubenode2.ittraining.loc drained
 +</code>
 +
 +Connectez-vous à kubenode2 :
 +
 +<code>
 +root@kubemaster:~# ssh -l trainee kubenode2
 +trainee@kubenode2's password: 
 +Linux kubenode2.ittraining.loc 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
 +
 +The programs included with the Debian GNU/Linux system are free software;
 +the exact distribution terms for each program are described in the
 +individual files in /usr/share/doc/*/copyright.
 +
 +Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
 +permitted by applicable law.
 +Last login: Thu Mar 14 06:45:08 2024 from 192.168.56.2
 +trainee@kubenode2:~$ su -
 +Mot de passe : 
 +root@kubenode2:~#
 +</code>
 +
 +Commencez par modifier les sources de paquets :
 +
 +<code>
 +root@kubemaster:~# mkdir /etc/apt/keyrings
 +
 +root@kubemaster:~# curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
 +
 +root@kubemaster:~# echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.25/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
 +deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /
 +
 +root@kubenode1:~# vi /etc/apt/sources.list
 +
 +root@kubenode1:~# cat /etc/apt/sources.list
 +deb http://archive.debian.org/debian/ stretch main 
 +deb-src http://archive.debian.org/debian/ stretch main
 +deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
 +
 +root@kubenode1:~# apt update
 +</code>
 +
 +Mettez-à-jour le paquet **kubeadm** :
 +
 +<code>
 +root@kubenode2:~# apt-get update && apt-get install -y --allow-change-held-packages kubeadm=1.25.0-2.1
 +...
 +</code>
 +
 +Mettez-à-jour la configuration de kubeadm :
 +
 +<code>
 +root@kubenode2:~# kubeadm upgrade node
 +[upgrade] Reading configuration from the cluster...
 +[upgrade] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
 +[preflight] Running pre-flight checks
 +[preflight] Skipping prepull. Not a control plane node.
 +[upgrade] Skipping phase. Not a control plane node.
 +[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
 +[upgrade] The configuration for this node was successfully updated!
 +[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
 +</code>
 +
 +Mettez-à-jour maintenant **kubelet** et **kubectl** :
 +
 +<code>
 +root@kubenode2:~# apt-get update && apt-get install -y --allow-change-held-packages kubelet=1.25.0-2.1 kubectl=1.25.0-2.1
 +...
 +</code>
 +
 +Au cas où le fichier du service de kubelet a subi des modifications, re-démarrez le daemon systemctl ainsi que le service kubelet :
 +
 +<code>
 +root@kubenode2:~# systemctl daemon-reload
 +
 +root@kubenode2:~# systemctl restart kubelet
 +</code>
 +
 +Retournez à la machine **kubemaster** :
 +
 +<code>
 +root@kubenode2:~# exit
 +déconnexion
 +trainee@kubenode2:~$ exit
 +déconnexion
 +Connection to kubenode2 closed.
 +root@kubemaster:~#
 +</code>
 +
 +Annulez le drain de kubenode1 :
 +
 +<code>
 +root@kubemaster:~# kubectl uncordon kubenode2.ittraining.loc
 +node/kubenode2.ittraining.loc uncordoned
 +</code>
 +
 +Constatez maintenant l'état des noeuds :
 +
 +<code>
 +root@kubemaster:~# kubectl get nodes
 +NAME                        STATUS   ROLES           AGE     VERSION
 +kubemaster.ittraining.loc   Ready    control-plane   3h56m   v1.25.0
 +kubenode1.ittraining.loc    Ready    <none>          3h45m   v1.25.0
 +kubenode2.ittraining.loc    Ready    <none>          3h47m   v1.25.0
 +</code>
 +
 +<WRAP center round important 60%>
 +**Important** : Notez que tout a été mis-à-jour.
 +</WRAP>
  
 ---- ----
-Copyright © 2022 Hugh Norris+Copyright © 2024 Hugh Norris
Menu