Mettre à jour son cluster Kubernetes dans Azure

Pour être au niveau coté sécurité et fonctionnalité, il est important de rester à jour sur sa version de Kubernetes. Nous allons voir ici comment mettre à jour notre cluster AKS sans pour autant entraîner d’interruption de service.

Initialisation

Tout d’abord, je vais utiliser le script Powershell que j’ai stocké ici pour provisionner une container registry et un cluster AKS pour héberger mon application.

19 1024x597 - Mettre à jour son cluster Kubernetes dans Azure

J’utilise Visual Studio Code avec l’extension Powershell pour développer et tester mon script.

1 1024x686 - Mettre à jour son cluster Kubernetes dans Azure

Dans ce script, vous pouvez paramétrer la localisation, le nom du ressource group, de la registry et du cluster. Une fois exécuté, le script vous fourni les informations sur votre cluster déployé.

2 1024x697 - Mettre à jour son cluster Kubernetes dans Azure

Ici, j’ai déployé un cluster comprenant 3 nodes réparti chacun dans une zone de disponibilité de la région North Europe.

Déploiement

Je vais maintenant construire une image Docker pour mon projet, toujours hébergé sur GitHub. J’ai choisi comme projet de test une Web API .Net Core 3.1.

Pour avoir une vue détaillé du déploiement d’une application dans AKS, vous pouvez consulter ce tutoriel !

docker build -f "NetCoreWebApi/Dockerfile" . -t webapi

3 1024x620 - Mettre à jour son cluster Kubernetes dans Azure

En parallèle, je me connecte à ma registry :

az acr login --name registryaks1004

4 1024x68 - Mettre à jour son cluster Kubernetes dans Azure

Je tag mon image :

docker tag webapi registryaks1004.azurecr.io/webapi:latest

Et je la push :

docker push registryaks1004.azurecr.io/webapi:latest

5 1024x210 - Mettre à jour son cluster Kubernetes dans Azure

Je déploie mon API

kubectl create -f .\DeployWebApi.yaml

8 - Mettre à jour son cluster Kubernetes dans Azure

Je teste quelques commandes pour connaitre l’état de mon déploiement :

kubectl describe pod | select-string -pattern '^Name:','^Node:'

12 1024x233 - Mettre à jour son cluster Kubernetes dans Azure

kubectl get service

9 1024x253 - Mettre à jour son cluster Kubernetes dans Azure

C’est OK, mon API est bien disponible à l’url indiquée par la commande jouée précédemment (External IP) 🙂

10 1024x151 - Mettre à jour son cluster Kubernetes dans Azure

Mise à jour du cluster

Je liste maintenant les mises à jour disponibles pour mon cluster, volontairement déployés lors de la phase d’initialisation en version 1.13.2 :

az aks get-upgrades --resource-group rgAks --name aksClusterMaj

6 1024x491 - Mettre à jour son cluster Kubernetes dans Azure

Soyons fou, je vais essayer d’installer une des dernières versions, la 1.15.5 :

az aks upgrade --name aksClusterMaj --resource-group rgAks --kubernetes-version 1.15.5

7 1024x146 - Mettre à jour son cluster Kubernetes dans Azure

Et bien non ! il n’est pas possible de “sauter” une version majeure. Par exemple, les mises à niveau 1.12.x -> 1.13.x ou 1.13.x -> 1.14.x sont autorisées, mais pas 1.12.x -> 1.14.x ! Je vais donc commencer par passer en 1.14.x.

Installons donc tout d’abord notre version 1.14.8 :

az aks upgrade --name aksClusterMaj --resource-group rgAks --kubernetes-version 1.14.8

14 1024x87 - Mettre à jour son cluster Kubernetes dans Azure

Pendant la durée de la mise à jour mon application reste accessible :

15 1024x163 - Mettre à jour son cluster Kubernetes dans Azure

az aks get-upgrades --resource-group rgAks --name aksClusterMaj

16 1024x323 - Mettre à jour son cluster Kubernetes dans Azure

Je peux maintenant passer en version 1.15.10 !

az aks upgrade --name aksClusterMaj --resource-group rgAks --kubernetes-version 1.15.10

17 1024x121 - Mettre à jour son cluster Kubernetes dans Azure

Idem, mon application est comme précédemment imperturbable 🙂

18 1024x157 - Mettre à jour son cluster Kubernetes dans Azure
az aks show --resource-group rgAks--name aks --output table 
20 1024x574 - Mettre à jour son cluster Kubernetes dans Azure

Les explications !

Comme vu précédemment, notre API est restée accessible tout du long de la mise à jour du cluster. Pourquoi ?

En fait ce n’est pas le node lui même qui est mis à jour. Il est plutôt remplacé par un node cible.

Pendant la mise à jour, AKS ajoute un nouveau nœud (tampon) au cluster utilisant la version de Kubernetes ciblée. Une fois que les pods d’application ont étés déplacés d’un nœud vers le tampon, le nœud est mis à jour sur la version cible, il devient alors le tampon pour l’opération d’update du cluster. Et l’opération se répétera pour l’ensemble des nœuds. A la fin du processus le nœud créé initialement est supprimé.

A noter que nous pouvons jouer sur le paramètre max-surge pour préciser le nombre de noeud tampon : https://docs.microsoft.com/fr-fr/azure/aks/upgrade-cluster#customize-node-surge-upgrade

Attention, dernière précision : si vous utilisez plusieurs nodepool vous devez :

  • Mettre à jour votre control plane avec la commande az aks upgrade vu précédemment.
  • Puis mettre à jour vos différents nodepools avec az aks nodepool upgrade.

Bye

Thomas

Une réponse sur “Mettre à jour son cluster Kubernetes dans Azure”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *