1. INTERVENANTS

DJEBBOURI Younes
Architecte Azure et DevOps đŸš€đŸ’»âœš

2. PROBLÉMATIQUE

⛔ Mettre à jour un cluster Kubernetes, ce n’est pas du “next next finish”.

Avec AKS, chaque upgrade ne se limite pas à passer d’une version à une autre de Kubernetes.
C’est tout un Ă©cosystĂšme qui bouge : kubelet, kube-proxy, DNS, CNI, CSI, Metrics Server, Secret Provider, autoscaler, etc.

👉 Et parfois, un simple clic sur “Upgrade” peut dĂ©clencher des breaking changes invisibles
 jusqu’à ce que ton cluster tombe.

1. Comment faire les mises Ă  niveau sans faire sauter le cluster ?
👉 Cycle de vie Kubernetes → Risques de breaking change, stratĂ©gies d’upgrade (canary, blue/green, LTS
)

2. Comment assurer la rĂ©silience de l’infrastructure sous-jacente ?
👉 Haute disponibilitĂ© → Zones, redondance, autoscaler, Node Auto-Provisioning (NAP), etc

3. Comment garantir la résilience des applications ?
👉 RĂ©silience applicative → HPA, Dapr, probes, tolerations
 Les bonnes pratiques doivent ĂȘtre codĂ©es dĂšs le dĂ©part

3. AKS UPGRADE

Sur AKS, tu choisis la version de Kubernetes que tu veux utiliser, mais tu dois respecter la logique de progression imposée par Azure :

  • 🟱 1.30 vers 1.31
  • 🟱 1.32 vers 1.33
  • 🔮 1.29 vers 1.32

Tu es donc obligé de passer par chaque version intermédiaire, avec tous les impacts que cela implique.


Laisser AKS faire les mises Ă  jour tout seul ?
Ce n’est pas une option recommandĂ© en prod
Tu ne sais pas quand ça démarre, ni combien de temps ça prendra.
Et le dĂ©placement des workloads peut se faire sans contrĂŽle prĂ©cis sur la fenĂȘtre d’impact.
⛔ On Ă©carte tout de suite

Une mise à jour réguliÚre, version aprÚs version.
Tu restes dans la zone de support AKS (N, N-1, N-2), mais

Tu dois gérer les changements fréquents, les tests, les éventuelles régressions.
Et plus l’environnement est complexe, plus c’est tendu

Tu attends 12 Ă  18 mois, puis tu fais plusieurs upgrades successives pour rattraper.
Mais ce genre de mise à niveau combinée est plus risquée :

  • Tu accumules les breaking changes, et ton rollback devient plus difficile Ă  maĂźtriser

Tu isoles les workloads dans des Node Pools séparés ( userpool )
et tu mets Ă  jour un Node Pool Ă  la fois.
Tu réduis la surface à risque, tu peux tester avant de généraliser
👉 Et si problĂšme il y a : tu peux toujours recrĂ©er un Node Pool avec une version antĂ©rieure

Tu reconstruis ton cluster dans un environnement parallÚle (le « Green« ),
pendant que le « Blue » continue de tourner.

Une fois validé, tu fais basculer la prod vers le Green,
et tu peux dĂ©sactiver ou supprimer l’ancien.

🟱 Meilleure maütrise
🟱 Moins d’interruption

Depuis la version 1.28, bonne nouvelle :
âžĄïž Les workloads peuvent exprimer une exigence minimale de compatibilitĂ© Kubernetes, ce qui permet Ă  AKS de bloquer un upgrade si nĂ©cessaire.
Et si l’upgrade Ă©choue, AKS peut revenir en arriĂšre automatiquement
✳ Le meilleur choix reste de prĂ©voir le Blue/Green dĂšs l’architecture initiale, via Terraform.
Tu gagneras en sécurité, en lisibilité, et en autonomie

5. RESILIENCE

Avant d’acheter des options de haute dispo à tout-va, il faut qualifier les types de pannes que tu souhaites absorber, et à quel niveau :

RisquePérimÚtre concernéRéponse disponible
Perte d’un PodRĂ©silience applicativeKubernetes recrĂ©e automatiquement le Pod sur un autre nƓud.
Perte d’un nƓudRĂ©silience infrastructureUn nouveau nƓud est provisionnĂ©, le dĂ©faillant est Ă©vacuĂ©.
Panne régionale AzureRésilience businessSi anticipée, tu peux redéployer dans une autre région.
Panne d’une gĂ©ographie entiĂšre (ex. Western Europe + North Europe)RĂ©silience stratĂ©giqueDemande un plan DRP / Multi-Cloud, souvent lourd Ă  justifier.
⚠ Important : AKS, c’est juste une brique dans ton systĂšme. Si tu as un backend SQL, un cache Redis ou une file d’attente en single-region
 c’est probablement eux qui vont plier en premier, pas ton cluster

AKS est un service régional, avec une tolérance aux pannes dans la région.
Mais dĂšs qu’on parle de bascule entre rĂ©gions (ou gĂ©ographies Azure), ce n’est plus automatique.

Et lĂ , tout devient plus complexe :

  • Bascule de donnĂ©es (et pas juste du code)
  • Synchronisation des secrets, certificats, configs
  • RĂ©plication entre bases, entre services, entre rĂ©gions

💾 Et bien sĂ»r, tout ça a un coĂ»t :
âžĄïž Tu veux du chaud-froid (active/passive) ? Double les ressources.
âžĄïž Tu veux du chaud-chaud ? PrĂ©vois aussi la complexitĂ© de synchro et de test.

La vraie question devient donc :
👉 “Mon business est-il prĂȘt Ă  financer cette rĂ©silience supplĂ©mentaire ?”


Tu ne peux pas ĂȘtre rĂ©silient si ton cluster n’arrive dĂ©jĂ  pas Ă  scaler correctement.

AKS te propose trois stratégies de scalabilité selon le niveau de contrÎle que tu veux garder :

1. Manual Scale

  • Tu fixes manuellement le nombre de nƓuds par pool
  • Simple et prĂ©visible
  • Mais si ça sature, ça plante.

2. Cluster Autoscaler

  • Active ou dĂ©sactive des nƓuds dans un Node Pool selon la charge rĂ©elle
  • BasĂ© sur des seuils de CPU/mĂ©moire
  • Peut rĂ©duire la facture
 si bien configurĂ©

3. NAP (Node Auto-Provisioning)

  • Provisionne dynamiquement des VMs hors des Node Pools
  • PilotĂ© automatiquement en fonction du besoin rĂ©el
  • Plus granulaire, mais encore en Preview (et avec limitations)

Le Node Auto-Provisioning (NAP), inspirĂ© de Karpenter chez AWS, vise une approche “juste ce qu’il faut”.

🧠 IdĂ©e :

Pourquoi garder des VM tournant Ă  vide si je peux les crĂ©er Ă  la volĂ©e, pile au moment oĂč mes pods les rĂ©clament ?

🔍 Fonctionnement :

  • Le scheduler observe la demande
  • Si aucun nƓud existant ne peut hĂ©berger le pod, il crĂ©e une VM dĂ©diĂ©e avec les specs parfaites
  • Quand plus rien ne tourne dessus, il la dĂ©truit

🚹 Limitations actuelles (car toujours en Preview) :

  • Incompatible avec le Cluster Autoscaler
  • Pas de support pour :
    • Windows Node Pools
    • Disk Encryption Sets
    • Start/Stop des clusters (surfacturation possible)
    • Zones Availability (certaines rĂ©gions uniquement)

👉 À surveiller, mais Ă  ne pas dĂ©ployer en prod critique pour l’instant.

CritĂšreManual ScaleCluster AutoscalerNAP / Karpenter
ComplexitĂ©Faible ✅Moyenne ✅ÉlevĂ©e ❌
VisibilitĂ© sur les coĂ»tsExcellente ✅Moyenne ❌OptimisĂ©e ✅
MaturitĂ©Stable ✅Stable ✅En dĂ©veloppement ❌
  • System Node Pools : ne bougent presque jamais.
    • GĂšre-les avec du Manual Scale bien dimensionnĂ©.
  • User Node Pools : c’est lĂ  que vit ton applicatif.
    • 👉 Active le Cluster Autoscaler, mais surveille les mĂ©triques de saturation.
    • Si tu touches trop souvent le “max nodes”, il est temps de revoir ta config
  • đŸ§Ș NAP : Ă  tester en environnement de hors prod
    • 👉 Il peut t’aider Ă  explorer une scalabilitĂ© ultra fine pour des workloads batch ou Ă©vĂ©nementiels

AKS est solide, mais il ne garantit rien au-delà de la région.
La vraie rĂ©silience, c’est :

  • De la redondance (multi-AZ, multi-region
)
  • Du pilotage (monitoring, alerting)
  • De la discipline (infra as code, tests de bascule, documentation claire)

Et comme toujours dans le cloud :

⚖ Ce que tu gagnes en scalabilitĂ©, tu dois le payer en observabilitĂ©

« Un cluster peut tomber, un pod peut crasher, une dĂ©pendance peut rĂ©pondre trop lentement

Mais ton appli doit tenir. La vraie résilience commence dans le deployment.yaml. »

DÚs la conception, la résilience passe par des manifeste Kubernetes bien pensés.
Chaque workload devrait clairement déclarer :

  • Des requests pour rĂ©server les ressources minimales nĂ©cessaires (CPU, mĂ©moire).
  • Des limits pour Ă©viter la consommation abusive et assurer une Ă©quitĂ© entre pods.
  • Des Tolerations / Node Affinity pour imposer des contraintes de scheduling prĂ©cises.

Et le classique :

resources:
  requests:
    cpu: "0.5"
    memory: "2Gi"
  limits:
    cpu: "4"
    memory: "16Gi"

Sans ces informations :

  • Le pod peut ĂȘtre planifiĂ© n’importe oĂč, y compris sur des nƓuds systĂšme.
  • Il peut monopoliser les ressources, provoquant du throttle sur les autres workloads.
  • Le recyclage ne se dĂ©clenche jamais, mĂȘme si le pod dĂ©raille.

Et si un dĂ©veloppeur dĂ©finit arbitrairement des limites Ă  4 CPU / 16Gi alors qu’il consomme 10%, tu sur-provisionnes ton cluster pour rien.
Résultat : tu paies pour le silence.

HPA est un contrĂŽleur natif Kubernetes qui ajuste automatiquement le nombre de pods selon :

  • L’utilisation CPU
  • L’utilisation mĂ©moire (si le Metric Server est bien configurĂ©)
  • Ou des Custom Metrics (via Prometheus Adapter, par exemple)

Exemple :

spec:
  minReplicas: 3
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60

“Ton backend explose à 20 000 messages en attente ?
KEDA te balance des pods. Sans broncher.”

KEDA ( Kubernetes Event-Driven Autoscaling )

KEDA permet de déclencher un scaling applicatif non pas selon des métriques CPU classiques, mais sur des événements concrets.
Un backlog Kafka qui grossit ? Une table SQL qui déborde ? KEDA observe, réagit
 et scale.

Parce que le vrai pic de charge ne vient pas toujours du CPU/RAM

Tu as une app de traitement en temps réel, branchée sur une file Apache Kafka.
Pas de surcharge tant que le flux reste fluide.
Mais dùs que les messages s’accumulent dans un topic ?
âžĄïž KEDA capte l’augmentation du lag Kafka
âžĄïž Et lance automatiquement des pods supplĂ©mentaires pour accĂ©lĂ©rer le traitement.

Dapr (Distributed Application Runtime) est un projet open source initié par Microsoft, adopté largement dans la communauté cloud-native.

Son objectif est simple mais ambitieux :
âžĄïž Simplifier le dĂ©veloppement d’applications rĂ©silientes, en externalisant les mĂ©canismes complexes hors du code mĂ©tier.

Dapr agit comme une couche d’abstraction portable, disponible dans n’importe quel langage, qui permet aux dĂ©veloppeurs de se concentrer sur la logique fonctionnelle — tout en bĂ©nĂ©ficiant de patrons de rĂ©silience Ă©prouvĂ©s.

Dapr embarque nativement plusieurs mécanismes clés de résilience :

PatternRĂŽle
⏱ TimeoutsÉviter qu’une requĂȘte n’attende indĂ©finiment une rĂ©ponse.
🔁 Retry / BackoffRĂ©essayer automatiquement les appels externes avec une logique progressive.
🚧 Circuit BreakerCouper temporairement les appels vers un service en Ă©chec pour prĂ©server l’ensemble du systĂšme.
💓 Health MonitoringVĂ©rifier l’état mĂ©tier d’un service via des endpoints applicatifs.

Ces comportements peuvent ĂȘtre dĂ©finis par configuration (policies), sans ĂȘtre codĂ©s dans l’application.

Ton service notifications-api appelle un provider SMTP externe.

âžĄïž Avec Dapr, tu configures :

  • Timeout Ă  3 secondes
  • 3 retries maximum
  • Circuit breaker si 5 erreurs consĂ©cutives
  • Et un endpoint /healthz/email pour tester la connectivitĂ© SMTP

Résultat : si le provider rame ou tombe, ton service ne sature pas, évite les boucles infinies et peut rediriger intelligemment vers un fallback.

  • Dapr s’installe comme sidecar dans ton Pod Kubernetes.
  • Il est invisible pour l’infra, mais redoutablement efficace cĂŽtĂ© applicatif.
  • Tu peux l’installer cluster-wide via Helm ou Operator

✅ Il devient un agent de rĂ©silience as a service, au plus prĂšs de tes workloads.

Istio est une solution de Service Mesh open source, conçue pour sécuriser, contrÎler et observer les communications entre tes microservices, sans modifier le code des applications

Déployé en tant que proxy sidecar (Envoy) injecté dans chaque Pod, Istio intercepte et gÚre tout le trafic est-ouest (interne au cluster), avec une finesse redoutable

En centralisant la gestion des flux rĂ©seau, Istio permet d’implĂ©menter facilement des stratĂ©gies avancĂ©es de tolĂ©rance aux pannes, sans intervention des dĂ©veloppeurs.

Voici ce qu’il peut faire pour toi :

FonctionDescription
🔁 Retry / TimeoutRedĂ©clenche automatiquement des requĂȘtes en cas d’échec transitoire.
🚧 Circuit BreakerIsole un service en panne pour Ă©viter d’aggraver la situation.
➕ Load BalancingRĂ©partit le trafic entre plusieurs instances en fonction de rĂšgles avancĂ©es.
🌐 Traffic ShiftingDirige un pourcentage du trafic vers une nouvelle version (canary, A/B).
📈 Health-Based RoutingNe dirige le trafic qu’aux instances saines.

un microservice critique qui appelle un service de facturation

Tu veux éviter que toute la chaßne plante si billing-api ne répond plus ?

Avec Istio, tu peux définir via un simple manifeste :

  • 3 tentatives de retry avec timeout Ă  2 secondes
  • Circuit breaker aprĂšs 5 erreurs sur une fenĂȘtre de 30s
  • Fallback automatique vers une version de secours (shadow service)
  • Redirection du trafic vers une version canary Ă  10%

Et tout ça, sans toucher au code du microservice.

  • Istio est supportĂ© sur AKS, mĂȘme si non natif.
  • Installation via istioctl ou Helm.
  • IntĂ©gration possible avec Kiali (visualisation du maillage), Jaeger (tracing), Prometheus/Grafana (metrics)

Tu gagnes une vision complùte du trafic + contrîle dynamique sans modifier une seule ligne d’application

4. CONCLUSION

Un upgrade bien prĂ©parĂ©, c’est dĂ©jĂ  la moitiĂ© de la bataille.
Anticiper les breaking changes, choisir la bonne stratĂ©gie (canary, blue/green
), et dimensionner correctement ton cluster, c’est ce qui fait la diffĂ©rence entre une mise Ă  jour fluide
 et une nuit blanche.

Mais attention : sans sauvegarde, tout ça reste fragile.
👉 Tu peux avoir le meilleur design du monde, si un volume disparaüt ou si ton etcd est corrompu, tu n’as plus aucun filet.

PROCHAIN ARTICLE

👉 La Partie 2 sera dĂ©diĂ©e Ă  la sauvegarde et la restauration dans AKS

On verra :

  • Comment protĂ©ger ton infrastructure via l’IaC.
  • Comment capturer l’état du cluster (etcd, RBAC, secrets, objets Kubernetes).
  • Comment sĂ©curiser les volumes persistants (PVC, snapshots, Velero, AKS Native Backup).
  • Et surtout, comment tester tes plans de reprise pour Ă©viter la panique en prod.


📎 Pour aller plus loin (docs Microsoft & GitHub)