Camptocamp – Références

Camptocamp déploie l’écosystème Puppet à l’aide de containers Docker

L’utilisation de containers pour le déploiement d’applications complexes améliore la flexibilité, la gestion du cycle de vie et la mise à l’échelle.

Internal Case Study

L’entreprise

Au travers de ses trois départements (Geospatial, Business, Infrastructure) le groupe Camptocamp est intrinsèquement organisé autour des méthodologies DevOps. Cette approche a pour objectif principal d’aligner nos collaborateurs (ingénieurs spécialisés, analystes métiers, intégrateurs, testeurs) sur des objectifs et des valeurs communes, travailler ensemble pour produire la valeur de l’entreprise et donner satisfaction à nos clients. Favoriser l’agilité et organiser nos équipes autour de processus automatisés et transversaux est au centre de nos préoccupations.

Challenges

Puppet est une solution de gestion de configuration comprenant plusieurs composants, selon les choix d’outils effectués. Dans notre cas : Puppetserver (Java/Clojure/JRuby), PuppetDB (Java/Clojure), PostgreSQL, ActiveMQ (Java), r10k (Ruby), Puppetboard (Python/WSGI).

L’approche traditionnelle consiste à gérer ces composants avec Puppet lui-même, générant une situation du paradoxe de l’oeuf et de la poule, ce qui rend l’installation et l’évolution du système complexe.

À la sortie de Puppet 4.0 en 2015, Puppet Inc. a modifié le packaging de sa solution (paquets ”All-in-one”). Toute notre approche est à adapter, et nous choisissons d’envisager un changement technologique afin de résoudre le paradoxe de l’oeuf et de la poule que représente la gestion de la stack Puppet avec Puppet lui-même.

À la même époque, nous nous intéressions de plus à plus à Docker comme solution de déploiement en production (nous l’utilisions déjà activement pour automatiser du développement et des tests), et la stack Puppet nous paraît un projet idéal pour expérimenter cet outil pour plusieurs raisons : il n’est pas critique pour le business et il utilise des technologies nécessaires à nos autres produits (PostgreSQL, JVM, Python/WSGI).

En août 2015, nous avons créé des images Docker pour les différents composants de la stack Puppet (Puppetserver, r10k, PuppetDB/PostgreSQL, ActiveMQ/MCollective, Puppetboard), ainsi qu’une composition docker-compose pour déployer le tout. Cette composition a tourné 5 mois en production, et nous a conforté dans le choix technologique de Docker.

Rapidement cependant, nous souhaitions aller plus loin et déployer cette stack, ainsi que d’autres stacks d’infrastructure, dans un environnement multi-noeuds mutualisé. Nous avons alors effectué une étude interne qui nous a conduit à choisir Rancher comme orchestrateur Docker pour sa simplicité de déploiement et d’utilisation, et sa conformité avec le format docker-compose.yaml.

Nous convertissions alors notre composition Puppet en template de catalogue Rancher, que nous rendons rapidement publique.

En 2017, après 2 ans de gestion de la stack Puppet à l’aide de Docker, il apparaît désormais clairement que Kubernetes s’est imposé comme l’orchestrateur de containers de référence. Notre partenariat avec RedHat nous amène à nous focaliser sur OpenShift v3, que nous avions déjà envisagé d’utiliser 2 ans plus tôt, mais que nous avions alors trouvé immature. Nous portons donc notre stack Puppet sur OpenShift.

Mise en oeuvre

Docker

La stack Puppet est basée sur une série d’images Docker :

  • Puppetserver : fournit le Puppet Master sous la JVM, ainsi que la CA
  • activemq : utilisé comme middleware pour l’implémentation de MCollective, qui permet l’orchestration de déploiement du code à l’aide de r10k, ainsi que le contrôle à distance des éléments de la stack (CA, PuppetDB)
  • r10k : fournit r10k afin de déployer le code Puppet sur le Puppet Master. Ce container partage des volumes avec les containers Puppet, ce qui permet au Puppet Master d’accéder au code. L’image r10k utilise le service MCollective afin d’effectuer les déploiements à la demande
  • Puppetdb : fournit la PuppetDB, connectée à un serveur PostgreSQL externe à la stack
  • Puppetboard : une interface web légère permettant la lecture des informations de la PuppetDB
  • webhook : fournit un service web permettant de déclencher un déploiement de code à l’aide de r10k lorsqu’un commit git est reçu

Résultats

Le déploiement de la stack Puppet sur une technologie de containers nous a permis de nous affranchir du paradoxe de l’oeuf et de la poule. Nous avons grandement gagné en flexibilité.

Cela nous a également permis de valider la maturité de Docker pour les déploiements en production. Nous l’utilisons maintenant dans tous les nouveaux projets de Camptocamp.

  1. *
  2. *
  3. *
  4. *