Memoire Mirado
Memoire Mirado
Mention : Informatique
Membres du jury :
Suivi d’un stage de fin d’étude en Licence Professionnel au sein d’Ecole Nationale
d’Informatique (ENI) sur le thème « Mise en place de stratégie de déploiement sur les clouds
avec zero-downtime »
I
2020-2021 | Développeur | ENI |CISCO AMBOHIMAHASOA
Suivi d’un stage au sein de CISCO sur le thème « Gestion de paiements de vacation » codé en
PHP
COMPETENCES EN INFORMATIQUE :
CONNAISSANCES LINGUISTIQUES :
Grille d’évaluation : Très bien (TB), bien (B), assez-bien (AB), passable(P)
DIVERS :
-Sport : Basket-ball
II
DEDICACE
Je tiens à remercier toutes les personnes qui ont contribuées au succès de mon stage pour
l’obtention de diplôme licence et qui m’ont aidées de la rédaction de ce mémoire.
Toute ma gratitude à chacune de ces âmes : mes chers parents, toute ma famille pour leurs
encouragements, soutiens, dévouements et confiances.
Je voudrais exprimer ma reconnaissance envers les amis et collègues qui m’ont apporté leur
soutien moral et intellectuel tout au long de ma démarche.
III
REMERCIEMENTS
En premier lieu, nous tenons à rendre grâce à Dieu tout puissant, pour nous avoir donné la
force et le courage pour la réalisation de ce rapport de stage dans une parfaite santé.
Sans la contribution de différentes personnes auxquels nous n’aurions pu terminer ce stage Nous
tenons aussi à adresser nos sincères remerciements, en particulier à :
IV
SOMMAIRE
CURRICULUM VITAE .................................................................................................................. I
DEDICACE .................................................................................................................................... III
REMERCIEMENTS ..................................................................................................................... IV
SOMMAIRE ................................................................................................................................... V
LISTE DES ABREVIATIONS ....................................................................................................... X
LISTE DES TABLEAUX ............................................................................................................. IX
LISTE DES FIGURES .................................................................................................................... X
INTRODUCTION GENERALE...................................................................................................... 1
Partie I : PRESENTATIONS ....................................................................................................... 2
V
Chapitre 3. ANALYSE PREALABLE .................................................................................. 20
a) Définition .......................................................................................................... 27
a) Définition .......................................................................................................... 30
c) Plateforme ........................................................................................................ 30
VI
d) Comparaison Docker et Machine virtuel ........................................................ 30
a) Définition .......................................................................................................... 38
b) Architecture de Swarm..................................................................................... 38
a) Définition ......................................................................................................... 39
VII
4.8.2. Fonctionnement de l’IC .................................................................................. 45
VIII
CONCLUSION .............................................................................................................................. 78
REFERENCES BIBLIOGRAPHIQUES ..................................................................................... XII
REFERENCES WEBOGRAPHIQUES ...................................................................................... XIII
GLOSSAIRE ...............................................................................................................................XIV
TABLES DE MATIERES ..........................................................................................................XVI
RESUME .....................................................................................................................................XXI
ABSTRACT ................................................................................................................................XXI
IX
LISTE DES ABREVIATIONS
X
LISTE DES TABLEAUX
Tableau 1 : Organisation du système de Formation pédagogique de l'Ecole ................................... 7
Tableau 2 : Architecture des études correspondant au système LMD ............................................. 8
Tableau 3 : Listes des Formations existantes à l'ENI ....................................................................... 9
Tableau 4 : Débouchés professionnels éventuels des diplômes ..................................................... 14
Tableau 5 : Tableau de comparaison su SVN et Git ...................................................................... 25
Tableau 6 : Caractéristiques des technologies de virtualisation. .................................................... 31
Tableau 7 : Comparaison des outils d'intégration continue............................................................ 33
Tableau 8 : Tableau comparatif du swarm et kubernetes ............................................................... 43
IX
LISTE DES FIGURES
Figure 1 Organigramme de l'ENI ..................................................................................................... 6
Figure 4 : Concept du déploiement continue ................................................................................. 23
Figure 2 : Types d'hyperviseur ....................................................................................................... 29
Figure 3 :Comparaison du machine virtuel avec docker ................................................................ 31
Figure 4 : Les niveaux de services dans le cloud ........................................................................... 35
Figure 5: Architecture de Swarm ................................................................................................... 39
Figure 6 : Architecture kubernetes ................................................................................................. 41
Figure 7 : Les étapes d'intégration Continue .................................................................................. 46
Figure 8 : Fonctionnement du JMETER ........................................................................................ 48
Figure 10 : Création du projet GCP ............................................................................................... 50
Figure 11 : Création instance GCE ................................................................................................ 50
Figure 12 : Choix de type de configuration.................................................................................... 51
Figure 13 : Les différentes champs de configuration ..................................................................... 51
Figure 14 : Cluster Bien crée.......................................................................................................... 52
Figure 15 : Commande de connexion au cluster ............................................................................ 52
Figure 16 : CloudShell pour connecter au cluster GKE ................................................................. 52
Figure 17 : Accès à l'instance du jenkin ......................................................................................... 53
Figure 18 : Mise à jour de repository ............................................................................................. 54
Figure 19 : Installations du Jenkins ................................................................................................ 54
Figure 20 : Ajout de l'user jenkins dans le groupe sudoers ............................................................ 55
Figure 21 : Vérification du service Jenkins .................................................................................... 56
Figure 22 : Installation du docker .................................................................................................. 56
Figure 23 : Vérification d'installation GCLOUD ........................................................................... 57
Figure 24 : Installation snap ........................................................................................................... 57
Figure 25 : Installation du kubectl.................................................................................................. 58
Figure 26 : Creation Utilisateur ...................................................................................................... 58
Figure 27 : Jenkins prêt à être utiliser ............................................................................................ 59
Figure 28 : Page d'authentification du Jenkins ............................................................................... 59
Figure 29 : : Installation Maven Invoker ........................................................................................ 60
Figure 30 : : Installation Maven Integration................................................................................... 60
Figure 31 : : Installation du plugins Google kubernetes Engine .................................................... 61
X
Figure 32 : Plugins installé avec succès ......................................................................................... 61
Figure 33 : Installation du plugins Docker pipeline ....................................................................... 62
Figure 34 : Configuration du Maven .............................................................................................. 62
Figure 35 : Création credential pour connecter au DockerHub ..................................................... 63
Figure 36 : Le compte de service du projet .................................................................................... 64
Figure 37 : Création de la clé ......................................................................................................... 64
Figure 38 : choix du type du clé à créer ........................................................................................ 65
Figure 39 : Création credential pour Goole Service Account ........................................................ 65
Figure 40 : Création du pipeline ..................................................................................................... 66
Figure 41 : Nom du pipeline ......................................................................................................... 66
Figure 42 : Configuration de repository utilisé .............................................................................. 67
Figure 43 : Configuration de branche utilisé .................................................................................. 67
Figure 44 : Script du pipeline ......................................................................................................... 68
Figure 45 : Script du pipeline (suite) .............................................................................................. 69
Figure 46 : Code du dockerfile ....................................................................................................... 69
Figure 47 : Script de déploiement du service Loadbalancer .......................................................... 70
Figure 48: Script de déploiement de l'application ......................................................................... 71
Figure 49 : Build du pipeline......................................................................................................... 71
Figure 50 : résultat du commande kubectl get all .......................................................................... 72
Figure 51 : Les images du repository Dockerhub .......................................................................... 72
Figure 52 : Détails de l'image dans dockerhub ............................................................................. 73
Figure 53 : Service Nginx en marche ............................................................................................. 73
Figure 54 :: Services Tomcat marche ............................................................................................. 74
Figure 55 : accès de l'application par l'IP [Link] ............................................................... 74
Figure 56 : accès de l'application par l'IP [Link] .............................................................. 75
Figure 57 : accès de l'application par le node 1.............................................................................. 75
Figure 58 : accès de l'application par le node 2.............................................................................. 76
Figure 59 : Configuration WeebHook sur le github ...................................................................... 77
Figure 60 : Activation GitHub hook trigger dans Jenkins ............................................................. 77
XI
INTRODUCTION GENERALE
Actuellement, la plupart de différents secteurs d’activités sont absolument
informatisé[Link] à l’Ecole Nationale d’Informatique et troisième année de Licence
professionnelle, un stage pratique au sein d’une entreprise est obligatoire. En abrégé, pour cette
année 2021-2022. Ce stage s’est déroulé au sein de l’Ecole Nationale d’Informatique (ENI)
Antanambao Fianarantsoa à partir du 19 septembre2022 jusqu’au décembre 2022.
Nous savons tous que de notre temps tout le monde s’incline dans le domaine de
l’informatique et que plusieurs d’entreprises utilisent le cloud computing pour faciliter leur travail.
Dans ce cadre, il y a diverses sortes de thème et durant le stage on a eu comme thème « MISE EN
PLACE DE STRATEGIE MODERNE DE DEPLOIMENT CONTINUE POUR LES CLOUDS
AVEC ZERO-DOWNTIME » Lorsqu’on dit de cloud, on parle toujours de sécurisation et de
stockage mais dans ce domaine il n’y a pas que sécurisation et de stockage. Mais dans ce mémoire,
on appelle de déploiement d’un ou plusieurs applications pour avoir la disponibilité de cette
application n’importe où. Le présent mémoire a pour but de montrer comment gérer les applications
en utilisant le déploiement sous cloud ainsi que de gérer les ressources utilisées par cette application
mais aussi sur l’automatisation en utilisant l’outil Jenkins.
Ce mémoire est divisé en trois parties, la première partie s’agit de la présentation générale
où l’on trouvera la présentation de l’Ecole Nationale d’Informatique (ENI) et le contexte du projet,
la deuxième partie s’agit des études théoriques, et pour la troisième et dernière partie nous allons
passer à la mise en œuvre.
1
Partie I : PRESENTATIONS
2
Chapitre 1. PRESENTATIONS DE L’ECOLE NATIONALE
D’INFORMATIQUE
1.1. Information d’ordre générale
L’Ecole Nationale d’Informatique, en abrégé ENI, est un établissement d’enseignement
supérieur rattaché académiquement et administrativement à l’Université de Fianarantsoa. Le siège
de l’Ecole se trouve à Tanambao- Antaninarenina à Fianarantsoa.
L’adresse pour la prise de contact avec l’Ecole est la suivante :
Ecole Nationale d’Informatique (ENI) Tanambao, Fianarantsoa.
Le numéro de sa boîte postale est 1487 avec le code postal 301. Téléphone :034 05 733 36. Son
adresse électronique est la suivante : eni@[Link]. Site Web : www. eni-univ-
[Link].
1.2. Missions et Historiques
L’ENI se positionne sur l’échiquier socio-éducatif malgache comme étant le plus puissant
secteur de diffusion et de vulgarisation des connaissances et des technologies informatiques.
Cette Ecole Supérieure peut être considérée aujourd’hui comme la vitrine et la pépinière des
élites informaticiennes du pays.
De façon formelle, l’ENI était constituée et créée au sein du (CUR) par le décret N° 83185
du 24 Mai 1983, comme étant le seul établissement Universitaire Professionnalisé au niveau
national, destiné à former des techniciens et des Ingénieurs de haut niveau, aptes à répondre aux
besoins et exigences d’Informatisation des entreprises, des sociétés et des organes implantés à
Madagascar.
L’ENI a pour conséquent pour mission de former des spécialistes informaticiens compétents
et opérationnels de différents niveaux notamment :
3
En initiant les étudiants aux activités de recherche dans les différents domaines des
Technologies de l’information et de la communication (TIC).
La mise en place à l’Ecole de ces deux options de formation devait répondre au besoin de
basculement vers le système Licence – Master – Doctorat (LMD).
En vue de surmonter les difficultés de limitation de l’effectif des étudiants accueillis à l’Ecole,
notamment à cause du manque d’infrastructures, un système de « Formation Hybride » a été mise
4
en place à partir de l’année 2010. Il s’agit en effet d’un système de formation semi-présentielle et
à distance avec l’utilisation de la visioconférence pour la formation à distance.
Le système de formation hybride a été ainsi créé à Fianarantsoa ainsi qu’Université de Toliara.
ENI est administrée par un conseil d’Ecole, et dirigée par un directeur nommé par un décret
adopté en conseil des Ministres.
Le Collège des enseignants regroupant tous les enseignants-chercheurs de l’Ecole est chargé
de résoudre les problèmes liés à l’organisation pédagogique des enseignements ainsi que à
l’élaboration des emplois du temps.
5
Figure 1 Organigramme de l'ENI
6
1.4. Domaines et spécialisation
Les activités de formation et de recherche organisées à l’ENI portent sur les domaines suivants:
D’une manière plus générale, les programmes des formations sont basés sur l’informatique de
gestion et sur l’informatique des Systèmes et Réseaux. Et les modules de formation intègrent aussi
bien des éléments d’Informatique fondamentale que des éléments d’Informatique appliquée.
Les offres de formation organisées à l’Ecole ont été validées par la Commission Nationale
d’Habilitation (CNH) auprès du Ministères de l’Enseignement Supérieur et de la Recherche
Scientifique selon les dispositions de l’Arrêté N°31.174/2012-MENS en date du 05 Décembre
2012.
Au sein de l’ENI, il existe une seule mention (INFORMATIQUE) et trois parcours : Génie
logiciel et Base de Données :
7
L’architecture des études à trois niveaux conforment au système Licence-Master-Doctorat
(LMD) permet les comparaisons et les équivalences académiques des diplômes au niveau
international.
Le diplôme de licence est obtenu en 3 années des études après Baccalauréat. Et le diplôme de
Master est obtenu en 2 ans après obtenu du diplôme de LICENCE.
Le Doctorat est un diplôme qu’on peut obtenir en 3 ans après l’obtention du diplôme de
MASTER RECHERCHE.
FORMATION
LICENCE MASTER
PROFESSIONNEL LE ET
HYBRIDE
Condition d’admission Par voie de concours
Formation Professionnelle :
100 candidats
Formation hybride : 150
candidats
Condition d’Accès Bac de série C, D ou Être titulaire de licence
Technique professionnelle
Durée de Formation 3 ans 2 ans
Diplôme délivré Diplôme de Licence Diplôme de Master
Professionnelle en Professionnel
Informatique Diplôme de Master
Recherche
Les Ecoles Doctorales jouissent d’une autonomie de gestion par rapport aux Etablissements
de formation universitaire.
9
Depuis l’année universitaire 2010-2011, l’ENI s’est mise à organiser des formations hybrides
en informatique dans les différentes régions (Fianarantsoa, Toliara) en raison de l’insuffisance de
la capacité d’accueil des infrastructures logistiques. En effet, le système de formation hybride semi
- présentielle utilise la visioconférence pour la formation à distance.
Bien qu’il n’existe pas encore au niveau international de reconnaissance écrite et formelle des
diplômes délivrés par l’ENI, les étudiants diplômés de l’Ecole sont plutôt bien accueillis dans les
instituts universitaires étrangères (Canada, Suisse, France…).
L’Ecole dispose ainsi d’un réseau d’entreprises, de sociétés et d’organismes publics et privés
qui sont des partenaires par l’accueil en stage de ses étudiants, et éventuellement pour le
recrutement après l’obtention des diplômes par ces derniers.
Les compétences que l’Ecole cherche à développer chez ses étudiants sont l’adaptabilité, le
sens de la responsabilité, du travail en équipe, le goût de l’expérimentation et l’innovation.
En effet, la vocation de l’ENI est de former des techniciens supérieurs de niveau LICENCE et
des ingénieurs de type généraliste de niveau MASTER avec des qualités scientifiques, techniques
et humaines reconnues, capables d’évoluer professionnellement dans des secteurs d’activité variés
intégrant l’informatique.
Les stages en milieu professionnel permettent de favoriser une meilleure adéquation entre les
formations à l’Ecole et les besoins évolutifs du marché de l’emploi. Les principaux débouchés
professionnels des diplômés de l’Ecole concernent les domaines suivants :
10
➢ L’ingénierie informatique appliquée
➢ L’écologie et le développement durable
De 2000 à 2004, l’ENI avait fait partie des membres du bureau de la Conférence Internationale
des Ecoles de formation d’Ingénieurs et Technicien d’Expression Française (CITEF).
11
L’ENI avait également signé un accord de coopération interuniversitaire avec l’Institut de
Recherche en Mathématiques et Informatique Appliquées (IREMIA) de l’Université de la Réunion,
l’Université de Rennes 1, l’INSA de Rennes, l’Institut National Polytechnique de Grenoble
(INPG).
A partir du mois de Juillet 2001, l’ENI avait abrité le Centre de Réseau Opérationnel (Network
Operating Center) du point d’accès à Internet de l’Ecole ainsi que de l’Université de Fianarantsoa.
Grâce à ce projet américain qui a été financé par l’USAID Madagascar, l’ENI de l’Université de
Fianarantsoa avait été dotées d’une ligne spécialisée d’accès permanent au réseau Internet.
L’ENI avait de même noué des relations de coopération avec l’Institut de Recherche pour le
Développement (IRD).
Et dans le cadre du programme scientifique PARRUR, l’IRD avait financé depuis 2010 le
projet intitulé « Forêts, Parcs et Pauvreté dans le Sud de Madagascar (FPPSM). Des étudiants en
DEA et des Doctorants issus de l’ENI avaient participé à ce Programme.
Par ailleurs, depuis toujours la même année 2010, l’ENI de Fianarantsoa avait été sélectionnée
pour faire partie des organismes partenaires de l’Université de Savoie dans le cadre du projet
TICEVAL relatif à la certification des compétences en TIC ;
Le projet TICEVAL avait été financé par le Fonds Francophone des Inforoutes pour la période
allant de 2010 à 2012, et il avait eu pour objectif de généraliser la certification des compétences en
Informatique et Internet du type C2i2e et C2imi.
Dans le cadre du projet TICEVAL, une convention de coopération avec l’Université de Savoie
avait été signée par les deux parties concernées. La mise en œuvre de la Convention de 13
Coopération avait permis d’envoyer des étudiants de l’ENI à Chambéry pour poursuivre des études
supérieures en Informatique.
Enfin et non des moindres, l’ENI avait signé en Septembre 2009 un protocole de collaboration
scientifique avec l’ESIROI – STIM de l’Université de la Réunion.
12
Comme l’ENI constitue une pépinière incubatrice de technologie de pointe, d’emplois et
d’entreprises, elle peut très bien servir d’instrument efficace pour renforcer la croissance
économique du pays, et pour lutter contre la Pauvreté.
Cependant, les formations proposées par l’Ecole permettent aux diplômés d’être
immédiatement opérationnels sur le marché du travail avec la connaissance d’un métier complet
lié à l’informatique aux TIC.
L’Ecole apporte à ses étudiants un savoir-faire et un savoir-être qui les accompagnent tout au
long de leur vie professionnelle. Elle a une vocation professionnalisante.
Les diplômés en LICENCE et en MASTER issus de l’ENI peuvent faire carrière dans
différents secteurs.
Par conséquent, en raison de fait que l’équipe pédagogique de l’Ecole est expérimentée, les
enseignants-chercheurs et les autres formateurs de l’Ecole sont dotés d’une grande expérience dans
l’enseignement et dans le milieu professionnel.
L’Ecole est fière de collaborer de façon régulière avec un nombre croissant d’entreprises, de
sociétés et d’organismes publics et privés à travers les stages des étudiants. Les formations
dispensées à l’Ecole sont ainsi orientées vers le besoin et les attentes des entreprises et des sociétés.
13
L’Ecole s’efforce de proposer à ses étudiants une double compétence à la fois technologique
et managériale combinant l’informatique de gestion ainsi que l’administration des réseaux et
systèmes.
D’une manière générale, les diplômés de l’ENI n’éprouvent pas de difficultés particulières à
être recrutés au terme de leurs études. Cependant, l’ENI recommande à ses diplômés de promouvoir
l’entrepreneuriat en TIC et de créer des cybercafés, des SSII ou des bureaux d’études.
LICENCE - Analyste
- Programmeur
- Administrateur de Site Web/ de portail Web
- Assistant Informatique et Internet
- Chef de projet Web ou MultiMedia
- Développeur Informatique ou MultiMedia
- Intégrateur Web ou Web Designer
- Hot Liner/ Hébergeur Internet
- Agent de référencement
- Technicien/Supérieur de help desk sur Informatique
- Responsable de sécurité web
- Administrateur de réseau
- Administrateur de cybercafé
MASTER - Administrateur de cyber café
- Administrateur de réseau et système
- Architecture de système d’information
- Développeur d’application /web /java/Python/ IOS /Android
- Ingénieur réseau
- Webmaster /web designer
- Concepteur Réalisateur d’applications
- Directeur du système de formation
- Directeur de projet informatique
- Chef de projet informatique
- Responsable de sécurité informatique
- Consultant fonctionnel ou freelance
14
1.9. Ressources humaines
Directeur de l’Ecole : Monsieur MAHATODY Thomas
Responsable de Mention : Monsieur RABETAFIKA Louis Haja
Responsable de Parcours « Génie Logiciel et Base de Données » : Monsieur RALAIVAO Jean
Christian
Responsable de Parcours « Administration Systèmes et Réseaux » : Monsieur SIAKA
Responsable de Parcours « Informatique Générale » : Monsieur GILANTE Gesazafy
Nombre d’Enseignants permanents : 13 dont deux (02) Professeurs Titulaires, un (01) Professeur
Cinq (05) Maîtres de Conférences et cinq (05) Assistants d’Enseignement Supérieur et de
Recherche
Nombre d’Enseignants vacataires : 10
Personnel Administratif : 23
15
Chapitre 2. DESCRIPTION DU PROJET
Dans ce chapitre, nous allons voir une brève description de notre projet. Cela portera sur la
formulation du projet, ainsi que le recensement des objectifs et des besoins de l’utilisateur et puis
nous enquêterons sur les moyens utiles pour mettre en œuvre les rouages du projet et enfin nous
exposerons les résultats attendus par le client en aval du projet.
2.1. Formulation
Actuellement, l’avancée dans le domaine de l’informatique a fait que le développement de
la technologie ne se bornée pas tandis dans le cloud. Cependant plusieurs des utilisateurs ne
connaissent pas ses principales utilisations.
Ainsi, dans le présent projet, nous devons élucider ces problèmes en créant une stratégie de
déploiement sur le cloud pouvant aider ces entreprises dans la quête de solution fiable, durable.
16
2.3.2. Moyens logiciels
UTILITE DANS LE
DESIGNATION VERSION
PROJET
Tâches Date
Début du stage 19 septembre 2022
− Integration a l’équipe et prise en main 19 septembre 2022 – 18 octobre 2022
de Google Cloud Plateform
− Maitriser et analyser des existants
− Choix définitif du thème
17
− Documentation et recherche
concernant le thème
− Choix et installation du système
d’exploitation pour le faire
− Relevé des problèmes et étude des 19 Octobre 2022 - 26 Octobre 2022
solutions apporter
Mise en œuvre du projet : 27 Octobre 2022 –03 Décembre 2022
✓ Configuration et installation
des serveurs
✓ Installation des outils
✓ Création d’application CRUD
✓ Configuration des outils
18
Partie II : ETUDES THEORIQUES
19
Chapitre 3. ANALYSE PREALABLE
L’analyse est une découverte suivi d’une étude. Elle permet ansi d’identifier s’il y a des
problemes, de critique, et d’apporter des solutions ensuite.
Cette partie, dans laquelle seront découverts et analysés les existants, constitue une étape
primordial pour bien mener ce projet. Avant de procéder à cette analyse, il parait indispensable de
décrire d’abord et de se familiariser dans le monde et la notion Devops.
[Link]
Le terme « DevOps » est la contraction des mots anglais « Development» (développement)
et « Operations » (exploitation). Il reflète toutefois un ensemble d’idées et de pratiques bien plus
large que ces deux seuls mots pris ensemble ou séparément. Ce concept englobe la sécurité, le
travail collaboratif, l’analyse des données et bien d’autres principes. Mais de quoi s’agit-il
exactement ?
Le DevOps décrit des approches d’accélération des processus selon lesquels une idée (par
exemple, une nouvelle fonction logicielle, une demande d’amélioration ou la correction d’un
bogue) passe de la phase de développement à celle du déploiement dans un environnement de
production où elle peut apporter de la valeur à l’utilisateur. Ces approches nécessitent que les
équipes de développement et d’exploitation communiquent fréquemment entre elles et abordent
leur travail en gardant à l’esprit celui de leurs collaborateurs. Le provisionnement doit également
etre évolutif et flexible. Avec le modèle DevOps, ceux qui ont le plus de besoins sont satisfaits,
grace au libre-service et à l’automatisation. Les développeurs, qui travaillent généralement dans un
environnement de développement standard, collaborent étroitement avec les équipes d’exploitation
informatique pour accélérer la conception des logiciels, les tests et les lancements sans pour autant
sacrifier la fiabilité.
3.1.1. Les avantages de l’approche DevOps
DevOps offre de nombreux avantages, autant sur le plan humain que professionnel. Ainsi, si vous
souhaitez mettre en place cette approche pour votre entreprise, vous tirerez parti divers avantages.
Le développement et les opérations sont 2 activités qui sont le plus souvent traitées de façon séparée
dans les processus de développement classiques. Cela pose un problème entre l’équipe de
développement logicielle et l’équipe opérationnelle chargée de l’explication. Les deux parties étant
20
occupées à œuvrer pour la réussite de leurs missions respectives n’ont aucune idée des obstacles
que chacun rencontre dans son domaine.
Pour remédier à ce problème, DevOps permet une collaboration directe entre les développeurs de
logiciels et les équipes chargées des opérations IT. Cette approche repose sur en place de processus
automatisés, la mise à disposition d’outils et la mise en œuvre de bonnes pratiques. Ainsi, les
équipes peuvent communiquer en permanence afin qu’elles puissent mieux comprendre les défis
de chacun et travailler ensemble à la réussite des projets.
Avec la mise en place du DevOps, les entreprises peuvent déployer très rapidement de nouveaux
systèmes, processus et applications. Les opérations commerciales seront plus efficaces et vous
conservez un avantage concurrentiel sur le marché. Le temps de cycle réduit qui est dépensé
entraine la réduction du cout de fabrication du produit. Cela représente pour vous un gain d’argent
et de temps considérable.
La relation client occupe une place importante dans le succès et la pérennité de toute entreprise.
C’est pourquoi elles accordent la priorité à cette dimension. DevOps intègre la satisfaction de la
clientèle et l’amélioration de l’expérience client. Ainsi, vous pourrez augmenter vos opportunités
de vente. Aujourd’hui, les entreprises qui ont adopté une approche DevOps enregistrent un taux de
satisfaction de la clientèle supérieur de 52%.
Les entreprises sont parfois confrontées à des problèmes de gestion et cela peut entrainer un retard
dans la production ou la livraison des services. De même, il peut arriver que le service proposé ne
répondre pas aux exigences du client. De tels incidents peuvent nuire à la notoriété de votre
entreprise et se traduire par un préjudice pour vos clients.
L’adopter de DevOps vous permet de simplifier les processus et d’automatiser la grande majorité
de vos opérations. Grace à cette approche, le rythme de production et de livraison est beaucoup
plus rapide et la qualité des services offerts est supérieure.
21
e) Une capacité d’innovation
Adopter l’approche DevOps permet aux entreprises d’avoir du temps à consacrer à l’innovation.
La création et la livraison des produits étant rapides, les équipes peuvent consacrer le temps gagné
au développement de nouvelles idées, à l’expérimentation de nouvelles fonctionnalités ou à
l’amélioration de celles déjà existantes. Plus vous disposez de temps pour innover et plus votre
entreprise se développera.
Un problème qui n’est pas vite résolu lors de la production entraine inévitablement un retard dans
la livraison et une perte d’argent. La mise en place d’un processus DevOps vous permet de détecter
rapidement les problèmes et de les résoudre sans plus tarder. Vous avez ainsi moins de perte de
temps et d’argent.
[Link] de l’existant
ENI utilise déjà le système d’intégration et déploiement continue mais parfois l’application
arrête quand il y a des nouveaux mis à jour sur l’application, c’est-à-dire quand les développeurs
ont déployé un nouveau code vers le serveur.
[Link] de solution
3.3.1. Déploiement Continue
Il existe de nombreux nombre stratégie moderne de déploiement d’une application ou
logiciel, le déploiement continue et l’un de ces stratégies.
Le déploiement continu présente un avantage : l'absence d'attente entre la réussite des tests
d'un changement de code aux niveaux de l'application et de la plateforme et sa mise en production.
[1]
22
Figure 2 : Concept du déploiement continue
Il existe de nombreux moyens pour les équipes informatiques de faciliter les déploiements
d’applications, et le ZDD n’est que l’un d’entre eux.
L’une des principales caractéristiques du ZDD est qu’il est réalisé de manière à ce que
l’utilisateur n’ait pas conscience d’un quelconque temps d’arrêt pendant que vous déployez la
nouvelle version de l’application sur votre réseau. Cela signifie que le serveur Web ne publie pas
le code modifié ou les changements tant que le déploiement n’est pas terminé.
Et comme il s’agit d’une tâche que les entreprises doivent accomplir souvent (plus encore
que la plupart des utilisateurs), l’exécution continue d’un ZDD réussi est une partie essentielle du
maintien de la réputation de l’entreprise auprès des clients. En effet, les clients attendent des
entreprises qu’elles soient opérationnelles 24 heures sur 24, 7 jours sur 7 et 365 jours par an.
Dans le même temps, ils s’attendent à ce que les applications fonctionnent efficacement et sans
bugs. C’est pourquoi le ZDD est si important [2].
23
• Il déconnecte le serveur avec la version N de l'application et redirige les requêtes vers le
nouveau serveur.
24
Chapitre 4. ETUDES THÉORIQUES DE LA SOLUTION À
METTRE EN PLACE
4.1. Gestionnaire de version : Git
4.1.1. Définition
Git est de loin le système de contrôle de version le plus largement utilisé aujourd'hui. Git
est un projet open source avancé, qui est activement maintenu. À l'origine, il a été développé en
2005 par Linus Torvalds, le créateur bien connu du noyau du système d'exploitation Linux. De plus
en plus de projets logiciels reposent sur Git pour le contrôle de version, y compris des projets
commerciaux et en open source. Les développeurs qui travaillent avec Git sont bien représentés
dans le pool de talents disponible, et la solution fonctionne bien sur une vaste gamme de systèmes
d'exploitation et d'environnements de développement intégrés (IDE).
25
décider
de fusionner quoi à partir de quel utilisateur.
Stockage des métadonnées des Stockage de tout le contenu dans un dossier
Stockage
fichiers sous forme de dossier caché .git, c’est le dépôt du code cloné sur la
contenu
.svn machine client
Les branches sont gérées comme étant
un La gestion des branches est assez simple,
autre dossier dans le dépôt du code, nous pouvons facilement naviguer entre les
elles ne différentes branches d’un même répertoire de
sont pas historiées. Pour connaître s’il y travail. Chaque répertoire de travail existant
a eu chez un utilisateur est considéré comme une
fusion entre des branches, il faut branche. La fusion de la branche inclut les
Les branches explicitement exécuter une commande. informations suivantes : auteur, heure, date,
Cette façon de gérer les branches informations relatives à la branche et à la
démultiplie les chances de créer des révision, les changements effectués par
branches « orpheline ». Une fois la rapport
fusion est à la version antécédente. La fusion suivante,
faite nous ne pouvons plus savoir ce qui commence automatiquement là où la dernière
a fusion a été faite.
été modifié.
Le répertoire de travail contient deux
copie Taille du dépôt de code et répertoire de travail
de chaque fichier, un pour travailler relativement petit (30X inférieur à celui de
Espace avec et SVN). Ceci est due au fait que pour Git, le
un caché dans le .svn, ce qui rend répertoire de travail nécessite seulement un
l’espace fichier d’index de taille 100 bits pour
nécessaire relativement grand.
26
[Link] de solution de virtualisation
4.2.1. La virtualisation
a) Définition
La virtualisation consiste à créer une version virtuelle d'un dispositif ou d'une ressource,
comme un système d 'exploitation, un serveur, un dispositif de stockage ou une ressource ré- seau.
Elle peut donc être considérée comme l'abstraction physique des ressources informatiques. En
d'autres termes, les ressources physiques allouées à une machine virtuelle sont abstraites à partir
de leurs équivalentes physiques. Chaque dispositif virtuel, qu'il s'agisse d'un disque, d'une interface
réseau, d'un réseau local, d'un commutateur, d'un processeur ou d'une mémoire, correspond à une
ressource physique sur un système informatique. Les machines virtuelles hébergées par la machine
hôte sont donc perçues par ce dernier comme des applications auxquelles il est nécessaire de dédier
ou distribuer ses ressources. Cependant, il existe plusieurs types de virtualisation (Hess et Newman,
2010). Chaque type correspond à un cas d'utilisation spécifique, comme cela sera présenté dans la
section suivante.
b) Types de virtualisation
27
b.1) La virtualisation système
Cette technique de virtualisation du serveur fait référence à l'utilisation d'un hyperviseur
pour permettre à la machine hôte d'exécuter plusieurs instances virtuelles en même temps. Ces
dernières sont communément appelées des VMs (Virtual Machines), tandis que l'hyperviseur est
connu sous le nom de VMM (Virtual Machines Monitor), c'est-à-dire gestionnaire de VM. Ces
nouvelles notions sont définies comme suit :
- Machine virtuelle ( VM) : il s'agit d'une version virtuelle d'un matériel dédié
avec son propre système d'exploitation (Operating System- OS'). Comme dans une machine réelle,
chaque VM conserve un fonctionnement normal, défini comme suit : une VM gère les accès
mémoire (RAM) , disque, réseau, processeurs (CPU) et autres périphériques de ses processus.
- Hyperviseur ( VMM) : il implante les mécanismes d 'isolation et de partage
des ressources matérielles. Il est capable de démarrer simultanément plusieurs machines virtuelles
de différents types (Linux, Mac ou Windows) sur le même matériel. Quoique les VM gèrent les
accès aux ressources, aucun accès aux ressources n'est possible sans l'aval du VMM. Ce dernier
décide notamment des attributions de temps processeurs aux machines virtuelles.
Quant à la communication avec l'extérieur, l'hyperviseur peut fournir plusieurs techniques pour
rendre accessible ou non les VM. Il peut réaliser cette tâche par l'assignation d'adresses IP (Internet
Protocol) et par implantation de mécanismes d'accès réseau aux VM (par routage, filtrage de
communication, etc.). On peut distinguer deux types d'hyperviseur (Soriga et Barbulescu) :
• Hyperviseur de type 1 (natif) : Il s'installe directement sur la couche physique du matériel
du serveur. Ainsi, au démarrage de ce dernier, ce VMM prend le contrôle exclusif du matériel.
Hyper-V, Xen, VMware, ESXi, KVM sont des hyperviseurs de type 1 (Fayyad-Kazan et al.,
2013).
• Hyperviseur de type 2 (hébergé) : Comparable à un émulateur, il s'installe sur l' OS installé
sur le matériel du serveur. Il démarre comme un logiciel installé sur le système d'exploitation.
Comme exemples, on peut citer Oracle VM (Virtual Box), Workstation, Parallèles et Fusion.
28
Figure 3 : Types d'hyperviseur
29
4.2.2. La Technologie Docker
a) Définition
Docker est une solution de virtualisation légère pour Linux créée en 2013 et possédant une forte
dynamique de développement et de déploiement. Docker est une plateforme permettant de
construire, déployer, et lancer des applications cloisonnées. Contrairement à d'autres systèmes de
virtualisation légère comme OpenVZ ou LXC qui ont des approches purement "virtualisation" d'un
système Docker se place dans un cadre applicatif.
L'objectif est de permettre aux développeurs et administrateurs de créer facilement des
"Dockerfiles" décrivant un système : packages, fichiers de configuration, ports utilisés, etc. Cette
description permet ensuite à n'importe qui possédant Docker de construire le conteneur applicatif,
assurant ainsi un environnement compatible. La virtualisation légère de Docker se base sur les
fonctionnalités fournies par le kernel Linux comme les cgroups et les kernel namespaces,
permettant de garder des performances attendues d'un système de virtualisation légère.
b) Poids léger
Les conteneurs en cours d'exécution sur une seule machine partagent tous le même noyau
du système d'exploitation afin qu'ils commencent instantanément et de faire une utilisation plus
efficace de la RAM. Les images sont construites à partir de systèmes de fichiers en couches afin
qu'ils puissent partager des fichiers communs, ce qui rend l'utilisation du disque et de l'image de
téléchargements beaucoup plus efficace.
c) Plateforme
La plateforme Docker est composée de deux éléments :
• Le démon Docker qui s’exécute en arrière-plan et qui s’occupe de gérer les conteneurs
• Le client Docker qui permet d’interagir avec le démon par l’intermédiaire d’un outil en
ligne de commande.
d) Comparaison Docker et Machine virtuel
Les conteneurs ont des avantages d'isolement des ressources et de répartition similaire
à des machines virtuelles, mais une approche architecturale différente leur permet d'être
beaucoup plus portables et efficaces.
Contrairement aux machines virtuelles traditionnelles, un conteneur Docker n'inclut pas
de système d'exploitation, s'appuyant sur les fonctionnalités du système d’exploitation fournies
par l'infrastructure sous-jacente.
30
• Machine virtuelle : Chaque machine virtuelle comprend l'application, les binaires et les
bibliothèques nécessaires et tout un système d'exploitation invité - qui peuvent être des
dizaines de GBs taille.
Conteneur : Les conteneurs comprennent l'application et toutes ses dépendances, mais partagent le
noyau avec d'autres conteneurs. Ils fonctionnent comme un processus isolé dans l'espace utilisateur
sur le système d'exploitation hôte. La figure 4 explique la différence entre la virtualisation
traditionnelle par VMware et la nouvelle solution par Docker.
31
standard tels que les sockets, les
pipes, la mémoire partagée, etc
Utilisation des Forte utilisation Utilisation presque native
ressources ( CPU et RA M)
de la machine hôte
Temps de démarrage La VM prend quelque Ne prends que quelque seconde
minutes pour démarrer
Pour démarrer
Nécessite beaucoup plus de Utilise moins d'espace de stockage
stockage car son OS tout car le système d 'exploitation de
Stockage entier et ses programmes base est partagé
associés doivent être installés
et exécutés
Vu ses points forts, sa légèreté, son portabilité et l’isolation qu’il offert, nous avons décidés de
choisir docker comme solution de virtualisation pour mettre en place notre plateforme de
déploiement continue.
4.3.1. YAML
Pour le développement des scripts, nous avons utilisés le langage de sérialisation YAML
qui fournit de puissants paramètres de configuration, sans avoir à apprendre un type de code
plus complexe comme CSS, JavaScript et PHP.
YAML est l’acronyme de «Yet Another Markup Language», il se définit comme étant «un
standard de sérialisation de données pour tous les langages, facile à utiliser pour les humains ».
32
• Standard : car il n’y a pas d’approximation à avoir sur le contenu écrit en YAML.
• Sérialisation de données : consiste en la transformation d’une structure de données en un fichier
texte.
• Human-friendly : une structure de données écrite en YAML est très simple à lire, facile à
comprendre, et facile à éditer.
4.3.2. Groovy
Groovy est le nom d'un langage de programmation orienté objet destiné à la plate-forme Java.
Il constitue une alternative au langage Java pour cette plate-forme et est inspiré de Python, Ruby
et Smalltalk. Groovy utilise une syntaxe très proche de Java, avec des accolades, et est directement
compilé, soit à la volée dynamiquement, soit classiquement avec un compilateur en bytecode.
Groovy s'intègre et est entièrement compatible avec la JVM étant donné que le bytecode est le
même. Il peut donc :
• utiliser les bibliothèques Java ;
• être utilisé dans des classes Java.
Groovy peut être comparé à BeanShell, l'objectif de faire un langage de scripting proche de
java est le même, la mise en œuvre étant différente.
33
L’étude comparative entre ces différents serveurs d’orchestration a dirigé notre choix vers
Jenkins, qui, grâce à ses nombreux plugins, permet un interfaçage facile avec de nombreux outils
dont nous avons besoin tel que kubernetes.
34
4.5.2. Les niveaux de service
Le terme cloud computing est apparu au début des années 2000 mais, historiquement, le
concept de l'informatique en tant que service existe depuis bien plus longtemps. Il remonte aux
années 1960, quand des sociétés de services informatiques permettaient aux entreprises de louer
du temps sur une plateforme matérielle, au lieu de devoir en acheter une elles-mêmes. Les années
1990 voient l'explosion de l’Internet ; l'accès aux services peut s'effectuer via le réseau. Le cloud
computing distribue à présent ces services sous la dénomination Software as a Service (SaaS). Le
concept n'utilise plus de clients lourds comme des logiciels dédiés, mais un simple navigateur
Internet
Le cloud peut offrir trois niveaux de service : le IaaS, le PaaS et le SaaS. Dans le niveau
IaaS (Infrastructure as a Service), le matériel est l'unique élément à être décentralisé. Les clients
s'abstraient donc de toute contraintes de gestion du matériel physique.
Le niveau le plus commun est le SaaS (Software as a Service). Il qui apporte aux clients une
application (logiciel) à la demande et sous la forme d'un service prêt à l'emploi. Les utilisateurs du
service ne se préoccupent plus de l'architecture matérielle (installation, maintenance) et logicielle
(mises à jour) sous-jacente. La figure5 montre l'interaction entre te fournisseur du cloud et le client
en fonction des niveaux de service. Ces derniers doivent être déployés sur des infrastructures qui
possèdent les caractéristiques essentielles présentées dans la section 4.4.1 pour être considérées
comme étant des plateformes de cloud computing.
35
4.5.3. Les modèles de déploiement
Les trois niveaux de service cités dans la section précédente peuvent être déployés
chez le client via :
1. Un cloud public géré par un prestataire de services privé, par exemple Google, Amazon, etc. ;
2. Un cloud privé prévu pour les besoins de l'entreprise. Il y a les clouds privés internes, où
l'entreprise bâtit son propre centre de données pour ses propres besoins, et les clouds privés
externes, où un fournisseur réserve une partie de ses serveurs à l'usage exclusif d 'un client. Dans
ce dernier cas, l'infrastructure est entièrement dédiée au client et accessible via des réseaux
sécurisés de type VPN ( Virtual Private Network) .
3. Un cloud communautaire où l'infrastructure est partagée par plusieurs organisations qui ont des
intérêts communs (par exemple des exigences de sécurité, de conformité, etc.). Comme le cloud
privé, il peut être géré par les organisations elles-mêmes ou par un tiers.
4. un cloud hybride où l'entreprise peut gérer des ressources internes via deux nuages ou plus (privé,
communautaire ou public), qui restent des entités uniques, mais qui sont liées par une technologie
normalisée ou propriétaire.
1. Garantir au client l'exclusivité d'accès à un ensemble de ressources durant toute sa présence dans
le cloud (malgré la mutualisation).
2. Donner à chaque client du cloud l'illusion d'être le seul utilisateur. Rien ne doit le laisser présager
la présence d'autres utilisateurs ou applications.
36
[Link] d’Orchestration de conteneurs docker
4.6.1. Introduction
Les conteneurs Docker constituent une méthode de virtualisation légère au niveau du système
d'exploitation qui permet de lancer une application et ses dépendances à travers un ensemble de
processus isolés du reste du système. Cette méthode permet d'assurer le déploiement rapide et
stable des applications dans n'importe quel environnement informatique.
En plein essor depuis quelques années, les conteneurs Docker ont modifié la façon dont nous
développons, déployons et maintenons des logiciels. Leur légèreté et flexibilité ont favorisé
l'apparition de nouvelles formes d'architectures qui organisent les applications au sein de
conteneurs Docker, prêts à être déployés sur un cluster (groupe) de machines virtuelles ou
physiques. Toutefois, cette nouvelle approche requiert des nouveaux outils d'orchestration de
conteneurs Docker
Tout gérer de manière manuelle n'est pas concevable, car il serait difficile d'assurer la
viabilité, la maintenance et la pérennité du système. Un outil autonome capable de répondre à ces
besoins est donc requis. Cet outil constituera la plateforme d'orchestration de conteneurs.
Il existe plusieurs orchestrateurs, par exemple, Fleet, Mesas Apache, Swarm et Kubernetes.
Toutefois, dans la suite de ce chapitre, nous nous intéressons à Swarm et à Kubernetes. Ces derniers
se présentent comme étant des solutions stables, gratuites et capables d'automatiser le déploiement,
37
la migration, la surveillance, la mise en réseau, l'extensibilité et la disponibilité des applications
basées sur la technologie des conteneurs Docker. Cependant, chacun d'eux propose ses propres
architectures et méthodologies pour la gestion de conteneurs. Leurs définitions, architectures et
fonctionnements seront détaillés ci-après
b) Architecture de Swarm
L'orchestration avec Swarm est axée sur une simple architecture en cluster(s)(Luzzardi et
Victor, 2014; Cérin et al., 2017; Kovacs et al., 2018). Un cluster Swarm est constitué d'un nœud
gestionnaire (manager Swarm) et de nœud(s) de travail (worker Swarm)
• Les workers Swarm : Ils reçoivent et exécutent les conteneurs répartis à partir du manager. Un
agent Swarm s'exécute sur chaque worker et rend compte des tâches qui lui sont assignées.
38
Figure 6: Architecture de Swarm
39
b) Architecture de Kubernetes
Kubernetes orchestre les conteneurs Docker suivant une architecture maître/ esclaves (Bila
et al., 2017) constituée d'un nœud maître et de nœud(s) de travail (minion). Un agent K8s est
instaUé sur chaque nœud client (les exécuteurs) et renvoie des rapports au nœud maître. Ce dernier
est le responsable du cluster Kubernetes.
• Les minions Kubernetes : Ceux-ci sont les nœuds sur lesquels s'exécutent les applications
conteneurisées. D'une part, les nœuds clients communiquent avec le nœud maître via leur kubelet.
Le kubelet reçoit les ordres du nœud maître et les exécute via son moteur Docker. Il rapporte
également l'état du nœud client au serveur API du nœud maître. D'autre part, le kubeproxy s'exécute
sur chaque nœud client afin de gérer l'accès des utilisateurs finaux aux services déployés. Chaque
service est compilé dans un ou plusieurs pod. Un pod est un ensemble logique d 'un ou plusieurs
conteneurs. Il s'agit de la plus petite unité pouvant être programmée en tant que déploiement dans
Kubernetes. Les conteneurs d'un même pod partagent, entre autres, la
capacité de stockage et l'adresse IP sur le réseau. Le placement de ces pods se fait en suivant une
stratégie propre à Kubernetes [5].
40
Figure 7 : Architecture kubernetes
c) Fonctionnalité de kubernetes
41
Pour ce service, anciennement appelé “Google Container Engine”, on parle de CaaS :
Container as a Service.
e) Caractéristiques du GKE
• Kubernetes managé
• Haute disponibilité avec déploiements multizones intégrés
• Intégration transparente des autres services de GCP
• Très bon rapport performance/prix
• Flexible et interopérable avec les clusters hébergés on-premise ou chez d’autres cloud
providers
Bien que les deux orchestrateurs soient implémentés en Go (Go, 2018) (un langage
de programmation orientée service initié par Google) et fournissent à peu près les mêmes
fonctionnalités, il existe des différences fondamentales entre les deux approches. Le tableau ci-
après énumère les points de différences les plus remarquables. À la suite de cette étude
comparative, il est possible de noter que Swarm se focalise sur la facilité d'utilisation avec
l'intégration au Docker Deamon, tandis que Kubernetes prône la vision d'une plateforme
d'orchestration modulaire, personnalisable et donc évolutive.
En plus, pour encourager l'adoption des conteneurs dans les environnements modernes et
dynamiques (tels que les clouds publics, privés et hybrides), des entreprises (Google, Docker,
Microsoft, Mesosphere, Vmware, IBM, Oracle, etc.) ont mis en place la fondation de l'informatique
nuagique native, la CNCF (Cloud Native Computing Foundation), L’objectif principal de la CNCF
est la création de normes pour le fonctionnement des conteneurs. Kubernetes a été adopté comme
l'orchestrateur standard de conteneurs. Ainsi le projet K8s est désormais maintenu par la CNCF
42
Tableau 8 : Tableau comparatif du swarm et kubernetes
Vitesse de déploiement Se basant sur des critères qui ne Kubernetes a besoin de connaître
tiennent pas compte de l'état réel à l'avance l'état du cluster, ce qui
du cluster, Swarm est capable de ralentit le déploiement des pods
déployer rapidement des
conteneurs
Modularité Swarm utilise l'API Docker Kubernetes est modulaire. Il offre
deamon pour gérer tout le d'un ensemble unifié d' AP!s qui
cluster · collaborent pour gérer le cluster
Surveillance Pas de garanties solides sur Grâce à son ensemble unifié d'AP!s, le
l’état du cluster nœud maître connaît en temps réel l'état
global du cluster
Tolérance aux Faible tolérance aux pannes Kubernetes est tolérant aux pannes
fautes (pannes) franches comme l'arrêt d'un nœud de
travail, d'un pod ou d'un conteneur
43
4.7.1. Google Compute Engine (GCE)
Google Compute Engine (GCE) est une offre d'infrastructure à la demande (IaaS,
Infrastructure as a Service) qui permet à des clients d'exécuter des charges de travail sur du matériel
Google. A cet effet, Google Compute Engine met à disposition un nombre évolutif de machines
virtuelles (VM, Virtual Machine), utilisables comme des clusters informatiques de grande
envergure. GCE peut être géré par le biais d'une API RESTful, d'une interface de ligne de
commande (CLI) ou d'une console Web. Compute Engine est un service facturé à l'utilisation, avec
un minimum de 10 minutes, sans frais initiaux ni engagement de durée. GCE est en concurrence
avec Elastic Compute Cloud (EC2) d'Amazon et Microsoft Azure.
4.8.L’intégration Continue
4.8.1. Définition
L’intégration continue est définit comme étant un ensemble de pratiques utilisés afin de
s’assurer que chaque modification dans le code source ne produit pas des problèmes de régression
dans l’application en cours de développement, c’est-à-dire qu’aucun défaut n’a été introduit à la
partie du système qui n’a pas été modifié.
Le principal but de cette approche est d’anticiper et d’identifier rapidement les bugs avant
la mise en production du logiciel. Ce qui permet d’avoir une vision plus complète du logiciel,
notamment sur les différents points faibles et points forts du code ou de l’équipe. Ceci permet de
44
gagner en réactivité pour faire face aux différents problèmes pouvant être présents dans les diverses
phases du projet.
Pour bénéficier des avantages qu’apporte le concept d’intégration continue, il est nécessaire
de suivre quelques règles de bonne pratique comme le maintien d’un unique dépôt pour le code
source visionné, effectuer plusieurs commit par jour et par développeur, automatiser la compilation
du code, et le maintien d’un de compilation court
Cette méthode repose sur la mise en place d’une brique logicielle qui va permettre
l’automatisation de plusieurs tâches :
• La compilation automatique du code et de ses dernières modifications,
• Les tests unitaires et fonctionnels,
• La validation du produit en fonction de plusieurs critères,
• Des tests de performances afin de procéder à certaines optimisations
Le développeur va procéder à son commit : cela consiste en une opération de validation des
dernières mises à jour du code source. Ces modifications sont effectuées en local, il faut donc
exporter le code vers le serveur de gestion de source. Le développeur doit au passage assurer la
bonne fusion de son code avec celui de ses voisins.
• L’ordonnanceur constate qu’une nouvelle version est disponible, il lance une compilation
sur l’une des machines prévues à cet effet.
• Une compilation est effectuée sur une machine de compilation.
• Le code étant compilé, des tests unitaires sont lancés sur des machines de tests.
• En parallèle la qualité du code est vérifiée.
45
• Si la qualité du code et les tests unitaires sont satisfaisants, le(s) nouveau(x) binaire(s) est
(sont) envoyé(s) dans le dépôt. Ils peuvent être déployés par la suite dans d’autres
environnements. En cas d’échec, une notification est générée au chef de projet et/ou à
l’équipe de développement. Le développeur concerné par l’erreur fait une update du
référentiel de gestion de configuration et corrige l’anomalie.
L’ordonnanceur : c’est le chef d’orchestre du système. Il ordonne les tâches pour qu’elles
se réalisent dans le bon ordre. Il remonte également les erreurs aux utilisateurs. L’ordonnanceur le
plus classique à utiliser est Jenkins
• Le gestionnaire de source (VCS) : dans cette application se retrouve l’ensemble des sources
sous différentes versions. Il est possible de revenir en arrière facilement, de créer des
branches (pour différentes versions d’un même projet). Le gestionnaire de source classique
est Git
• Le compilateur : c’est l’outil qui permet de traduire le code source (par exemple, du C) en
langage compréhensible par la machine, ou par un interpréteur. Il en existe des milliers, les
plus connu étant GCC et le JDK.
• Les tests unitaires : ce composant permet d’effectuer et de jouer l’ensemble des tests
unitaires définis dans un projet.
• Le contrôle qualité : ce composant est chargé d’assurer la qualité du code en fonction de
plusieurs paramètres. L’outil le plus classique est SonarQube
46
• Le dépôt de binaire : ce composant permet le stockage des différentes versions d’un projet
après compilation. Il peut aussi servir comme source pour des composants utilisés dans son
propre projet. L’outil Nexus peut servir comme moyen de dépôt binaire.
4.8.5. Les avantages de l’intégration continue
[Link]
JMeter est un logiciel permettant d'effectuer des tests de charge de plusieurs services différents
(ftp, mail, ldap, …), mais nous nous concentrerons ici sur la mise en œuvre d'un test de charge
d'une application web. JMeter est écrit en Java et son développement est géré par la fondation
Apache.
Son utilisation consiste dans un premier temps à établir un scénario de test, c'est-à-dire un
exemple de session de navigation d'un visiteur, puis à faire répéter ce scénario autant de fois et par
autant de visiteurs (ou threads) simultanés que vous l'aurez décidé.
47
Ce schéma représente le cas idéal où vous posséderiez des ressources matérielles disponibles.
Seulement ce n'est pas toujours le cas et on pourrait plus simplement se contenter d'une seule
instance de JMeter à partir de laquelle vous élaborerez le scénario et lancerez le test de charge.
Cependant, il faut noter que lors d'un test, la charge générée par JMeter n'est pas négligeable, donc
plus l'infrastructure de votre site est robuste et plus vous aurez besoin d'injecteurs et de bande
passante afin de pousser vos tests le plus loin possible.
48
Partie III : MISE EN OEUVRE
49
Chapitre 5. INSTALLATION ET CONFIGURATION
5.1. Configuration GCP
5.1.1. Création projet sur GCP
Il faut tout d’abord crée un compte sur GCP, après l’inscription sur GCP, ensuite il faut crée
un projet pour pouvoir utiliser service GCP. L’image ci-après montre comment le faire, c’est-à-
dire aller dans le Menu et cliquer créer un projet,
50
[Link]. Création clusters GKE
Dans le Menu du GCP mais dans la partie Kubernetes, cliquez sur kubernetes Engine et
sur Clusters, le bouton CREER permet de créer un nouveau cluster. On choisit l’option Standard
pour pouvoir gérer notre propre cluster, contrairement à l’option Autopilot qui est gérer par Google,
51
Il faut remplir toutes les configurations de cluster a notre besoin, ici nous allons garder la
configuration par défaut.
Pour connecter au cluster, il nous donne une commande à exécuter sur Google Shell en cliquant
sur le bouton connecter.
52
5.2. Installation et configuration du Jenkins
Sur le plateforme GCP en clique le bouton SSH pour accède directement au serveur Jenkins,
la figure suivant montre qu’on est dans le serveur Jenkins.
Les étapes à suivre pour l’installation du Jenkins sur l’instance GCP sont sur les figures
suivants, il faut d’abord mettre à jour le repository dans notre instance pour pouvoir télécharger le
paquet Jenkins avec le commande : $ apt update.
53
Figure 18 : Mise à jour de repository
54
Ici, on donne la permission au jenkins user, il faut ajouter dans le groupe sudoers, pour cela il faut
éditer /etc/sudoers et on ajoute la ligne jenkins ALL = (ALL) NOPASSWD : ALL (figure 23 )
55
Figure 21 : Vérification du service Jenkins
56
5.4. Installation Kubeclt
Kubectl est un outil en ligne de commande pour contrôler des clusters Kubernetes.”. C’est
avec cela que l’on va pouvoir effectuer diverses opérations sur notre cluster. Avant d’installer le
kubectl dans notre instance Jenkins, on va d’abord vérifier l’installation du GCLOUD par la
commande which, normalement il est installé par défaut dans notre instance.
Lorsque l’installation snap est fait, on va installer kubectl par la commande snap.
C’est est un système d'empaquetage et de déploiement de logiciels développé par Canonical pour
les systèmes d'exploitation utilisant le noyau Linux
$ install kubectl –classic.
57
Figure 25 : Installation du kubectl
Jenkins demande la création d’une utilisateur admin après l’installation, il suffit juste de
compléter les champs, et appuyer sur Save and Continue, comme l’image suivant montre :
58
Figure 27 : Jenkins prêt à être utiliser
Il faut juste clique sur Administrer Jenkins et Gestion des plugins pour faire l’installation.
Ensuite il faut chercher Maven dans le bar de recherche et installer les plugins, ainsi de suite.
59
Figure 29 : : Installation Maven Invoker
60
Figure 31 : : Installation du plugins Google kubernetes Engine
61
Ensuite lance l’installation docker pipeline, l’etapes à suivre est le même comme l’installation
Maven :
62
5.5.2 Création credential
Il faut crée crentiel pour Docker Hub et Kubernetees.
63
Figure 36 : Le compte de service du projet
Cliquez sur le lien dans la colonne E-mail, et on va directement dans le menu de création de clé :
On se redirigé automatiquement vers la fenêtre de choix clé, après avoir clique sur Créer
une clé, il faut choisir l’extension .json et après le téléchargement se lance :
64
Figure 38 : choix du type du clé à créer
Nous allons ensuite, importer la clé vers Jenkins après le téléchargement en accédant dans le
menu Administre Jenkins ensuit Mange credentiel et Add credentiels.
65
5.6. Création du Pipeline CI/CD
Pour cree pipeline CI/CD, il faut cliquer sur créer un job, pour que le build s’exécuter
automatiquement lorsqu’il y a des changements dans notre code.
Après avoir nommé le pipeline qu’on a choisi, cliquer sur Ok pour valide.
66
En utilise le script SCM pour configurer notre pipeline, on choisit Git, et ajouter dans le
champs Repository URL le lien repository qui contient le Jenkinsfiles et les différents codes qu’il
faut déployer. Et puis cliquer sur Sauvegarder.
67
Notre stage de pipeline :
68
Figure 45 : Script du pipeline (suite)
5.7.2. Loadbalancing
Load-Balancing consiste à répartir efficacement le trafic réseau entrant sur un groupe de
serveurs principaux, également appelé batterie de serveurs ou pool de serveurs.
69
Fonctions Loadbalancing :
• Distribue efficacement les demandes des clients ou la charge du réseau sur plusieurs
serveurs,
• Garantit une disponibilité et une fiabilité élevées en envoyant des requêtes uniquement aux
serveurs en ligne,
• Offre la possibilité d'ajouter ou de soustraire des serveurs en fonction de la demande.
Pour assurer la répartition des requêtes on utilise Nginx Loadbalancer. La figure suivant montre
le script YAML du service Load Balancer :
70
Figure 48: Script de déploiement de l'application
Dans le menu Jenkins on va lancer Build, pour faire il faut cliquer sur Lancer un build :
71
Le commande suivant permet de vérifier que le déploiement et bien faite dans kubernetes :$
kubectl get all
Il faut vérifier dans notre repository Docker Hub que les images sont bien pusher à chaque
fois qu’on lance le build.
72
Figure 52 : Détails de l'image dans dockerhub
73
Figure 54 :: Services Tomcat marche
Pour accéder à notre application déployée on a deux possibilité soit par l’adresse IP du
loadbalancer soit par l’adresse Ip des nodes, il faut juste préciser le port du Loadbalancer pour la
deuxième possibilité.
La figure suivante suivant montre comment accéder à l’application par la première adresse
du Loadbalancer, [Link] suivi du chemin de la page :
74
La figure suivant nous montre l’accès par [Link], c’est-à-dire le deuxième Loadbalancer :
75
Figure 58 : accès de l'application par le node 2
76
Figure 59 : Configuration WeebHook sur le github
Après, on va cocher l’option GitHub hook trigger dans notre pipeline du Jenkins :
77
CONCLUSION
Pendant ce mémoire on a eu l’opportunité d’être initiés dans le domaine d’intégration et
déploiement Continue avec Zero-Downtime, du Cloud, kubernetes, et de comprendre ses
différents fonctionnements.
Le choix de la technologie de virtualisation Docker met le déploiement de notre solution
très rapide grâce à son outil Dockerfile. Le principe fondateur de cette approche moderne est de
créer des environnements virtuels au niveau applicatif. Ceci révolutionne la virtualisation
traditionnelle qui consiste à la création d'environnements virtuels au niveau de l'infrastructure.
Cette approche de virtualisation légère a pour principaux avantages l'utilisation efficace des
ressources du fournisseur, l'amélioration des performances et la diminution des coûts pour les
utilisateurs. Ceci implique l'apparition de nouvelles formes d'architectures qui organisent les
services du cloud au sein de conteneurs prêts à être instanciés dans des machines virtuelles ou
physiques.
Toutefois, l'utilisation des conteneurs Docker dans l'environnement cloud n'est pas
sans défi . En effet, plusieurs difficultés doivent être résolues, parmi elles on peut citer
l'orchestration (gestion des déploiements, migrations, mises à jour, etc.) et la garantie de la
continuité de service (tolérance aux fautes). Le défi d'orchestration de conteneurs Docker est
résolu par l'adoption de Kubernetes comme plateforme évolutive d'orchestration des applications
conteneurisées.
La rapidité de déploiement de notre architecture présente une grande importance dans
notre projet, en effet, nous pouvons tester n’importe quel logiciel en mode de développement
dans un intervalle de temps très court..
Ce stage nous a beaucoup apporté, tant sur le plan personnel que professionnel. Il nous a
permis de mieux comprendre et d’appréhender l’organisation d’une entreprise, ses contraintes
et ses missions. Ceci présente pour nous une opportunité pour mieux comprendre le concept du
Déploiement avec Zero-Downtime.
78
REFERENCES BIBLIOGRAPHIQUES
[1] Docker : Pratique des architectures à base de conteneurs Johann Kohler, 7 septembre 2016.
[5] Arnaud Weil, Learn Kubernetes - Container orchestration using Docker, 2018
XII
REFERENCES WEBOGRAPHIQUES
[6] [Link] consulté le 30
Octobre 2022
XIII
GLOSSAIRE
Administrateur : Indique l’utilisateur d’une ressource (matériel ou logiciel) qui possède un
privilège spécial (ajout, suppression, modification ou mise à jour) par rapport aux autres. C’est
entre autres le super utilisateur de la ressource.
Cloud : Processus consistant à utiliser des serveurs informatiques distants au travers des
réseaux Internet.
Cloud Computing : Le Cloud Computing est un terme général employé pour désigner la livraison
de ressources et de services à la demande par internet.
Conteneurs : Un conteneur est le regroupement d'un logiciel et toutes ses dépendances (librairies,
code source, fichiers de configuration...) empaquetés au même endroit.
Déploiement Continue : Le déploiement continu est une stratégie de développement logiciel où
toute validation de code qui réussit le cycle de test automatisé est automatiquement transférée dans
l'environnement de production, propulsant ainsi les modifications vers les utilisateurs du logiciel.
Docker : Docker est un logiciel libre permettant de lancer des applications dans des conteneurs
logiciels.
Docker hub : Docker Hub est un référentiel cloud dans lequel les utilisateurs et partenaires Docker
créent, testent, stockent et distribuent des images de conteneur
Horizontal Scaling : signifie modifier les ressources de calcul d'un cluster existant, par exemple
en y ajoutant de nouveaux nœuds ou en ajoutant de nouveaux pods en augmentant le nombre de
réplicas de pods (Horizontal Pod Autoscaler).
Image : Une image de conteneur est un fichier statique non modifiable. Il renferme un code
exécutable de manière à exécuter un processus isolé dans une infrastructure informatique.
Kubernetes : est un système open source qui vise à fournir une « plate-forme permettant
d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d'application
sur des clusters de serveurs ».
Machine virtuelle : En informatique, une machine virtuelle (anglais virtual machine, abr. VM)
est une illusion d’un appareil informatique créée par un logiciel d’émulation. Le logiciel
d’émulation simule la présence de ressources matérielles et logicielles telles que la mémoire, le
XIV
Node (Noeud) : Un nœud est une machine de travail dans Kubernetes, connue auparavant sous le
nom de minion. Un nœud peut être une machine virtuelle ou une machine physique, selon le
cluster. Chaque nœud contient les services nécessaires à l'exécution de pods et est géré par les
composants du master
Processeur, le disque dur, voire le système d’exploitation et les pilotes, permettant d’exécuter des
programmes dans les mêmes conditions que celles de la machine simulée
Pod : Un pod Kubernetes est un ensemble composé d'un ou plusieurs container linux. Il s'agit de
la plus petite unité d'une application Kubernetes. Un pod peut contenir plusieurs conteneurs
étroitement couplés (cas d'utilisation avancé) ou un conteneur unique (cas d'utilisation plus
courant)
Vertical Scaling : signifie modifier les ressources attribuées (comme CPU ou RAM) de chaque
nœud du cluster. Dans la plupart des cas, cela signifie créer un pool de nœuds entièrement nouveau
à l'aide de machines ayant des configurations matérielles différentes. La mise à l'échelle verticale
sur les pods signifie l'ajustement dynamique des demandes de ressources et des limites en fonction
des exigences actuelles de l'application (Vertical Pod Autoscaler).
YAML : YAML, acronyme récursif de YAML Ain’t Markup Language, est un format de
représentation de données par sérialisation Unicode. Il reprend des concepts d’autres langages
comme XML, ou encore du format de message électronique tel que documenté par RFC 2822.
YAML a été proposé par Clark Evans en 20011, et implémenté par ses soins ainsi que par Brian
Ingerson et Oren Ben-Kiki.
Zero Downtime : Le Zero Downtime Deployment ou encore déploiement sans temps d'arrêt en
français est une méthode de déploiement d'un site Web, d'une application ou d'un système sans
jamais mettre hors service ou dans un état instable une application pendant son processus de
déploiement.
XV
TABLES DE MATIERES
CURRICULUM VITAE .................................................................................................................. I
DEDICACE .................................................................................................................................... III
REMERCIEMENTS ......................................................................................................................IV
SOMMAIRE ................................................................................................................................... V
LISTE DES ABREVIATIONS ....................................................................................................... X
LISTE DES TABLEAUX ..............................................................................................................IX
LISTE DES FIGURES .................................................................................................................... X
INTRODUCTION GENERALE...................................................................................................... 1
Partie I : PRESENTATIONS ....................................................................................................... 2
a) Définition .......................................................................................................... 27
a) Définition .......................................................................................................... 30
c) Plateforme ........................................................................................................ 30
XVII
4.3.1. YAML .............................................................................................................. 32
a) Définition .......................................................................................................... 38
b) Architecture de Swarm..................................................................................... 38
a) Définition ......................................................................................................... 39
XVIII
4.8.4. Les différents composants d’une plate-forme d’IC : ................................... 46
CONCLUSION .............................................................................................................................. 78
REFERENCES BIBLIOGRAPHIQUES ..................................................................................... XII
REFERENCES WEBOGRAPHIQUES ...................................................................................... XIII
XIX
GLOSSAIRE ............................................................................................................................... XIV
TABLES DE MATIERES ..........................................................................................................XVI
RESUME.....................................................................................................................................XXI
ABSTRACT ................................................................................................................................ XXI
XX
RESUME
Durant son cycle de vie, le logiciel passe par plusieurs étapes de développement et
évolution. Le déploiement est une phase cruciale parmi d’autres, qui transforme le code source en
programme en exécution. Traditionnellement, cette étape est exécutée manuellement ce qui la rend
particulièrement critique et source de problèmes pour l’entreprise. Grâce aux méthodes agiles, le
déploiement a connu des bouleversements majeurs avec l’apparition de nouvelles techniques tels
que l’intégration continue, la livraison continue et le déploiement continu.
Ce mémoire traite de la manière dont le déploiement continu avec Zero-downtime a été mis
en place, de la conception à l’implémentation tous en décrivant les étapes de ce projet.
ABSTRACT
During its life cycle, the software goes through several stages of development and
evolution. Deployment is a crucial phase among others, which transforms the source code into a
running program. Traditionally, this step is performed manually, which makes it particularly
critical and a source of problems for the company. Thanks to agile methods, deployment has
undergone major upheavals with the appearance of new techniques such as continuous integration,
continuous delivery and continuous deployment.
This thesis discusses how continuous deployment with Zero-downtime was implemented,
from design to implementation, all by describing the stages of this project.
XXI