Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Rem. trad.: Ce document de Weaveworks prĂ©sente les stratĂ©gies de dĂ©ploiement d'applications les plus populaires et dĂ©crit comment mettre en Ɠuvre certaines des plus avancĂ©es Ă  l'aide de l'opĂ©rateur Kubernetes Flagger. Il est rĂ©digĂ© dans un langage simple et comprend des schĂ©mas clairs, permettant mĂȘme aux ingĂ©nieurs dĂ©butants de comprendre le sujet.

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)
Le schéma est tiré de une autre revue des stratégies de déploiement présentée par Container Solutions

L'un des plus grands défis lors du développement d'applications cloud natives aujourd'hui est d'accélérer le déploiement. Avec une approche microservices, les développeurs travaillent déjà avec des applications entiÚrement modulaires et les conçoivent, permettant à différentes équipes d'écrire du code et d'apporter des modifications de maniÚre simultanée.

Des déploiements plus courts et plus fréquents présentent les avantages suivants :

  • Le temps de mise sur le marchĂ© est rĂ©duit.
  • Les nouvelles fonctionnalitĂ©s atteignent plus rapidement les utilisateurs.
  • Les retours des utilisateurs parviennent plus vite Ă  l'Ă©quipe de dĂ©veloppeurs. Cela signifie que l'Ă©quipe peut ajouter des fonctionnalitĂ©s et corriger des problĂšmes plus rapidement.
  • Le moral des dĂ©veloppeurs s'amĂ©liore : travailler avec un plus grand nombre de fonctionnalitĂ©s en dĂ©veloppement est plus intĂ©ressant.


Cependant, avec une fréquence de version accrue, les risques d'affecter négativement la fiabilité de l'application ou l'expérience utilisateur augmentent également. C'est pourquoi il est crucial pour les équipes d'exploitation et DevOps de structurer les processus et de gérer les stratégies de déploiement de maniÚre à minimiser le risque pour le produit et les utilisateurs. (En savoir plus sur l'automatisation des pipelines CI/CD peut le faire) ici.)

Dans cette publication, nous discuterons des différentes stratégies de déploiement dans Kubernetes, y compris les déploiements rolling et des méthodes plus avancées telles que les déploiements canary et leurs variations.

Stratégies de déploiement

Il existe plusieurs types de stratégies de déploiement que vous pouvez utiliser en fonction de vos objectifs. Par exemple, vous pourriez avoir besoin d'apporter des modifications à un certain environnement pour un test approfondi, à un sous-ensemble d'utilisateurs/clients, ou d'effectuer un test limité sur des utilisateurs avant de rendre une fonctionnalité publique.

Rolling (déploiement progressif, 'graduel')

Il s'agit d'une stratĂ©gie de dĂ©ploiement standard dans Kubernetes. Elle remplace progressivement, un par un, les pods de l'ancienne version de l'application par des pods de la nouvelle version — sans temps d'arrĂȘt pour le cluster.

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Kubernetes attend que les nouveaux pods soient prĂȘts Ă  fonctionner (en les vĂ©rifiant grĂące Ă  des tests de disponibilitĂ©), avant de commencer Ă  rĂ©duire les anciens. En cas de problĂšme, une mise Ă  jour progressive peut ĂȘtre interrompue sans arrĂȘter l'intĂ©gralitĂ© du cluster. Dans le fichier YAML dĂ©crivant le type de dĂ©ploiement, la nouvelle image remplace l'ancienne image :

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: awesomeapp
    spec:
      containers:
        - name: awesomeapp
          image: imagerepo-user/awesomeapp:new
          ports:
            - containerPort: 8080

Les paramĂštres de la mise Ă  jour progressive peuvent ĂȘtre prĂ©cisĂ©s dans le fichier de manifeste :

spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxSurge: 25%
       maxUnavailable: 25%  
  template:
  ...

Recreate (recréation)

Dans ce type de dĂ©ploiement le plus simple, les anciens pods sont dĂ©truits tous en mĂȘme temps et remplacĂ©s par de nouveaux :

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Le manifeste correspondant ressemble Ă  ceci :

spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
  ...

Blue/Green (déploiements bleu/vert)

La stratégie de déploiement bleu/vert (parfois appelée rouge/noir) prévoit le déploiement simultané des anciennes (vertes) et nouvelles (bleues) versions de l'application. AprÚs le déploiement des deux versions, les utilisateurs normaux ont accÚs à la version verte, tandis que la bleue est accessible à l'équipe QA pour l'automatisation des tests via un service séparé ou un redirection directe des ports :

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp-02
spec:
  template:
    metadata:
      labels:
        app: awesomeapp
        version: "02"

Une fois que la version bleue (nouvelle) a été testée et que sa mise en production a été approuvée, le service bascule vers elle, tandis que la version verte (ancienne) est réduite :

apiVersion: v1
kind: Service
metadata:
  name: awesomeapp
spec:
  selector:
    app: awesomeapp
    version: "02"
...

Canary (déploiements canari)

Les mises en production canari ressemblent aux déploiements bleu/vert, mais sont mieux gérées et utilisent une approche progressive . Ce type comprend plusieurs stratégies différentes, y compris les lancements « cachés » et les tests A/B.

Cette stratégie est utilisée lorsqu'il est nécessaire de tester une nouvelle fonctionnalité, généralement dans le backend de l'application. L'idée est de créer deux serveurs presque identiques : l'un dessert presque tous les utilisateurs, tandis que l'autre, avec les nouvelles fonctionnalités, ne dessert qu'un petit sous-groupe d'utilisateurs, aprÚs quoi les résultats de leurs performances sont comparés. Si tout se passe sans erreurs, la nouvelle version est progressivement déployée sur l'ensemble de l'infrastructure.

Bien que cette stratĂ©gie puisse ĂȘtre mise en Ɠuvre uniquement Ă  l'aide de Kubernetes, en remplaçant les anciens pods par de nouveaux, il est beaucoup plus pratique et simple d'utiliser un service mesh tel qu'Istio.

Par exemple, vous pouvez avoir deux manifestes différents dans Git : un standard avec le tag 0.1.0 et un "canari" avec le tag 0.2.0. En modifiant les poids dans le manifeste du passerelle virtuelle Istio, vous pouvez gérer la distribution du trafic entre ces deux déploiements :

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Un guide Ă©tape par Ă©tape sur la mise en Ɠuvre des dĂ©ploiements canari avec Istio se trouve dans le document GitOps Workflows with Istio. (Note de traduction.: Nous avons Ă©galement traduit un article sur les dĂ©ploiements canari dans Istio ici.)

Déploiements canari avec Weaveworks Flagger

Weaveworks Flagger permet de gérer facilement et efficacement les déploiements canari.

Flagger automatise leur gestion. Il utilise Istio ou AWS App Mesh pour le routage et le basculement du trafic, ainsi que des mĂ©triques Prometheus pour analyser les rĂ©sultats. De plus, l'analyse des dĂ©ploiements canari peut ĂȘtre complĂ©tĂ©e par des webhooks pour effectuer des tests d'acceptation, des tests de charge et tout autre type de vĂ©rification.

En se basant sur le dĂ©ploiement Kubernetes et, si nĂ©cessaire, sur l'Ă©chelle horizontale des pods (HPA), Flagger crĂ©e des ensembles d'objets (dĂ©ploiements Kubernetes, services ClusterIP et services virtuels Istio ou App Mesh) pour effectuer l'analyse et la mise en Ɠuvre des dĂ©ploiements canari :

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

En mettant en Ɠuvre une boucle de contrĂŽle (control loop), Flagger bascule progressivement le trafic vers le serveur canari, tout en mesurant des indicateurs clĂ©s de performance, tels que le taux de requĂȘtes HTTP rĂ©ussies, la durĂ©e moyenne des requĂȘtes et la santĂ© des pods. En se basant sur l'analyse des KPI (indicateurs clĂ©s de performance), la partie canari soit se dĂ©veloppe, soit se rĂ©duit, et les rĂ©sultats de l'analyse sont publiĂ©s sur Slack. Une description et une dĂ©monstration de ce processus se trouvent dans le document Progressive Delivery for App Mesh.

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Déploiements sombres (cachés) ou A/B

Le déploiement caché est une autre variation de la stratégie canarienne (à noter que Flagger peut également travailler avec cela). La différence entre un déploiement caché et un déploiement canarien est que les déploiements cachés concernent le frontend, et non le backend comme les canariens.

Un autre nom pour ces déploiements est A/B testing. Au lieu de permettre l'accÚs à une nouvelle fonctionnalité à tous les utilisateurs, elle est proposée à seulement une partie limitée d'entre eux. En général, ces utilisateurs ne savent pas qu'ils sont des testeurs précurseurs (ce qui donne lieu au terme « déploiement caché »).

À l'aide de commutateurs de fonctionnalitĂ© (feature toggles) et d'autres outils, il est possible de suivre comment les utilisateurs interagissent avec la nouvelle fonctionnalitĂ©, si cela les attire ou s'ils trouvent la nouvelle interface utilisateur dĂ©routante, ainsi que d'autres types de mĂ©triques.

Stratégies de déploiement dans Kubernetes : rolling, recreate, blue/green, canary, dark (tests A/B)

Flagger et A/B déploiements

En plus du routage basĂ© sur le poids, Flagger peut Ă©galement diriger le trafic vers le serveur canarien en fonction des paramĂštres HTTP. Lors des tests A/B, il est possible d'utiliser des en-tĂȘtes HTTP ou des cookies pour rediriger un segment spĂ©cifique d'utilisateurs. Cela est particuliĂšrement efficace dans le cas d'applications frontend nĂ©cessitant une affinitĂ© de session au serveur (session affinity). Des informations supplĂ©mentaires peuvent ĂȘtre trouvĂ©es dans la documentation de Flagger.

L'auteur remercie Stefan Prodan, ingénieur chez Weaveworks (et créateur de Flagger), pour tous ces schémas de déploiement impressionnants.

P.S. de l'auteur

Lisez aussi dans notre blog :

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster