@ContainerDay16 @jlrigau @fthouny
Conteneurisation del'usine logicielleRetour d’expérience du projet Libon d’Orange Vallée
@ContainerDay16
@ContainerDay16
Jean-Louis RIGAU@jlrigau
Continuous Delivery, DevOps and Docker@ Xebia IT Architects
Fabien THOUNY@fthouny
Craftsmanship, Agile, Tech Lead@ Libon
@ContainerDay16 @jlrigau @fthouny
Appeler...
● Appels VoIP (app to app) gratuits
● Appels VoIP-Out à prix réduits vers plus de 140 destinations
@ContainerDay16 @jlrigau @fthouny
Envoyer des messages...
● Chat utilisant le protocole XMPP
● Échange de fichiers
@ContainerDay16 @jlrigau @fthouny
Simplement !
● Multi-plateforme○ Android○ iPhone○ Web HTML5
● Synchronisées grâce à des API REST
@ContainerDay16
Il était une fois,il y a fort longtemps...
@ContainerDay16 @jlrigau @fthouny
build1
Instance unique de Jenkins
@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
@ContainerDay16 @jlrigau @fthouny
build1
Gestion des besoins spécifiques
build2
slave
@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é !
@ContainerDay16
Et vint le temps de la révolution...
@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
@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
@ContainerDay16 @jlrigau @fthouny
Architecture du Cluster
@ContainerDay16 @jlrigau @fthouny
Framework Marathon
@ContainerDay16 @jlrigau @fthouny
build1 build2 buildfiler1
Mise en Cluster de la CI
Bamboo Bamboo Bamboo
@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
@ContainerDay16 @jlrigau @fthouny
build1 build2 buildfiler1
Déploiement de la Registry
Bamboo Bamboo Bamboo
@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
@ContainerDay16 @jlrigau @fthouny
build1 build2 buildfiler1
Déploiement des Services
Bamboo Bamboo Bamboo
API Docs
Slack BotZk UI Version
Board
@ContainerDay16 @jlrigau @fthouny
Framework Jenkins Scheduler
@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
@ContainerDay16 @jlrigau @fthouny
build1 build2 buildfiler1
Jenkins Slaves conteneurisés
Bamboo Bamboo Bamboo
API Docs
Slack BotZk UI Version
Board
@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”
@ContainerDay16 @jlrigau @fthouny
DEMOConstruction et déploiement d’une application
@ContainerDay16
Place à l’industrialisation de la plateforme...
@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
@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
@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
@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
@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
@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
@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 ?
@ContainerDay16 @jlrigau @fthouny
Q&A