Fermer

octobre 22, 2022

Automatisez le déploiement sans temps d’arrêt sur le cluster GKE à l’aide de la stratégie de déploiement Blue Green


Il est difficile de déployer une nouvelle version de code sans temps d’arrêt. Pour résoudre ce problème, une stratégie de déploiement bleu-vert est utilisée.

La stratégie de déploiement bleu vert est utilisée pour déployer une nouvelle version du code. Avec l’aide de la stratégie de déploiement bleu-vert, il est possible de revenir à la version précédente de l’application.

Pour automatiser ce déploiement, nous utilisons Jenkins comme pipeline CICD pour déployer une application sur le conteneur du cluster de moteurs Google Kubernetes avec une stratégie de déploiement bleu/vert utilisant un déploiement sans temps d’arrêt. Une stratégie de déploiement bleu/vert augmentera la disponibilité des applications et réduira les risques de déploiement en simplifiant le processus de restauration en cas d’échec d’un déploiement.

Schéma d’architecture :
Diagramme d'arc

Avantages :
1. Débogage : dans le déploiement bleu-vert, les restaurations laissent toujours intact le déploiement ayant échoué pour analyse.

  1. Restauration instantanée : nous pouvons facilement revenir à la version précédente en un instant.
  2. Zéro temps d’arrêt : aucun temps d’arrêt signifie que nous pouvons faire des versions à tout moment.

  3. Stabilité : plus de stabilité pour votre application. Vous implémenterez des pipelines complexes avec toutes les couches de tests automatisés.

Outils et services requis :

  • GitHub
  • Jenkins
  • Docker
  • Hub Docker
  • Moteur Google Kubernetes

Qu’est-ce que GitHub ?

GitHub est un service d’hébergement de référentiel Git. GitHub possède de nombreuses fonctionnalités, telles que le contrôle d’accès et la collaboration. Il fournit une interface graphique basée sur le Web. Il hébergera le code source de votre projet sous la forme de différents langages de programmation et gardera une trace des différentes modifications apportées par les programmeurs. Il offre à la fois le contrôle de version distribué et la fonctionnalité de gestion du code source (SCM) de Git.

Qu’est-ce que Jenkins ?

Jenkins est un outil DevOps utilisé pour l’automatisation, et c’est un serveur open source qui permet à tous les développeurs de créer, tester et déployer des logiciels. Cela fonctionne sur Java car il est écrit en Java.

Qu’est-ce que l’Intégration Continue ?

L’intégration continue oblige les développeurs à intégrer le code dans un référentiel à intervalles réguliers. Il y a un problème de recherche de problèmes dans le cycle de vie de la construction. L’intégration continue nécessite des builds fréquents par les développeurs. Lorsqu’un commit de code se produit, une génération doit être déclenchée.

Qu’est-ce que Docker ?

Docker est un outil qui vous permet de créer, tester et déployer rapidement des applications. Les packages Docker sous forme d’image s’exécuteront sur des unités appelées conteneurs qui ont tout ce dont le logiciel a besoin pour fonctionner, y compris les bibliothèques, les outils système, le code et le runtime. Avec l’aide de Docker, vous pouvez rapidement déployer et mettre à l’échelle des applications dans n’importe quel environnement et savoir que votre code s’exécutera.

Qu’est-ce que Docker Hub ?

Docker Hub est le référentiel d’images de conteneurs avec un éventail de sources de contenu, notamment des développeurs de communautés de conteneurs, des projets open source et des éditeurs de logiciels indépendants (ISV) qui créent et distribuent leur code dans des conteneurs. Tous les utilisateurs ont accès à des dépôts publics gratuits pour stocker et partager des images ou peuvent choisir un plan d’abonnement pour des dépôts privés.

Qu’est-ce que Google Kubernetes Engine ?

Un environnement géré pour le déploiement, la gestion et le scaling des applications conteneurisées est fourni par GKE. L’environnement GKE est constitué de machines regroupées pour former un cluster.

Stratégie de déploiement bleu-vert

Une stratégie de déploiement bleu-vert, également connue sous le nom de déploiement rouge-noir dans la livraison de logiciels, est une stratégie dans laquelle les anciennes et les nouvelles instances d’une application ou d’un microservice fonctionnent en parallèle en production en même temps avec un équilibreur de charge commutant le trafic de l’ancien version à la plus récente.

Photo10

Prérequis:

  • Lancer la VM dans la plate-forme Google Cloud
  • Installation de Jenkins
  • Installation de Gcloud et kubectl
  • Installation de Docker sur le serveur Jenkins
  • Configuration du cluster Kubernetes
  • Installation des plugins Jenkins
  • Configuration des identifiants Jenkins
  • Configuration du pipeline Jenkins
  • Travail sur le pipeline Jenkins
  • Configuration du webhook

Étape 1 : Lancez la VM sur la plate-forme Google Cloud :

Photo11

  • Autoriser le trafic Http et https lors de la création de la VM.
  • Créez et ajoutez une règle de pare-feu à la machine virtuelle pour activer la plage de ports pour Jenkins.

Etape 2 : Installation de Jenkins :

Pour tester l’état du serveur Jenkins >>> http://:8080

Fournissez l’autorisation d’utilisateur sudo à l’utilisateur Jenkin.

Étape 3 : Installation de Gcloud et de kubectl

Voici les commandes pour installer gcloud et kubectl sur le serveur Jenkins.

étape 4 : installation de Docker sur le serveur Jenkins

Étape 5 : Configuration du cluster Kubernetes

Accédez à la console cloud de Google, activez l’API du moteur Kubernetes et créez un cluster standard.

Photo12

Lorsque nous créons un cluster standard, une instance de pool de 3 nœuds par défaut sera créée.

Étape 6 : Installation des plugins Jenkins

Voici les plugins requis

  • Canalisation Docker
  • Plug-in Google Kubernetes Engine

Photo13

Étape 7 : configuration des identifiants Jenkins

Créer ou modifier le compte de service Google par défaut pour intégrer Jenkins au cluster GKE

Accédez à IAM et Admin dans GCP et choisissez le compte de service

Photo14

Utiliser le compte de service par défaut et générer la clé privée

Photo15

Accédez à gérer les informations d’identification dans Jenkins et téléchargez la clé téléchargée (format JSON) dans le chemin « informations d’identification> système> informations d’identification globales ».

Photo16

Fournissez les informations d’identification du compte Docker Hub à Jenkins sous le même chemin.

Photo17

Pour la référence du code source :

Pour la version V1 de l’application : https://github.com/suraj11198/k8s.git

Pour la version V2 de l’application : https://github.com/suraj11198/new-zero-downtime-freestyle.git

Procédure de déploiement :

Déploiement du code de la version V1 :

Créez une tâche de pipeline pour l’application de déploiement de la version v1 et configurez-y SCM, appliquez-la et enregistrez-la.

Photo18

Maintenant, Build job V1

Après avoir construit un travail,

L’image docker sera poussée sur le référentiel du hub docker.

Production:

Une fois que le pipeline exécute avec succès le code de la version v1 de l’application, il est déployé sur le service/l’application du cluster GKE déployé sur la section de service avec 2 pods, comme nous l’avons mentionné 2 répliques dans le fichier deployment.yaml du code source.

Photo19

Testez ce déploiement avec une adresse IP de point de terminaison externe.

Photo20

Déploiement du code de la version V2 :

Maintenant, pour déployer la deuxième version mise à niveau de l’application, créez une tâche de pipeline pour l’application de déploiement de la version v2 et configurez-y SCM, appliquez-la et enregistrez-la.

Photo21

Maintenant, construisez la tâche V2 :

Après avoir construit un travail,

L’image docker pour la version v2 du code insérée dans le référentiel dockerhub.

Production:

Une fois que le pipeline exécute avec succès le code de la version v2 de l’application, il est déployé sur le service/l’application du cluster GKE déployé sur la section de service avec 2 pods, comme nous l’avons mentionné 2 répliques dans le fichier deployment.yaml du code source.

Photo22

Testez le déploiement de cette version v2

Photo23

Revenir à la version précédente avec l’action Post-build :

Une fois que le travail 2 a échoué, il se déclenchera et créera le travail 1 automatiquement.

Script suivant ajouté dans le code source du fichier Jenkins version v2.

Photo24

Photo25

Une fois que le travail v2 a échoué, il reviendra automatiquement au travail V1 et déclenchera le pipeline, ainsi l’application pour la version V1 sera déployée sans aucun temps d’arrêt.

Photo26

Pour automatiser le déclencheur de compilation, ajoutez des webhooks sur GitHub pour la tâche :

Une fois que le développeur a validé les modifications sur le code source, il déclenchera automatiquement le pipeline et l’application sera déployée sur les conteneurs du cluster GKE.

Pour le référentiel de code V1 (k8s) :

Configurer le webhook sur le pipeline de travaux Jenkins v1

Photo27

Ajouter l’adresse IP du serveur Jenkins dans la charge utile

Photo28

Pour ajouter un secret, nous devons créer un jeton d’accès dans Jenkins.

Image29

Suivez la même approche pour le référentiel de code de la version V2 (new-zero-downtime-freestyle) :

Conclusion:

De cette façon, nous avons configuré le pipeline CICD à l’aide de Jenkins pour déployer une application sur le cluster GKE en utilisant la stratégie de déploiement bleu-vert sans temps d’arrêt. Ce type d’approche est crucial dans le déploiement d’applications car il nous permet d’atteindre zéro temps d’arrêt lors de la transition vers différentes versions de l’application.






Source link