34
@ContainerDay16 @jlrigau @fthouny Conteneurisation de l'usine logicielle Retour d’expérience du projet Libon d’Orange Vallée @ContainerDay16

Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

Embed Size (px)

Citation preview

Page 1: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Conteneurisation del'usine logicielleRetour d’expérience du projet Libon d’Orange Vallée

@ContainerDay16

Page 2: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16

Jean-Louis RIGAU@jlrigau

Continuous Delivery, DevOps and Docker@ Xebia IT Architects

Fabien THOUNY@fthouny

Craftsmanship, Agile, Tech Lead@ Libon

Page 3: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Appeler...

● Appels VoIP (app to app) gratuits

● Appels VoIP-Out à prix réduits vers plus de 140 destinations

Page 4: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Envoyer des messages...

● Chat utilisant le protocole XMPP

● Échange de fichiers

Page 5: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Simplement !

● Multi-plateforme○ Android○ iPhone○ Web HTML5

● Synchronisées grâce à des API REST

Page 6: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16

Il était une fois,il y a fort longtemps...

Page 7: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1

Instance unique de Jenkins

Page 8: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● Mises à jour OS● Librairies systèmes● Versions de SDK

○ JDK 1.7/1.8

● Mutualisation des services○ Cassandra, Oracle, MySQL

● Ressources de la machine● Risque de défaillance

Difficultés multiples

Page 9: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1

Gestion des besoins spécifiques

build2

slave

Page 10: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● 2 machines○ l’une surchargée○ l’autre sous-utilisée

● Versions OS différentes○ Écart entre les packages○ Davantage de maintenance

Toujours plus de complexité !

Page 11: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16

Et vint le temps de la révolution...

Page 12: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Construire, transporter et exécuter tout type d’application sur tout type de plate-

forme

Opérer ses applications au sein de son Data Center comme s’il s’agissait d’une

ressource unique

Boîte à Outils 1/2

Déployer et orchestrer ses conteneurs au sein d’un cluster Mesos à l'échelle

Page 13: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Boîte à Outils 2/2

Configuration automatique de HAProxy et Découverte de Service pour Mesos

Marathon

Open-source TCP/HTTP load-balancing proxy server

Bamboo

Page 14: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Architecture du Cluster

Page 15: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Framework Marathon

Page 16: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1

Mise en Cluster de la CI

Bamboo Bamboo Bamboo

Page 17: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● Gestion des images Docker○ Stockage○ Distribution

● Déploiement○ Image officielle sur le Docker Hub○ Utilisation de Marathon

● Sécurité ○ Authentification LDAP○ TLS

Docker Registry

Page 18: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1

Déploiement de la Registry

Bamboo Bamboo Bamboo

Page 19: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Configuration d’un Service

● Configuration au format JSON○ Image○ Volume, Mapping de ports○ Ressources○ Contraintes○ Health Check

● Déploiement avec l’API REST de Marathon

● Utilisation des images officielles○ Disponible sur le Hub

Page 20: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1

Déploiement des Services

Bamboo Bamboo Bamboo

API Docs

Slack BotZk UI Version

Board

Page 21: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Framework Jenkins Scheduler

Page 22: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● Création d’images de “Build”○ Héritant de l’image “build-tools”○ Une image Docker par runtime

● Utilisation du Jenkins Mesos plugin○ 1 slave = 1 image Docker○ Utilisation des labels dans les jobs

● Slave à la demande○ Création de tâches Mesos○ Nettoyage automatique

Création des slaves

Page 23: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1

Jenkins Slaves conteneurisés

Bamboo Bamboo Bamboo

API Docs

Slack BotZk UI Version

Board

Page 24: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● Binaire développé en Go○ Inclut dans les images de build○ Disponible sur le poste de DEV et sur l’environnement de CI

● Mêmes outils en CI et sur le poste de développement

Binaire “build-machine”

Page 25: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

DEMOConstruction et déploiement d’une application

Page 26: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16

Place à l’industrialisation de la plateforme...

Page 27: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Spécialisation de l’infrastructure

● Séparation Master / Slave○ Extraction du master vers une VM○ Conservation des machines physiques pour les slaves

● Réorganisation des modules Puppet○ 2 profils master et slave

Page 28: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1 buildfiler2 buildfiler3 buildfiler4

Bamboo Bamboo Bamboo Bamboo Bamboo Bamboo

buildmaster1

Séparation Master / Slave

API Docs

Slack Bot

Version BoardZk UI

Page 29: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● 2 types de données○ Cache (Docker, Maven, NPM, Gradle, etc.)○ Données persistantes (Registry, Jenkins, Sonar, Nexus, Dashboard, etc.)

● Mise en place de GlusterFS○ Mutualisation des capacités de stockage des noeuds du cluster○ Volume répliqué et distribué (~ 1,6 To disponible au final)

● Création d’un point de montage “/shared”○ Accessible sur chacun des noeuds du cluster

Gestion des Données

Page 30: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1 buildfiler2 buildfiler3

Distributed Replicated GlusterFS Volume

buildfiler4

Bamboo Bamboo Bamboo Bamboo Bamboo Bamboo

buildmaster1

CI entièrement conteneurisée !

API Docs

Slack Bot

Zk UI Version Board

Page 31: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Performances de la Registry

● Registry : point faible de l’architecture○ Ajout d’une deuxième instance en cluster

● Le Docker Hub peut être lent○ Mise en place d’un cluster de miroirs

● Boucle sur Internet pour accéder à la registry○ Ajout d’une entrée dans le /etc/hosts de chacun des noeuds

Page 32: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

build1 build2 buildfiler1 buildfiler2 buildfiler3

Distributed Replicated GlusterFS Volume

buildfiler4

Bamboo Bamboo Bamboo Bamboo Bamboo Bamboo

buildmaster1

Registry en Haute Disponibilité

API Docs

Slack Bot

Version BoardZk UI

mirror

mirror

Page 33: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

● Mise en place d’un système de gestion de droits sur la Registry○ PoC de Portus en cours

● Utilisation des images officielles pour nos builds○ Exploration de Jenkins 2.x et du Plugin Pipeline

● Élimination des dernières faiblesses de l’architecture○ Master à mettre en cluster

● Emmener les conteneurs jusqu’en Production !○ En s’appuyant sur l’expérience acquise sur la CI

Quelles évolutions ?

Page 34: Paris Container Day 2016 : Conteneurisation de l’usine logicielle (Retour d'expérience Xebia & Libon)

@ContainerDay16 @jlrigau @fthouny

Q&A