A la découverte de Chef
Vous souhaitez automatiser la gestion de vos infrastructures ? Alors Chef est peut être fait pour vous. Cet article, loin d’être une référence technologique, vous présentera ce framework qui permet de transformer vos infrastructures en code.
Présentation
Chef est un logiciel de gestion de configuration open-source permettant d’automatiser comment builder, déployer et gérer votre infrastructure. Il simplifie le déploiement de serveurs et applications sur n’importe quel emplacement physique, virtuel ou cloud (appelé nœud) quelque soit la taille de votre infrastructure. Celle-ci devient ainsi versionnable, testable et répétable.
Chef vous permettra notamment :
- de réduire la complexité de gestion des infrastructures par le biais de fichiers de configuration,
- de définir une politique globale regroupant les besoins métiers et opérationnels, workflows de production …
- la mise à jour des configurations de l’ensemble de vos nœuds,
- d’obtenir un retour d’informations des runs effectués sur les nœuds,
- de réaliser des templates (DSL pur Ruby)
- …
Principe
Chaque organisation comprend un serveur central (Chef Server), une ou plusieurs stations de travail (workstation) et chaque nœud de l’infrastructure sera configuré et géré par un chef-client. La configuration des nœuds se fait sous forme de livres de recettes (cookbook) contenant des recettes (recipes), des templates, des fichiers et d’autres ressources customisées. Ces éléments, stockés dans le Chef Server, permettent de définir l’état souhaité des infrastructures à gérer et d’identifier les ressources nécessaires pour passer dans cet état.
Le chef-client, lui, récupère périodiquement du Chef Server, les informations, instructions et politiques dont il a besoin pour évaluer l’état du nœud par rapport à l’état souhaité décrit dans le Chef Server. Au besoin, le chef-client met à jour le nœud sur lequel il est installé. Une fois ces opérations terminées, les données de run mises à jours sont envoyées au Chef Server permettant ainsi d’être stockées et traitées.
Organisation globale des composants de Chef
Le diagramme suivant clarifie les relations entre les différents éléments de Chef.
-
Chef Server
Le Chef Server joue le rôle de centre d’information. Il stocke tous les ‘cookbooks’ et politiques qui seront appliqués aux nœuds, ainsi que les ‘node objects’ décrivant chaque nœud géré par ce Chef Server.
Les ‘node objects’ comportent deux aspects importants : les attributs et les ‘run-lists’. Les attributs permettent de stocker des données spécifiques sur un nœud, comme par exemple un fichier système. Les ‘run-lists’ sont des listes ordonnées de recettes à lancer dans un ordre précis.
Un inconvénient notable de Chef : les ‘cookbooks’ sont en push only du Chef Server vers les chef-client. Cette situation ne posera aucun soucis en utilisation normale, mais peut s’avérer critique si les nœuds ont besoin d’être souvent mis à jour.
-
workstation
Une ‘workstation’ est un ordinateur configuré pour se synchroniser avec le chef-repo et interagir avec un seul Chef Server. Elle inclut de nombreuses features permettant de développer des ‘cookbooks’ et recettes, de configurer des politiques d’organisation (organisation de rôles par exemple), mais également de synchroniser le chef-repo avec le Chef Server, de mettre à jour le Chef Server.
-
chef-client
Le schéma ci-dessous présente le fonctionnement simplifié de l’interaction chef-client et Chef Server
Comme indiqué précédemment, un chef-serveur va permettre de récupérer les informations du Chef Server et de mettre à jour localement le nœud en fonction de ces informations sont transmises via les ‘cookbooks’ et recettes associées (indiquant les ressources nécessaires et leurs états désirés). Ce sont ces mêmes recettes qui permettent d’installer et de configurer des composants logiciels, de déployer des applications…
Le schéma ci-dessous montrent de manière approfondie les interactions Chef Server et chef-client.
Voilà. Pour les plus aventureux, vous trouverez tous les détails de Chef à l’adresse suivante : https://docs.chef.io/
Bonne découverte !