Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Retour d’expérience sur la conteneurisation de ...

Retour d’expérience sur la conteneurisation de l’usine logicielle sur le projet Libon d’Orange Vallée @ Paris Container Day

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.

Jean-Louis Rigau

June 29, 2016
Tweet

More Decks by Jean-Louis Rigau

Other Decks in Programming

Transcript

  1. @ContainerDay16 Jean-Louis RIGAU @jlrigau Continuous Delivery, DevOps and Docker @

    Xebia IT Architects Fabien THOUNY @fthouny Craftsmanship, Agile, Tech Lead @ Libon
  2. @ContainerDay16 @jlrigau @fthouny Appeler... • Appels VoIP (app to app)

    gratuits • Appels VoIP-Out à prix réduits vers plus de 140 destinations
  3. @ContainerDay16 @jlrigau @fthouny Simplement ! • Multi-plateforme ◦ Android ◦

    iPhone ◦ Web HTML5 • Synchronisées grâce à des API REST
  4. @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
  5. @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é !
  6. @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
  7. @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
  8. @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
  9. @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
  10. @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
  11. @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”
  12. @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
  13. @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 Board Zk UI
  14. @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
  15. @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
  16. @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
  17. @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 Board Zk UI mirror mirror
  18. @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 ?