Dans son livre "Chef Infrastructure Automation Cookbook", Matthias Marschall fournit des informations tactiques sur Chef d'Opscode pour des utilisateurs de niveau débutant à expert. Les débutants pourront apprendre progressivement au travers des sections "Comment faire..." qui utilisent des outils open source et des services gratuits. Les très débutants trouveront dans le livre la motivation d'essayer les fonctionnalités avancées de Chef en association avec de nouvelles technologies. Les experts auront le nécessaire pour commencer à se pencher sur l'utilisation de Chef pour automatiser les fondements nécessaires au fonctionnement des applications de production dans les data centers.
Structure pour les Débutants
Le livre est structuré en sections successives, chacune se basant sur les précédentes. Cela se remarque en particulier dans les derniers chapitres de la section "Être prêt" (Getting ready) qui évoquent des techniques précédemment vues dans le livre. Plus subtile, Matthias accompagne le lecteur vers la création d'une "Infrastructure sous forme de code" de haute qualité dans un environnement d'entreprise. Dans le premier chapitre, le livre décrit les actions nécessaires au développement de code Chef dans ce type de contexte. Le chapitre suivant met l'accent sur la qualité en détaillant les différentes techniques pour tester Chef et analyser des exécutions individuelles de celui-ci. Ces deux chapitres prennent place avant l'acquisition des compétences nécessaires à l'écriture de code Chef de bonne facture, qui est prise en charge par les chapitres 3 et 4. Un bon code Chef sépare les responsabilités dans le code afin que les éléments Chef appropriés soient utilisés pour créer une configuration automatisée et dirigée par les données. Au-delà de la séparation des responsabilités, le livre fournit des techniques de sécurisation des données, d'utilisation cross-plateforme et d'exécution idempotente. Commence ensuite une série de trois chapitres sur l'automatisation d'infrastructure prenant comme exemple la progression d'un système. Le chapitre 5 couvre l'utilisation des gestionnaires de paquets, des fichiers et de la compilation de code source. Une fois la distribution de logiciels acquise, le chapitre 6 aborde l'installation automatisée d'applications et des systèmes les supportant. Enfin, le chapitre 7 conclut par la création automatisée de systèmes répondant à certains impératifs comme les performances, la disponibilité, la durabilité, le monitoring, etc.
Motivation pour les Novices
L'utilisation intensive de Vagrant et Berkshelf dans le livre peut être un facteur de motivation pour le lecteur novice. Bien qu'un programmeur n'ait pas besoin de Vagrant ou Berkshelf, leur utilisation peut augmenter la productivité et faciliter l'utilisation de cookbooks communautaires. Il n'est pas nécessaire d'écrire ou de comprendre Ruby en tant que langage pour utiliser Chef, le livre introduit cependant celui-ci pour permettre de tirer pleinement parti des cookbooks. Matthias utilise explicitement de nombreux cookbooks communautaires dont : apache2, HAProxy, heartbeat, iptables, MySQL, nginx, NTP, snmp, varnish, wordpress, etc. Ces exemples peuvent aider à apaiser la résistance que certains novices pourraient avoir à les utiliser durant leur apprentissage de Chef.
Le livre fournit quelques informations sur comment éviter des détours inutiles pour effectuer des tâches prises en charge par Chef ou une technologie associée. On trouve par exemple :
- L'utilisation de l'option '-o' de 'chef-client' pour surcharger une liste d'exécution pour un node spécifique dans Chef Server. Celle-ci permet d'éviter de lourdes modifications juste pour lancer une recette sur une machine
- RSpec, ChefSpec et Fauxhai pour tester vos cookbooks durant le développement
- Test-kitchen, kitchen-vagrant, Vagrant et minitest pour réaliser les tests d'intégration de vos cookbooks
Configuration Multi-Node pour les Experts
Chef fournit des mécanismes intuitifs pour la configuration de nodes individuels. Même la configuration de groupes de nodes similaires est assez simple à appréhender. Il est cependant plus difficile de comprendre la configuration de nodes dépendants de la configuration et de l'état d'autres nodes et non simplement la configuration de Chef. Le livre contient les sections suivantes sur le sujet :
- Utiliser la recherche pour trouver des nodes
- Utiliser la recherche pour trouver des données (data bag items)
- Utiliser HAProxy pour équilibrer la charge entre plusieurs serveurs web
- Créer des services à haute disponibilité avec Heartbeat
- Déployer Nagios pour surveiller les serveurs
Chef ne fournit pas de mécanisme pour coordonner plusieurs exécutions de chef-client. À la place, Chef propose un stockage centralisé dans Chef Server contenant des informations d'état auxquelles les différents clients peuvent accéder pour coordonner leur propre configuration. La recette HAProxy, utilisée dans le livre et se servant du rôle "app_server_role" pour déterminer quels nodes verront leurs requêtes "proxifiées" vers un autre, est un très bon exemple d'utilisation des informations stockées dans Chef Server. De plus, HAproxy est capable de gérer les nodes utilisés pour la balance en fonction de leur disponibilité. La combinaison de cette technologie et de Chef permet de produire une configuration multi-nodes. Un autre exemple est la recette pour mettre en place une haute-disponibilité qui dépend également d'une technologie externe pour effectuer la configuration internode en utilisant une transmission broadcast, il s'agit cette fois-ci de Heartbeat. La mise en place de Nagios est un exemple plus avancé de cette idée : Nagios est une solution de monitoring très connue mais sa configuration par des cookbooks communautaires demande la configuration d'une variété de composants de Chef comme les user data bag items, les service data bag items, la définition de rôles et Chef server search. Matthias introduit l'utilisation de Nagios au travers d'une vérification simple pour aider le lecteur à dépasser cette complexité.
InfoQ a eu l'opportunité de discuter avec Matthias Marschall au sujet de son livre.
InfoQ : Quelle-est votre vision de l'utilisation de Chef pour configurer les systèmes et le déploiement d'applications ? Le déploiement devrait-il être fait avec d'autres outils ?
Matthias : Bien que le cookbook de déploiement d'applications ait beaucoup évolué, je préfère déployer mes applications avec Capistrano ou un outil de déploiement continu qui push (plutôt que Chef qui pull) la dernière version.
InfoQ : Le second chapitre contient des notions avancées. Pourquoi les évoquer avant les chapitres trois et quatre ?
Matthias : Deux raisons à cela : la première est qu'elles sont très utiles pour déterminer ce qui ne va pas dans vos exécutions Chef dans les chapitres suivants, la seconde est que je favorise une approche dirigée par les tests pour vos cookbooks. C'est pour cela que je voulais montrer au lecteur comment écrire des tests pour leurs cookbooks avant de rentrer dans le détail de ces derniers.
InfoQ : Quelle-est la ou les nouvelles fonctionnalités dont Chef a besoin pour élargir ses capacités ?
Matthias : J'aimerais une meilleure intégration des systèmes de contrôle de version. Tout votre code d'infrastructure doit être sous contrôle de version. Avec l'approche actuelle de Chef Server, il y a deux sources de vérité : le dépôt de sources et Chef Server. Le risque est que les deux divergent dans le temps. Une fonctionnalité assurant que votre dépôt de sources et Chef Server sont synchrones serait particulièrement appréciable !
À propos de l'Auteur du livre
Matthias Marschall est un Ingénieur logiciel "Mad in Germany". Ses quatre enfants s'assurent qu'il se sente à l'aise dans les environnements animés et qu'il garde le contrôle des situations chaotiques. Agile, il est passionné de livraison continue, d'automatisation d'infrastructure et de tout ce qui concerne DevOps.