Stratégies de mise à jour progressive avec Kubernetes Deployment

La mise à jour d'une application déployée sur Kubernetes s'effectue généralement de manière transparente via une stratégie appelée Rolling Update. Ce processus permet de remplacer progressivement les anciannes instances (Pods) par de nouvelles, garantissant ainsi une disponibilité continue du service.

Pour initier cette transition, il est nécessaire de modifier le fichier de configuration (manifeste) du Deployment, par exemple en mettant à jour le tag de l'image logicielle. Dans l'exemple suivant, nous passons d'une version standard à une version optimisée.

apiVersion: apps/v1
kind: Deployment
metadata:
 name: web-service-api
spec:
 replicas: 12
 selector:
   matchLabels:
     tier: backend
 minReadySeconds: 15
 strategy:
   type: RollingUpdate
   rollingUpdate:
     maxUnavailable: 2
     maxSurge: 3
 template:
   metadata:
     labels:
       tier: backend
   spec:
     containers:
     - name: api-container
       image: registry.example.com/app-backend:v2.1.0
       ports:
       - containerPort: 8080

Voici l'explication des paramètres clés définis dans la section strategy :

  • minReadySeconds : Définit le temps d'attente (ici 15 secondes) avant que Kubernetes ne considère qu'un nouveau Pod est opérationnel pour continuer la mise à jour.
  • maxUnavailable : Définit le nombre maximum de Pods pouvant être indisponibles durant le processus. Avec une valeur de 2, le cluster garantit qu'au moins 10 Pods (sur 12) restent actifs.
  • maxSurge : Définit le nombre de Pods supplémentaires pouvant être créés au-delà de la capacité cible. Ici, 3 nouveaux Pods peuvent être lancés avant même que les anciens ne soient supprimés.

Une fois le fichier modifié, appliquez les changements à l'aide de la commande suivante. L'option --record (bien que dépréciée dans les versions récentes au profit des annotations) permet de conserver une trace de la commande dans l'historique du déploiement :

kubectl apply -f app-deployment.yaml --record

Pour suivre l'évolution de la mise à jour en temps réel et s'assurer que le déploiement se déroule sans erreur, utilisez la commande rollout status :

kubectl rollout status deployment web-service-api

Le terminal affichera alors la progression des réplicas mis à jour. Par exemple :

Waiting for deployment "web-service-api" rollout to finish: 3 out of 12 new replicas have been updated...
Waiting for deployment "web-service-api" rollout to finish: 6 out of 12 new replicas have been updated...
Waiting for deployment "web-service-api" rollout to finish: 9 out of 12 new replicas have been updated...
deployment "web-service-api" successfully rolled out

Cette approche permet un contrôle fin sur le cycle de vie de l'application, en limitant l'impact sur les utilisateurs finaux lors des montées de version.

Étiquettes: kubernetes deployment RollingUpdate kubectl devops

Publié le 13 juillet à 18h05