Camptocamp – Actualités

Puppetconf 2014

13 octobre 2014

Après une année bien remplie de collaboration avec Puppet Labs, notre Responsable Formations Infrastructure, Raphaël Pinson, a eu l’occasion de participer à Puppetconf 2014 à San Francisco (USA).

Cette 4ème édition de la conférence a rassemblé 1700 participants sur site (et beaucoup d’autres en ligne), y compris des professionnels locaux et des conférenciers et contributeurs internationaux.

De nouvelles fonctionnalités et des améliorations de Puppet ont été présentées. C’était une très bonne occasion d’échanger des idées avec les développeurs et les contributeurs de Puppet.

Formations

Plusieurs formations étaient organisées avant la conférence car Puppet Labs a récemment mis à jour son cursus de formation et ajouté deux nouveaux cours: Puppet Practitioner et Puppet Architect. Raphaël a suivi la nouvelle formation Puppet Architect, et Camptocamp est maintenant à même d’enseigner ce cours en Europe!

Rencontre avec les auteurs

Le monde des utilisateurs de Puppet grandit continuellement avec les années et de plus en plus de livres sont écrits sur le sujet, ainsi que des livres sur le mouvement Devops. Alessandro Franceschi, auteur du nouveau livre Extending Puppet, était présent pour présenter son livre, ainsi que d’autres auteurs: Nan Liu & Dan Bode (Puppet Types and Providers), James Turnbull (Pro Puppet, The Docker Book) and Gene Kim  (The Phoenix Project).

Keynote de Luke Kanies

Luke Kanies a démarré la conférence avec une keynote sur l’état de Puppet après presque une décennie d’existence. Puppet continue à changer et à s’améliorer rapidement, et Luke a mis l’accent sur les nouvelles fonctionnalités et les améliorations attendues pour Puppet 4, principalement focalisées sur les performances : le port de Facter en C++ (alias cFacter) et du Puppet Master sur la JVM (alias Puppet Server), ainsi que l’introduction d’un nouveau système de classification dynamique pour Puppet Enterprise, et la possibilité d’accéder facilement à des métriques du Puppet Master dans Puppet Enterprise en utilisant le Puppet Server.

Vers le Futur ­- Les buts pour Puppet 4

La première conférence à laquelle Raphaël a assisté était une présentation générale des buts de Puppet 4, donnée par ses ingénieurs principaux: Andrew Parker et Kylo Ginsberg. Ils ont présenté les divers réécritures et rendront Puppet plus rapide (principalement cFacter et le Puppet Server), ainsi que les nouvelles fonctionnalités du langage, décrites avec plus de détails dans la présentation de Henrik Lindberg.

Ajuster les performances de votre infrastructure Puppet

Il est clair que Puppet 4 va apporter des gains en performances importants. Cependant, la plupart d’entre nous cherchons déjà à améliorer la performance de Puppet 3. C’était le sujet de la présentation de Nic Benders. Il a expliqué comment l’équipe de New Relic a instrumentalisé le Puppet Master et la PuppetDB afin d’extraire des métriques de profilage utiles, qui ont aidé à comprendre comment ajuster leur infrastructure Puppet.

Sans surprise, leur analyse a montré que le Puppet Master passait le plus clair de son temps à appeler la PuppetDB, et que les appels les plus gourmands en temps dans la PuppetDB étaient adressés à la base de données PostgreSQL. Il est intéressant de noter qu’ils ont amélioré les performances du système en ajoutant des index à leur base de données PostgreSQL.

Le Langage Puppet 4.0

Une des fonctionnalités les plus attendues de Puppet 4 (et déjà disponible dans Puppet 3 avec le réglage `parser=future`) est la mise à jour de la DSL. Henrik Lindberg, l’auteur principal de cette refactorisation du langage, a présenté ces nouvelles fonctionnalités : les boucles logiques (en style Ruby), un typage d’objets strict et une clarification des types d’objets (un nombre est un nombre, la chaîne vide est fausse, etc.).

C’était une très bonne présentation pour toute personne n’ayant pas suivi les posts sur le sujet sur le blog d’Henrik. Un must pour se préparer à la transition prochaine à Puppet 4.

Un workflow R10K de tueur

Puppet est un excellent outil, mais un excellent outil ne vaut pas grand chose dans un bon workflow. Dans cette présentation, Phil Zimmerman a présenté l’aventure qui a conduit les ingénieurs de Time Warner Cable d’un dépôt de modules Puppet monolithique a un workflow flexible de dépôts individuels, articulés autour de R10K, de git, d’un système d’intégration continu (Jenkins, par exemple) et de mises à jour automatiques des modules à l’aide d’un hookpost-receive pour git et de tags git.

Un très bon exemple de workflow pour Puppet, permettant une collaboration efficiente au sein de l’équipe d’opérations tout en validant le code avec des tests unitaires et fonctionnels. Leur hook post-receive ne supporte pas encore Travis CI, mais c’est une fonctionnalité prévue.

Le Puppet Master sur la JVM

Depuis des années maintenant, le portage du Puppet Master sur la JVM (et JRuby) a été vu comme une solution aux problèmes de performance proverbiaux de Ruby. Le projet Puppet Server utilise Clojure pour accomplir ce portage, bénéficiant de la technologie qui a déjà fait de PuppetDB le remplaçant performant que nous connaissons à ActiveRecord et MySQL pour storeconfig.

Chris Price a présenté le Puppet Server et les gains effectifs mesurés avec la version actuelle (en bêta). Il a montré son architecture, basée sur Jetty, JRuby et Clojure.

Les résultats en terme de performance sont impressionnants. Les catalogues compilent plus vite (même sans compiler le code du Puppet Master en bytecode), mais également leur application. En améliorant le temps de réponse sur le Master, l’Agent (toujours en Ruby pur) est capable d’appliquer les catalogues plus rapidement, puisque les requêtes de fichiers ont moins de latence.

L’utilisation de la JVM facilite également le partage de mémoire entre les threads. Différentes fonctionnalités du Puppet Master vont ainsi être graduellement réécriture en Java, rendant l’architecture complète beaucoup plus modulaire.

En plus d’améliorer les performances, le Puppet Server fournit des métriques utiles dans Puppet Enterprise, ce qui a été démontre en graphant les fonctionnalités du Puppet Master dans Graphite.

Le Puppet Server est dores et déjà packagé et peut être utilisé comme remplaçant du Puppet Master sans changement de configuration.

Test Driven Development avec Puppet

Gareth Rushgrove a présenté des idées pour améliorer et automatiser les tests fonctionnels sur Puppet. En particulier, il a commencé à générer des tests fonctionnels (utilisant Serverspec) à partir des ressources stockées dans la PuppetDB.

Cette présentation a été très intéressante car les idées recouvrent et complètent celles de la présentation Tests Fonctionnels Orchestrés que Raphaël a donnée.

Tests Fonctionnels Orchestrés avec Puppet-spec et Mspectator

Cela a été une surprise pour Raphaël que les idées présentées dans la présentation de Gareth convergent avec les siennes concernant les tests fonctionnels. En plus de cela, il s’est rendu compte que Hunter Haugen avait déjà un projet similaire au sien, démarré quasiment en même temps que Puppet-spec.

La combinaison des idées de Gareth sur la génération de tests fonctionnels avec Puppet-spec et Mspectator pourrait conduire à un système où Puppet vérifierait automatiquement son travail après que les catalogues soient appliqués, et où Mspectator pourrait remplacer une partie du monitoring pour ces tests fonctionnels.

Conclusion

Puppetconf 2014 était très intéressante ! Elle a donné lieu à des échanges de très bonnes idées pour le futur de Puppet. À bientôt lors d’un prochain Puppetcamp!