Camptocamp – Références

Camptocamp gère son parc à l’aide de Puppet

L’automatisation de la gestion des serveurs est indispensable au suivi des changements et à la reproductibilité des environnements. C’est pourquoi Camptocamp gère son parc à l’aide de Puppet.

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

À la fin des années 1990, l’avènement d’Internet pour le grand public a vu naître des parcs informatiques de grande taille, avec de nouveaux challenges. Cette multiplication des configurations s’est encore accentuée avec l’arrivée de la virtualisation, permettant de provisionner très rapidement des machines.

Dans ce nouveau paradigme, les machines sont devenues éphémères et de nouveaux besoins sont apparus :

  • standardisation : les machines installées doivent se conformer à un socle de base commun (mise en conformité)
  • reproductibilité : les machines doivent pouvoir être réinstallées à l’identique à tout moment
  • parallélisation : il doit pouvoir être possible d’instantier plusieurs machines en parallèle sans multiplier le temps de travail humain en proportion
  • gestion des changements : tout changement doit pouvoir être audité et loggé (qualité/rollbacks)
  • inventaire : les machines doivent être connues à tout moment et on doit pouvoir connaître leur état

L’adaptation des processus d’opérations (ITSM, IT service management) permet d’adresser une partie de ces besoins. Cependant, seule une automatisation de la gestion des machines permet des gains importants en efficacité.

Dès les années 1990, des outils des gestion de configuration ont vu le jour, tel que Cfengine (1992). En 2005, Luke Kanies crée Puppet, un outil de gestion de configuration associant les principes de Cfengine à un langage simple et une architecture modulaire.

Camptocamp s’intéresse très tôt à Puppet. Dès 2007, Camptocamp utilisait Puppet en production et faisait partie du nombre réduit d’entreprises distribuant des modules Puppet open source.

Comme la plupart des utilisateurs de Puppet, nous avons commencé par une stack Puppet Master basée sur Apache et mod_passenger. Dès sa version 0.2.0 en 2014, nous avons adopté Puppetserver (basé sur la JVM) en remplacement et avons pu apprécier les gains en performance et en simplicité de mise en oeuvre. Nous publions alors un module permettant de gérer le déploiement et la configuration du Puppetserver avec Puppet (encore utilisé dans la communauté à ce jour).

Au cours des 10 dernières années, Camptocamp a continuellement modifié son infrastructure Puppet en fonction des avancées technologiques.

Nos équipes se sont fortement impliquées dans la communauté par de nombreuses contributions :

  • module sur la Forge Puppet (contributeur communautaire le plus important)
  • développeurs Augeas et Augeasproviders
  • members actifs de Voxpupuli, le groupe de pilotage des modules en gestion partagée de la communauté Puppet

Depuis 2014, Camptocamp est partenaire de Puppet Inc. À ce titre, nous enseignons régulièrement des formations du cursus officiel, tous niveaux confondus. La grande majorité de nos ingénieurs est certifiée Puppet Professional.

Mise en oeuvre

Généralités

Puppet est implémenté autour d’un composant central : le Puppet Master, qui fournit une source de vérité pour la configuration des machines. S’appuyant sur le code Puppet (manifests), les données (Hiera), et éventuellement des sources externes (par ex. Foreman), le Puppet Master permet à chaque machine (node) de récupérer à intervalle régulier l’état cible qu’elle est en charge de maintenir.

PuppetGestion de code

L’intégralité du code Puppet de nos équipes est gérée dans git et déployée sur le Puppet Master à l’aide de l’outil r10k. Cela nous permet de faire de la revue de code collaborative, ainsi que d’intégrer notre code Puppet dans des processus d’intégration continue qui testent le code avant sa mise en production. Nous implémentons des tests unitaires (test du code Puppet “pur”) ainsi que des tests d’acceptation (simulation de déploiement dans des environnements virtuels jetables) afin de garantir la qualité et le suivi de notre code.

Nous avons également un système de calcul de différences permettant d’évaluer finement l’impact d’une mise en production du code.

Classification des noeuds

Nos noeuds sont classifiés grâce aux extensions des certificats Puppet. Cela nous donne une grande flexibilité de classification au moment du provisionning, puisque Terraform peut aisément générer un certificat Puppet pointant sur un environnement et un rôle précis pour le noeud en cours de création.

Gestion des secrets

Nous utilisons Hiera avec le plugin eyaml-gpg pour gérer les paramètres secrets de notre code Puppet. Cela nous permet d’avoir une gestion fine des droits des administrateurs sur les secrets par l’utilisation de clés PGP individuelles.

Gestion des certificats

L’automatisation du provisionning requiert une gestion automatique des certificats Puppet. Nous utilisons la méthode de politique de signature automatique des certificats basée sur des challenges partagés. Cette méthode nous permet de faire générer les certificats Puppet à travers Terraform, et ainsi de facilement installer de nouvelles machines sans intervention humaine pour signer les certificats.

Nous avons également mis en place un système de renouvellement automatique des certificats Puppet lorsqu’ils sont prêts d’expirer. Ce système utilise le code Puppet lui-même pour recréer le certificat des noeuds au besoin.

Résultats

La gestion du parc sous forme de code permet de mettre en place une gestion agile de la production, par l’utilisation de processus d’intégration continue et de pair reviewing.

Le Puppet Master fournit des rapports pour chaque noeud géré, qui peuvent ensuite être traités et consultés dans des interfaces web, telles que Foreman ou Puppetboard.

La gestion des machines par Puppet peut facilement s’intégrer avec les processus de provisionning, en utilisant par exemple Foreman, VMWare Orchestrator ou encore Terraform.

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