A travers ce retour d’expérience du projet Libon d’Orange Vallée, nous parcourrons ensemble les étapes successives qui nous ont permises d’industrialiser notre usine logicielle avec Jenkins, Docker, Mesos, Marathon et GlusterFS. Fini le cauchemar du serveur d’intégration continue partagé entre plusieurs équipes avec des technologies hétéroclites... Accueillons dorénavant la nouvelle plate-forme de CI as-a-service entièrement conteneurisée, scalable et résiliente ! Nous montrerons en quoi ces nouveaux outils ont fluidifié nos processus de développement et comment cette intégration en douceur de Docker dans notre quotidien nous donne aujourd’hui la confiance nécessaire pour une utilisation future en Production.
Par Jean-Louis Rigau (Software Engineer, Continuous Delivery, DevOps and Docker @Xebia) & Fabien Thouny (Consultant Java/JEE @ Libon (Groupe Orange) )
Toutes les vidéos des conférences seront disponibles sur Xebia.tv
8. @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
10. @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é !
12. @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
13. @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
19. @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
22. @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
24. @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”
27. @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
29. @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
31. @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
33. @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 ?