Modifier Cette question et cette réponse ont plusieurs années. Les meilleures pratiques définitives sont enseignées via les modules de formation auto-rythmés par Learn Chef Rally produits par Chef Software, Inc. Le gros de la réponse originale est ci-dessous.
Dans cette réponse, "Chef" ou "chef-client" fait généralement référence à Chef Infra, le produit. Opscode renommé Chef Software, Inc en 2013 . En avril 2019, Chef a ouvert le code source de tous ses produits, en plus de créer un nom de marque cohérent.
Vous ne savez pas s'il est préférable de configurer des rôles dans Ruby DSL, JSON ou à partir de la console de gestion? Pourquoi y a-t-il plusieurs façons de faire la même chose?
Mise à jour 2019 : les fichiers de stratégie constituent le meilleur flux de travail à utiliser. Les rôles sont considérés comme une pratique inférieure et Chef Software, Inc. recommande de migrer vers Policyfiles.
Il existe plusieurs façons de faire la même chose, car les processus de travail sont différents. Vous choisissez le flux de travail le mieux adapté à votre environnement. Laissez-moi vous expliquer quelles sont les différences pour que vous puissiez prendre une décision éclairée.
Ruby DSL for Roles a été créé pour faciliter l’écriture de rôles sans connaître la syntaxe de JSON. C'est un moyen simple de se familiariser avec les rôles. Une fois les modifications apportées, vous les téléchargez sur le serveur Chef avec un couteau.
knife role from file myrole.rb
Cela convertit le rôle en JSON et le stocke sur le serveur. Si votre environnement impose le référentiel Chef dans lequel vos rôles constituent la source de la vérité, cela fonctionne très bien.
JSON est ce que le serveur Chef stocke. Vous devez donc également éditer JSON directement dans la console de gestion. Il faut plus de champs que le Ruby DSL pour que Knife puisse le reconnaître correctement avant de le télécharger. Ces détails sont cachés dans une certaine mesure via l'interface utilisateur Web.
L'inconvénient de l'utilisation de la console webui / management pour l'édition des rôles est qu'ils ne sont pas dans votre système de contrôle de version local, sauf si vous les téléchargez à partir du serveur. Vous pouvez le faire avec un couteau:
knife role show myrole -Fj
Le -Fj
couteau dit "afficher au format JSON". Vous pouvez rediriger la sortie vers un fichier .json si vous le souhaitez.
Mise à jour il y a plusieurs années : il existe des commandes supplémentaires permettant d'utiliser les fichiers dans le référentiel du chef local. Actuellement, ces commandes ne prennent en charge que les fichiers au format JSON. Une communauté RFC est ouverte. Elle traitera de l'ajout de la prise en charge de Ruby DSL pour ces plugins. Voici un bref résumé du flux de travail.
Vérifiez les différences de contenu entre le serveur et le fichier local.
knife diff roles/myrole.json
Téléchargez un fichier de rôle au format JSON. Le roles/
chemin est obligatoire. Ceci est mappé sur le même noeud final d'API sur le serveur.
knife upload roles/myrole.json
Téléchargez le contenu du serveur en écrasant le contenu du fichier dans le référentiel.
knife download roles/myrole.json
Ces commandes proviennent de knife-essentials
, qui est intégré dans le package client chef.
Pouvez-vous organiser des livres de cuisine dans des sous-répertoires? Par exemple, nous avons un logiciel personnalisé pour lequel j'aimerais écrire un livre de cuisine et le coller dans: chef-repo / cookbooks / ourcompanystuff / customsoftwarecookbook, serait-ce une bonne pratique?
Knife s'attend à ce que les livres de recettes habitent, car ils utilisent une API pour télécharger des livres de recettes sur le serveur. Ceci est défini dans le knife.rb
avec cookbook_path
. Dans les anciennes versions de Chef Infra, vous pouviez spécifier un tableau de chemins pour les livres de recettes, mais il est devenu obsolète car il nécessitait davantage de maintenance et était source de confusion pour les utilisateurs.
Par convention, nous nommons des livres de cuisine spécifiques à un client ou à un site avec le nom préfixé dans le répertoire du livre de recettes. Pour votre exemple, ce serait:
chef-repo/cookbooks/ourcompany_customsoftware
Il peut y avoir plusieurs livres de recettes différents pour "notre société" en fonction de ce que vous faites.
Référence supplémentaire:
Est-ce que je crée un livre de recettes pour chaque type de rôle spécifiant ce qu'il fait? Est-ce que ces livres de cuisine incluent d'autres livres de cuisine (c'est-à-dire que le livre de cuisine de mon rôle de serveur Web inclut le livre de cuisine Apache). Je ne suis pas sûr de savoir comment les interdépendances et l'héritage des livres de cuisine sont gérés.
Il n'y a pas de relation directe ou de dépendance entre les rôles et les livres de recettes.
Les rôles ont une liste d'exécution qui spécifie les recettes et les autres rôles à appliquer à tout nœud ayant ce rôle. Les nœuds ont une liste d'exécution pouvant contenir des rôles ou des recettes. Lorsque Chef s'exécute sur le nœud, il développe la liste des tâches pour tous les rôles et toutes les recettes qu'il inclut, puis télécharge les livres de recettes requis. Dans une liste d'exécution de noeud:
recipe[apache2]
Chef téléchargera le apache2
livre de recettes pour le noeud afin de pouvoir appliquer cette recette.
Vous pourriez avoir un livre de recettes spécifique pour un rôle dans votre infrastructure. Plus généralement, vous aurez des livres de recettes servant à configurer certains types de services tels qu'apache2, mysql, redis, haproxy, etc. Ensuite, vous les placeriez dans des rôles appropriés. Si vous avez des tâches spécifiques à une application à personnaliser pour pouvoir remplir un rôle, vous pouvez les écrire dans un livre de recettes personnalisé (comme je l’ai mentionné plus haut).
Référence supplémentaire:
Existe-t-il un classificateur externe de nœuds de marionnettes afin que les nœuds déterminent automatiquement leurs rôles?
"Oui." Chef Infra Server effectue automatiquement le stockage des données de noeud (en JSON), et le serveur indexe également automatiquement toutes les données de noeud pour la recherche.
Référence supplémentaire:
Il semble que vous puissiez configurer les choses avec couteau ou dans la console de gestion, ou éditer des fichiers JSON? C'est très déroutant pour moi pourquoi il y a tant de façons de faire les choses, c'est paralysant! Y a-t-il une raison d'utiliser l'un ou l'autre?
Chef Infra Server dispose d'une API RESTful qui envoie et reçoit des réponses JSON. Knife et la console de gestion sont des interfaces utilisateur permettant d'interagir avec l'API du point de vue de l'administration.
Vous pouvez utiliser l'outil que vous préférez, bien que la console de gestion ne comporte pas autant de fonctionnalités que Knife. La plupart des utilisateurs de Chef Infra préfèrent l’interface de ligne de commande pour la puissance et la flexibilité qu’elle procure, même pour les personnes utilisant Chef Infra sous Windows. En outre, knife
est un outil basé sur les plug-ins permettant de créer de nouveaux plug-ins pour interagir avec le serveur Chef Infra Server ou avec d'autres éléments de votre infrastructure.
Chef Infra est un ensemble de bibliothèques, de primitives et une API. Cela vous donne la possibilité de créer le système de gestion de la configuration qui convient le mieux à votre infrastructure.
Lectures complémentaires:
Comment puis-je provisionner automatiquement des nœuds avec chef dans mon cluster de développement? Avec la marionnette, je lance une machine virtuelle qui se connecte au marionnettiste et déclenche une marche de marionnettes et se configure (le rôle est déterminé par un classificateur de nœud externe). Comment puis-je faire cela avec le chef? - Installez chef avec des fichiers pem / rb qui le lient à un serveur de chef, indiquez manuellement au nœud ses rôles avec un couteau ou modifiez-le dans l'interface de gestion, puis lancez une course chef-client pour se configurer?
Vous voudrez utiliser le plugin couteau bootstrap. Ceci est un plugin intégré qui vient avec un couteau. Vous l'invoquez comme ceci:
knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'
Cette volonté:
- SSH sur le système cible (10.1.1.112) en tant
root
qu'utilisateur utilisant une clé SSH (vous pouvez utiliser SSH comme autre utilisateur, puis l'utiliser --sudo
).
- Installez Ruby
- Installer Chef
- Créez le fichier de configuration Chef pour votre serveur Chef en lisant la configuration du couteau (.chef / knife.rb).
- Copiez la clé privée RSA de "validation", que le nœud utilisera pour s'enregistrer automatiquement auprès du serveur Chef.
- Exécuter
chef-client
à l'aide de l'exécution séparée par des virgules répertoriée spécifiée. Dans cet exemple, seul le webserver
rôle est appliqué.
Cela suppose que le système cible a été provisionné, qu'il possède une adresse IP et que vous pouvez utiliser SSH en tant que root. En fonction de vos stratégies locales et de votre processus de provisioning, vous devrez peut-être en adapter le fonctionnement. La page de démarrage de couteau sur le wiki décrit plus en détail comment cela fonctionne.
Knife propose également des plugins pour un certain nombre de fournisseurs d'informatique en nuage publics tels qu'Amazon EC2 et Rackspace Cloud. Des plugins sont disponibles pour les environnements de cloud privé tels que Eucalyptus et OpenStack. Il existe également des plugins pour VMware, Vsphere et autres. Vous pouvez voir plus d'informations dans la documentation.
Lectures complémentaires:
Existe-t-il d'autres ressources de chef susceptibles de me manquer dans mes recherches?
La documentation Chef est la source principale de documentation.
Le rallye Learn Chef est une série de modules autoguidés qui vous permettent d’en apprendre davantage sur les divers aspects de Chef Infra et d’autres produits Chef.
Auparavant, je tenais un blog sur lequel je publiais des astuces, des astuces et des guides sur Chef Infra: http://jtimberman.housepub.org/ . J'ai eu une série appelée " conseils rapides ". En raison des circonstances de la vie réelle et d'autres engagements, je n'ai plus le temps de maintenir le site, mais je pourrais y revenir ultérieurement.
Les clients Chef peuvent obtenir de l'aide et de l'assistance sur le site d'assistance:
La communauté d’utilisateurs Chef est une excellente source d’aide supplémentaire:
Des ressources supplémentaires sont disponibles sur le chef Software, le site Web Inc. .
J'espère que ça aide.